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