summaryrefslogtreecommitdiffstats
path: root/src/utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils.c')
-rw-r--r--src/utils.c54
1 files changed, 42 insertions, 12 deletions
diff --git a/src/utils.c b/src/utils.c
index f7994f9..de719e9 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -1,3 +1,22 @@
+#if defined (_DEBUG)
+#define assert(x) if (!(x)) __debugbreak();
+#else
+#define assert(x) (x)
+#endif
+void print(const char* format, ...);
+
+u8 is_alpha(char c) {
+ return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z');
+}
+
+u8 is_decimal_digit(char c) {
+ return '0' <= c && c <= '9';
+}
+
+u8 is_hexadecimal_digit(char c) {
+ return ('0' <= c && c <= '9') || ('a' <= c && c <= 'f') || ('A' <= c && c <= 'F');
+}
+
void u64toa(u64 number, char* str, u32 base) {
static char codes[16U] = {
'0',
@@ -89,25 +108,36 @@ void print(const char* format, ...) {
char c = va_arg(args, char);
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') {
+ u8 number = va_arg(args, u8);
+ u64toa((u64)number, cur_char, base);
+ size_t length = 0U;
+ StringCchLengthA(formatted_str, sizeof(formatted_str), &length);
+ cur_char = formatted_str + length;
+ } else if(*cur_fmt == 'u') {
+ u64 number = va_arg(args, u64);
+ u64toa(number, cur_char, base);
+ size_t length = 0U;
+ StringCchLengthA(formatted_str, sizeof(formatted_str), &length);
+ cur_char = formatted_str + length;
+ }
} else if(*cur_fmt == 'b') {
u8 number = va_arg(args, u8);
- u64toa((u64)number, cur_char, 10);
+ u64toa((u64)number, cur_char, 10U);
size_t length = 0U;
StringCchLengthA(formatted_str, sizeof(formatted_str), &length);
cur_char = formatted_str + length;
} else if(*cur_fmt == 'u') {
u64 number = va_arg(args, u64);
- u64toa(number, cur_char, 10);
- size_t length = 0U;
- StringCchLengthA(formatted_str, sizeof(formatted_str), &length);
- cur_char = formatted_str + length;
- } else if(*cur_fmt == 'x') {
- u64 number = va_arg(args, u64);
- *cur_char = '0';
- cur_char++;
- *cur_char = 'x';
- *cur_char++;
- u64toa(number, cur_char, 16);
+ u64toa(number, cur_char, 10U);
size_t length = 0U;
StringCchLengthA(formatted_str, sizeof(formatted_str), &length);
cur_char = formatted_str + length;