1 #include <stdio.h>
2 #include <stdarg.h>
3
4 #include "color.h"
5
6 enum color {
7 C_RED,
8 C_GREEN,
9 C_YELLOW,
10 C_BLUE,
11 C_MAGENTA,
12 C_CYAN,
13 C_WHITE,
14 C_CLEAR
15 };
16
17 static const char * const color_codes[] = {
18 "\e[31m",
19 "\e[32m",
20 "\e[33m",
21 "\e[34m",
22 "\e[35m",
23 "\e[36m",
24 "\e[37m",
25 "\e[0m",
26 NULL,
27 };
28
29 static enum color attr_colors[] = {
30 C_CYAN,
31 C_YELLOW,
32 C_MAGENTA,
33 C_BLUE,
34 C_GREEN,
35 C_RED
36 };
37
38 static int color_is_enabled;
39
enable_color(void)40 void enable_color(void)
41 {
42 color_is_enabled = 1;
43 }
44
color_fprintf(FILE * fp,enum color_attr attr,const char * fmt,...)45 int color_fprintf(FILE *fp, enum color_attr attr, const char *fmt, ...)
46 {
47 int ret = 0;
48 va_list args;
49
50 va_start(args, fmt);
51
52 if (!color_is_enabled) {
53 ret = vfprintf(fp, fmt, args);
54 goto end;
55 }
56
57 ret += fprintf(fp, "%s", color_codes[attr_colors[attr]]);
58 ret += vfprintf(fp, fmt, args);
59 ret += fprintf(fp, "%s", color_codes[C_CLEAR]);
60
61 end:
62 va_end(args);
63 return ret;
64 }
65