From ae0fa95d6aee2a7427c3e3575d74af1ed360e6e5 Mon Sep 17 00:00:00 2001 From: Timerix Date: Sat, 15 Nov 2025 12:12:06 +0500 Subject: [PATCH] added macros for printf format codes --- include/tlibc/std.h | 46 +++++++++++++++++++++------- include/tlibc/string/StringBuilder.h | 1 + include/tlibc/string/str.h | 2 ++ src/filesystem/file.c | 4 +-- src/string/StringBuilder.c | 12 ++++++-- 5 files changed, 49 insertions(+), 16 deletions(-) diff --git a/include/tlibc/std.h b/include/tlibc/std.h index 44cd111..36e0e05 100755 --- a/include/tlibc/std.h +++ b/include/tlibc/std.h @@ -7,21 +7,23 @@ extern "C" { #include #include #include +#include #include #include #include #include -typedef int8_t i8; -typedef uint8_t u8; -typedef int16_t i16; -typedef uint16_t u16; -typedef int32_t i32; -typedef uint32_t u32; -typedef int64_t i64; -typedef uint64_t u64; -typedef float f32; -typedef double f64; +typedef int8_t i8; +typedef int16_t i16; +typedef int32_t i32; +typedef int64_t i64; +typedef uint8_t u8; +typedef uint16_t u16; +typedef uint32_t u32; +typedef uint64_t u64; +typedef float f32; +typedef double f64; +typedef const char* cstr; #if !__cplusplus && !defined(bool) typedef u8 bool; @@ -29,7 +31,29 @@ typedef u8 bool; #define false 0 #endif -typedef const char* cstr; + +#define FMT_i8 "%"PRIi8 +#define FMT_i16 "%"PRIi16 +#define FMT_i32 "%"PRIi32 +#define FMT_i64 "%"PRIi64 +#define FMT_u8 "%"PRIu8 +#define FMT_u16 "%"PRIu16 +#define FMT_u32 "%"PRIu32 +#define FMT_u64 "%"PRIu64 +#define FMT_x8 "%"PRIx8 +#define FMT_x16 "%"PRIx16 +#define FMT_x32 "%"PRIx32 +#define FMT_x64 "%"PRIx64 +#define FMT_X8 "%"PRIX8 +#define FMT_X16 "%"PRIX16 +#define FMT_X32 "%"PRIX32 +#define FMT_X64 "%"PRIX64 +#define FMT_o8 "%"PRIo8 +#define FMT_o16 "%"PRIo16 +#define FMT_o32 "%"PRIo32 +#define FMT_o64 "%"PRIo64 +#define FMT_f32 "%f" +#define FMT_f64 "%lf" #define dbg(N) printf("\e[95m%d\n",N) diff --git a/include/tlibc/string/StringBuilder.h b/include/tlibc/string/StringBuilder.h index 917923f..ee4e721 100755 --- a/include/tlibc/string/StringBuilder.h +++ b/include/tlibc/string/StringBuilder.h @@ -30,6 +30,7 @@ void StringBuilder_append_cstr(StringBuilder* b, cstr s); void StringBuilder_append_str(StringBuilder* b, str s); void StringBuilder_append_i64(StringBuilder* b, i64 a); void StringBuilder_append_u64(StringBuilder* b, u64 a); +void StringBuilder_append_f32(StringBuilder* b, f32 n); void StringBuilder_append_f64(StringBuilder* b, f64 a); void StringBuilder_append_memory(StringBuilder* b, Array(u8) mem, bool uppercase); diff --git a/include/tlibc/string/str.h b/include/tlibc/string/str.h index 88d9741..8b760c7 100755 --- a/include/tlibc/string/str.h +++ b/include/tlibc/string/str.h @@ -11,6 +11,8 @@ typedef struct str { bool isZeroTerminated; } str; +#define FMT_str "%.*s" + /// creates str from a string literal #define STR(LITERAL) str_construct(LITERAL, ARRAY_LEN(LITERAL) - 1, true) diff --git a/src/filesystem/file.c b/src/filesystem/file.c index 930e85b..4b52597 100644 --- a/src/filesystem/file.c +++ b/src/filesystem/file.c @@ -58,7 +58,7 @@ Result(i64) file_tellPos(FILE* f){ Result(void) file_seek(FILE* f, i64 offset, SeekOrigin origin){ if(IFWIN(_fseeki64, fseeko64)(f, offset, (int)origin) != 0){ return RESULT_ERROR_FMT( - "Can't seek (offset: " IFWIN("%lli", "%li") ", origin: %i) in file: %s", + "Can't seek (offset: "FMT_i64", origin: %i) in file: %s", offset, origin, strerror(errno)); } return RESULT_VOID; @@ -119,7 +119,7 @@ Result(void) file_readStructsExactly(FILE* f, void* dst, u64 struct_size, u64 ex } if(r != exact_count){ return RESULT_ERROR_FMT( - "read " IFWIN("%llu", "%lu") " structures out of " IFWIN("%llu", "%lu"), + "read "FMT_u64" structures out of "FMT_u64, r, exact_count); } return RESULT_VOID; diff --git a/src/string/StringBuilder.c b/src/string/StringBuilder.c index 5de448e..84cc1ce 100755 --- a/src/string/StringBuilder.c +++ b/src/string/StringBuilder.c @@ -51,19 +51,25 @@ void StringBuilder_append_cstr(StringBuilder* b, cstr s){ void StringBuilder_append_i64(StringBuilder* b, i64 n){ char buf[32]; - sprintf(buf, IFWIN("%lli", "%li"), n); + sprintf(buf, FMT_i64, n); StringBuilder_append_cstr(b, buf); } void StringBuilder_append_u64(StringBuilder* b, u64 n){ char buf[32]; - sprintf(buf, IFWIN("%llu", "%lu"), n); + sprintf(buf, FMT_u64, n); + StringBuilder_append_cstr(b, buf); +} + +void StringBuilder_append_f32(StringBuilder* b, f32 n){ + char buf[32]; + sprintf(buf, FMT_f32, n); StringBuilder_append_cstr(b, buf); } void StringBuilder_append_f64(StringBuilder* b, f64 n){ char buf[32]; - sprintf(buf, "%lf", n); + sprintf(buf, FMT_f64, n); StringBuilder_append_cstr(b, buf); }