Home | History | Annotate | Download | only in lib
      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 
     40 void enable_color(void)
     41 {
     42 	color_is_enabled = 1;
     43 }
     44 
     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