diff options
| author | ladevieq <ladevie.quentin@gmail.com> | 2026-05-21 23:21:43 +0200 |
|---|---|---|
| committer | ladevieq <ladevie.quentin@gmail.com> | 2026-05-21 23:21:43 +0200 |
| commit | 3c091fe6eacd542a506a3f8adf1a8bd91e2e34b0 (patch) | |
| tree | 2264d15d9041bab2c6355f741539b83c61cfc22d /src/utils.c | |
| parent | 890b87336c7a2a9c08f7edca650668fea2adcc13 (diff) | |
Initial work on disassembler
Diffstat (limited to 'src/utils.c')
| -rw-r--r-- | src/utils.c | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/src/utils.c b/src/utils.c index 440b9fb..27dab87 100644 --- a/src/utils.c +++ b/src/utils.c @@ -84,6 +84,13 @@ u64 atou64(const char* str, u32 len) { return number; } +void fill_chars(u8* ptr, u8 c, u32 len) { + for (u32 index = 0U; index < len; index++) { + *ptr = c; + ptr++; + } +} + void print(const char* format, ...) { va_list args; va_start(args, format); @@ -94,24 +101,41 @@ void print(const char* format, ...) { while(*cur_fmt != '\0') { if(*cur_fmt == '%') { cur_fmt++; + const char* num_start = cur_fmt; + u8 num_len = 0U; + u64 fill_count = 0U; + while (is_decimal_digit(*cur_fmt)) { + cur_fmt++; + num_len++; + } + + if (num_len > 0U) { + fill_count = atou64(num_start, num_len); + } + if (*cur_fmt == 's') { const char* str = va_arg(args, const char*); if(str != NULL) { size_t length = 0U; StringCchLengthA(str, sizeof(formatted_str), &length); + i64 relative_fill_count = fill_count - length; + if (relative_fill_count > 0) { + fill_chars((u8*)cur_char, ' ', (u32)relative_fill_count); + cur_char += relative_fill_count; + } StringCchCatA(cur_char, length + 1U, str); cur_char += length; } } else if(*cur_fmt == 'c') { char c = va_arg(args, char); + if (fill_count > 1U) { + fill_chars((u8*)cur_char, ' ', (u32)fill_count - 1U); + cur_char += fill_count - 1U; + } StringCchCatA(cur_char, 1U, &c); cur_char += 1U; } else if (*cur_fmt == 'x' && is_alpha(cur_fmt[1])) { u32 base = 16U; - *cur_char = '0'; - cur_char++; - *cur_char = 'x'; - cur_char++; cur_fmt++; if(*cur_fmt == 'b') { |
