You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
856 B
64 lines
856 B
#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; |
|
}
|
|
|