diff options
Diffstat (limited to 'engine/core/logging.c')
-rw-r--r-- | engine/core/logging.c | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/engine/core/logging.c b/engine/core/logging.c new file mode 100644 index 0000000..b7f77bd --- /dev/null +++ b/engine/core/logging.c @@ -0,0 +1,114 @@ +/* + * Rune Game Engine + * Copyright 2024 Danny Holman <dholman@gymli.org> + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + */ + +#include <rune/core/logging.h> +#include <rune/core/config.h> +#include <stdio.h> +#include <string.h> +#include <stdarg.h> + +#define COLOR_NONE "" +#define COLOR_DEFAULT "\033[0m" +#define COLOR_RED "\033[31m" +#define COLOR_GREEN "\033[32m" +#define COLOR_YELLOW "\033[33m" +#define COLOR_BLUE "\033[34m" + +#define LSTR_FATAL "[FATAL]" +#define LSTR_ERROR "[ERROR]" +#define LSTR_WARN "[WARNING]" +#define LSTR_INFO "[INFO]" +#define LSTR_DEBUG "[DEBUG]" + +static int debug_enabled = 0; +static int color_enabled = 0; + +void log_output(int level, const char *fmt, ...) { + char out[4096]; + memset(out, 0, sizeof(out)); + + debug_enabled = rune_get_log_debug(); + color_enabled = rune_get_log_color(); + + va_list arg_ptr; + va_start(arg_ptr, fmt); + vsnprintf(out, 4096, fmt, arg_ptr); + va_end(arg_ptr); + + char *lvl_str; + char *color = COLOR_NONE; + switch (level) { + case LOG_FATAL: + if (color_enabled == 1) + color = COLOR_RED; + lvl_str = LSTR_FATAL; + break; + case LOG_ERROR: + if (color_enabled == 1) + color = COLOR_RED; + lvl_str = LSTR_ERROR; + break; + case LOG_WARN: + if (color_enabled == 1) + color = COLOR_YELLOW; + lvl_str = LSTR_WARN; + break; + case LOG_INFO: + lvl_str = LSTR_INFO; + break; + case LOG_DEBUG: + if (color_enabled == 1) + color = COLOR_GREEN; + if (debug_enabled == 0) + return; + lvl_str = LSTR_DEBUG; + break; + } + + if (color_enabled == 0) { + printf("%s %s\n", lvl_str, out); + } else { + printf("%s%s %s\n", color, lvl_str, out); + printf(COLOR_DEFAULT); + } +} + +//#ifdef _WIN32 +// +//#include <windows.h> +// +//void enable_log_color(void) { +// HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); +// SetConsoleMode(handle, ENABLE_VIRTUAL_TERMINAL_PROCESSING); +// color_enabled = 1; +//} +// +//#else +// +//void enable_log_color(void) { +// color_enabled = 1; +//} +// +//#endif +// +//void disable_log_color(void) { +// color_enabled = 0; +//} |