evwm/log.h

55 lines
2.9 KiB
C

#ifndef __LOG_H__
#define __LOG_H__
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
#define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)
#define TERM_BLUE "\033[1;94m"
#define TERM_GREEN "\033[1;92m"
#define TERM_YELLOW "\033[1;93m"
#define TERM_RED "\033[1;91m"
#define TERM_CYAN "\033[1;96m"
#define TERM_WHITE "\033[1;97m"
#define TERM_PURPLE "\033[1;95m"
#define TERM_RESET "\033[0m"
#define TERM_TME TERM_WHITE
#define TERM_INF TERM_WHITE
#define TERM_WRN TERM_YELLOW
#define TERM_ERR TERM_RED
#define TERM_ABT TERM_RED
#define TERM_DBG TERM_CYAN
#define TERM_FUN TERM_PURPLE
#define TERM_FLE TERM_BLUE
#define TERM_NRM TERM_RESET
// Not very C99 ish, but hey, nobody is perfect
#define __STD_LOG(_file, _fmt, ...) fprintf(\
_file, TERM_NRM TERM_TME "[%s] " TERM_FLE "[%s:%d] " TERM_NRM \
TERM_FUN "[%s] " TERM_NRM \
_fmt "%s\n", \
_current_time(), __FILENAME__, __LINE__, __func__, __VA_ARGS__ \
)
#define __FORM_LOG(_color, _name, ...) __STD_LOG(stdout, _color "[" _name "]" TERM_NRM " " __VA_ARGS__, "")
#define inf(...) __FORM_LOG(TERM_INF , "INFO", __VA_ARGS__)
#define dbg(...) __FORM_LOG(TERM_DBG, "DEBUG", __VA_ARGS__)
#define wrn(...) __FORM_LOG(TERM_WRN, "WARNING", __VA_ARGS__)
#define err(...) __FORM_LOG(TERM_ERR, "ERROR", __VA_ARGS__)
#define __ftl(...) __FORM_LOG(TERM_ERR, "FATAL", __VA_ARGS__)
#define ABS(X) ((X) < 0 ? (-X) : (X))
#define SWAP(X, Y, T) do { T s = X; X = Y; Y = s; } while(0)
#define UNUSED(x) ((void)(x))
const char *
_current_time();
#endif