65 lines
856 B
C
65 lines
856 B
C
#include <stdio.h>
|
|
#include <stdarg.h>
|
|
|
|
#include "color.h"
|
|
|
|
enum color {
|
|
C_RED,
|
|
C_GREEN,
|
|
C_YELLOW,
|
|
C_BLUE,
|
|
C_MAGENTA,
|
|
C_CYAN,
|
|
C_WHITE,
|
|
C_CLEAR
|
|
};
|
|
|
|
static const char * const color_codes[] = {
|
|
"\e[31m",
|
|
"\e[32m",
|
|
"\e[33m",
|
|
"\e[34m",
|
|
"\e[35m",
|
|
"\e[36m",
|
|
"\e[37m",
|
|
"\e[0m",
|
|
NULL,
|
|
};
|
|
|
|
static enum color attr_colors[] = {
|
|
C_CYAN,
|
|
C_YELLOW,
|
|
C_MAGENTA,
|
|
C_BLUE,
|
|
C_GREEN,
|
|
C_RED
|
|
};
|
|
|
|
static int color_is_enabled;
|
|
|
|
void enable_color(void)
|
|
{
|
|
color_is_enabled = 1;
|
|
}
|
|
|
|
int color_fprintf(FILE *fp, enum color_attr attr, const char *fmt, ...)
|
|
{
|
|
int ret = 0;
|
|
va_list args;
|
|
|
|
va_start(args, fmt);
|
|
|
|
if (!color_is_enabled) {
|
|
ret = vfprintf(fp, fmt, args);
|
|
goto end;
|
|
}
|
|
|
|
ret += fprintf(fp, "%s", color_codes[attr_colors[attr]]);
|
|
ret += vfprintf(fp, fmt, args);
|
|
ret += fprintf(fp, "%s", color_codes[C_CLEAR]);
|
|
|
|
end:
|
|
va_end(args);
|
|
return ret;
|
|
}
|