#ifndef DEBUG_H #define DEBUG_H // TODO: Maybe add a IME subsystem? typedef enum { MODULE_EGL = 1 << 0, MODULE_KEYBOARD = 1 << 1, MODULE_MOUSE = 1 << 2, MODULE_WAYLAND = 1 << 3, MODULE_CONTROLLER = 1 << 4, MODULE_HOTRELOAD = 1 << 5, MODULE_ALL = ~0 } console_verbosity_t; typedef enum { ERROR_LEVEL_0, // do not print errors ERROR_LEVEL_ERROR = 1, ERROR_LEVEL_WARNING = 2, ERROR_LEVEL_LOG = 3, ERROR_LEVEL_DEBUG = 4, } error_level_t; extern console_verbosity_t console_verbosity; extern error_level_t error_verbosity; #define console_err(fmt, ...) if (error_verbosity >= ERROR_LEVEL_ERROR) fprintf(stderr, fmt, ##__VA_ARGS__) #define console_warn(fmt, ...) if (error_verbosity >= ERROR_LEVEL_WARNING) fprintf(stderr, fmt, ##__VA_ARGS__) #define console_log(fmt, ...) if (error_verbosity >= ERROR_LEVEL_LOG) fprintf(stdout, fmt, ##__VA_ARGS__) #define console_debug(fmt, ...) if (error_verbosity >= ERROR_LEVEL_DEBUG) fprintf(stderr, fmt, ##__VA_ARGS__) #define console_err_ss(subsystem, fmt, ...) if (console_verbosity & subsystem) console_err(fmt, ##__VA_ARGS__) #define console_warn_ss(subsystem, fmt, ...) if (console_verbosity & subsystem) console_warn(fmt, ##__VA_ARGS__) #define console_log_ss(subsystem, fmt, ...) if (console_verbosity & subsystem) console_log(fmt, ##__VA_ARGS__) #define console_debug_ss(subsystem, fmt, ...) if (console_verbosity & subsystem) console_debug(fmt, ##__VA_ARGS__) #endif