diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/error.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/lib/error.c b/lib/error.c new file mode 100644 index 0000000..78f75ef --- /dev/null +++ b/lib/error.c @@ -0,0 +1,53 @@ +#include <merror.h> +#include <stdarg.h> +#include <stdio.h> + +char *current_file = "file.asm"; + +__attribute__((format(printf, 4, 5))) +void __log_impl_pos(int line, int column, int type, const char *format, ...) +{ + va_list list; + va_start(list, format); + + char *t = NULL; + switch (type) { + case __DEBUG: + t = "\033[34mdebug:\033[0m"; + break; + case __WARNING: + t = "\033[35mwarning:\033[0m"; + break; + case __ERROR: + t = "\033[31merror:\033[0m"; + break; + } + + printf("%s:%d:%d: %s ", current_file, line, column, t); + vprintf(format, list); + putchar('\n'); +} + +__attribute__((format(printf, 2, 3))) +void __log_impl(int type, const char *format, ...) +{ + va_list list; + va_start(list, format); + + char *t = NULL; + switch (type) { + case __DEBUG: + t = "\033[34mdebug:\033[0m"; + break; + case __WARNING: + t = "\033[35mwarning:\033[0m"; + break; + case __ERROR: + t = "\033[31merror:\033[0m"; + break; + } + + printf("%s ", t); + vprintf(format, list); + putchar('\n'); +} |