aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2024-06-14 20:05:50 +0200
committerBad Diode <bd@badd10de.dev>2024-06-14 20:05:50 +0200
commitf343f6f13f470915f971f3ca9361ff267960ca6a (patch)
tree9133ba12cb40e231403c9248d6d3e6e2d6143194 /src
parentf90a2480e2a4198fdc94e4635f6f86dffdbe253a (diff)
downloadbdl-f343f6f13f470915f971f3ca9361ff267960ca6a.tar.gz
bdl-f343f6f13f470915f971f3ca9361ff267960ca6a.zip
Add more logging functions
Diffstat (limited to 'src')
-rw-r--r--src/badlib.h107
-rw-r--r--src/main.c24
2 files changed, 128 insertions, 3 deletions
diff --git a/src/badlib.h b/src/badlib.h
index f0f71aa..8ce4634 100644
--- a/src/badlib.h
+++ b/src/badlib.h
@@ -928,10 +928,24 @@ log_str(Logger *l, Str str) {
928} 928}
929 929
930void 930void
931log_byte(Logger *l, u8 b) {
932 assert(l);
933 Buf *buf = &l->buf;
934 sz avail = buf->cap - buf->size;
935 if (avail == 0) {
936 log_flush(l);
937 avail = buf->cap - buf->size;
938 assert(avail > 0);
939 }
940 buf_insert(&l->buf, &b, 1, l->storage);
941}
942
943void
931log_int(Logger *l, sz num) { 944log_int(Logger *l, sz num) {
945 assert(l);
932 u8 tmp[64]; 946 u8 tmp[64];
933 u8 *end = tmp + sizeof(tmp); 947 u8 *end = tmp + sizeof(tmp);
934 u8 *beg = tmp; 948 u8 *beg = end;
935 sz t = num > 0 ? num : -num; 949 sz t = num > 0 ? num : -num;
936 do { 950 do {
937 *--beg = '0' + t % 10; 951 *--beg = '0' + t % 10;
@@ -946,4 +960,95 @@ log_int(Logger *l, sz num) {
946 log_str(l, parsed); 960 log_str(l, parsed);
947} 961}
948 962
963void
964log_hex(Logger *l, sz num, sz zeroes) {
965 assert(l);
966 char char_map[] = "0123456789abcdef";
967 log_str(l, cstr("0x"));
968 u8 tmp[64];
969 zeroes = MIN((sz)sizeof(ptrsize) * 2, zeroes);
970 u8 *end = tmp + sizeof(tmp);
971 u8 *beg = end;
972 sz t = num > 0 ? num : -num;
973 do {
974 *--beg = char_map[t % 16];
975 } while (t /= 16);
976 zeroes -= end - beg;
977 while (zeroes-- > 0) {
978 *--beg = '0';
979 }
980 Str parsed = {
981 .mem = beg,
982 .size = end - beg,
983 };
984 log_str(l, parsed);
985}
986
987void
988log_bin(Logger *l, sz num, sz zeroes) {
989 assert(l);
990 char char_map[] = "01";
991 log_str(l, cstr("0b"));
992 u8 tmp[64];
993 zeroes = MIN((sz)sizeof(ptrsize) * 2, zeroes);
994 u8 *end = tmp + sizeof(tmp);
995 u8 *beg = end;
996 sz t = num > 0 ? num : -num;
997 do {
998 *--beg = char_map[t % 2];
999 } while (t /= 2);
1000 zeroes -= end - beg;
1001 while (zeroes-- > 0) {
1002 *--beg = '0';
1003 }
1004 Str parsed = {
1005 .mem = beg,
1006 .size = end - beg,
1007 };
1008 log_str(l, parsed);
1009}
1010
1011void
1012log_float(Logger *l, f64 num, sz precision) {
1013 assert(l);
1014 if (num == 0x7ff0000000000000L) {
1015 log_str(l, cstr("inf"));
1016 return;
1017 }
1018 if (num == 0xfff0000000000000L) {
1019 log_str(l, cstr("-inf"));
1020 return;
1021 }
1022 if (num == 0x7ff8000000000000L) {
1023 log_str(l, cstr("nan"));
1024 return;
1025 }
1026 if (precision == 0) {
1027 num += 0.5;
1028 sz integral = num;
1029 log_int(l, integral);
1030 return;
1031 }
1032 sz prec = 1;
1033 while (precision > 0) {
1034 prec *= 10;
1035 precision--;
1036 }
1037 if (num < 0) {
1038 log_byte(l, '-');
1039 num = -num;
1040 }
1041 num += 0.5 / prec;
1042 sz integral = num;
1043 sz fractional = (num - integral) * prec;
1044 log_int(l, integral);
1045 log_byte(l, '.');
1046 for (sz i = prec / 10; i > 1; i /= 10) {
1047 if (i > fractional) {
1048 log_byte(l, '0');
1049 }
1050 }
1051 log_int(l, fractional);
1052}
1053
949#endif // BADLIB_H 1054#endif // BADLIB_H
diff --git a/src/main.c b/src/main.c
index 945ebe0..b6a0da4 100644
--- a/src/main.c
+++ b/src/main.c
@@ -51,8 +51,28 @@ process_file(Str path) {
51 }; 51 };
52 log_str(&logger_info, cstr("<<< ")); 52 log_str(&logger_info, cstr("<<< "));
53 log_int(&logger_info, -1234); 53 log_int(&logger_info, -1234);
54 // log_str(&logger_info, cstr("processing file: ")); 54 log_str(&logger_info, cstr(" | "));
55 // log_str(&logger_info, path); 55 log_hex(&logger_info, (sz)&logger_info, 16);
56 log_str(&logger_info, cstr(" | "));
57 log_hex(&logger_info, 15, 8);
58 log_str(&logger_info, cstr(" | "));
59 log_hex(&logger_info, 16, 8);
60 log_str(&logger_info, cstr(" | "));
61 log_bin(&logger_info, 15, 8);
62 log_str(&logger_info, cstr(" | "));
63 log_bin(&logger_info, 16, 8);
64 log_str(&logger_info, cstr(" | "));
65 log_float(&logger_info, 3.1234, 0);
66 log_str(&logger_info, cstr(" | "));
67 log_float(&logger_info, 3.14, 4);
68 log_str(&logger_info, cstr(" | "));
69 log_float(&logger_info, -0.01415, 8);
70 log_str(&logger_info, cstr(" | "));
71 log_float(&logger_info, (f64)0x7ff0000000000000L, 0);
72 log_str(&logger_info, cstr(" | "));
73 log_float(&logger_info, (f64)0xfff0000000000000L, 0);
74 log_str(&logger_info, cstr(" | "));
75 log_float(&logger_info, (f64)0x7ff8000000000000L, 0);
56 log_str(&logger_info, cstr(" >>>")); 76 log_str(&logger_info, cstr(" >>>"));
57 log_str(&logger_info, cstr("\n")); 77 log_str(&logger_info, cstr("\n"));
58 log_flush(&logger_info); 78 log_flush(&logger_info);