10 #ifdef _WIN32 /* Windows */
12 void color_set (FILE *fid
, color_e color
)
14 /* save default configuration */
17 CONSOLE_SCREEN_BUFFER_INFO info
;
18 GetConsoleScreenBufferInfo (GetStdHandle (STD_OUTPUT_HANDLE
), &info
);
19 init
= info
.wAttributes
;
22 /* default attribute */
25 /* define foreground color */
26 if (FG_DEFAULT
== (color
& FG_MASK
)) {
27 attr
|= init
& (FOREGROUND_RED
| FOREGROUND_GREEN
| FOREGROUND_BLUE
| FOREGROUND_INTENSITY
);
29 attr
|= (color
& FG_BRIGHT
) ? FOREGROUND_INTENSITY
: 0;
30 switch (color
& FG_MASK
) {
31 case FG_RED
: attr
|= FOREGROUND_RED
; break;
32 case FG_GREEN
: attr
|= FOREGROUND_GREEN
; break;
33 case FG_BLUE
: attr
|= FOREGROUND_BLUE
; break;
34 case FG_YELLOW
: attr
|= FOREGROUND_RED
| FOREGROUND_GREEN
; break;
35 case FG_MAGENTA
: attr
|= FOREGROUND_RED
| FOREGROUND_BLUE
; break;
36 case FG_CYAN
: attr
|= FOREGROUND_GREEN
| FOREGROUND_BLUE
; break;
37 case FG_WHITE
: attr
|= FOREGROUND_RED
| FOREGROUND_GREEN
| FOREGROUND_BLUE
; break;
41 /* define background color */
42 if (BG_DEFAULT
== (color
& BG_MASK
)) {
43 attr
|= init
& (BACKGROUND_RED
| BACKGROUND_GREEN
| BACKGROUND_BLUE
| BACKGROUND_INTENSITY
);
45 attr
|= (color
& BG_BRIGHT
) ? BACKGROUND_INTENSITY
: 0;
46 switch (color
&BG_MASK
) {
47 case BG_RED
: attr
|= BACKGROUND_RED
; break;
48 case BG_GREEN
: attr
|= BACKGROUND_GREEN
; break;
49 case BG_BLUE
: attr
|= BACKGROUND_BLUE
; break;
50 case BG_YELLOW
: attr
|= BACKGROUND_RED
| BACKGROUND_GREEN
; break;
51 case BG_MAGENTA
: attr
|= BACKGROUND_RED
| BACKGROUND_BLUE
; break;
52 case BG_CYAN
: attr
|= BACKGROUND_GREEN
| BACKGROUND_BLUE
; break;
53 case BG_WHITE
: attr
|= BACKGROUND_RED
| BACKGROUND_GREEN
| BACKGROUND_BLUE
; break;
57 /* define underline state */
58 if (color
& UNDERLINE
) {
59 attr
|= COMMON_LVB_UNDERSCORE
;
62 /* set text attribute */
63 SetConsoleTextAttribute (GetStdHandle ((fid
== stdout
) ? STD_OUTPUT_HANDLE
: STD_ERROR_HANDLE
), attr
);
68 void color_set (FILE *fid
, color_e color
)
70 /* check if it's a terminal */
71 if (!isatty (fileno (fid
))) {
76 fprintf (fid
, "\033[m");
78 /* set foreground color */
79 if (FG_DEFAULT
!= (color
& FG_MASK
)) {
80 fprintf (fid
, "\033[%dm", 29 + (color
& FG_MASK
) + ((color
& FG_BRIGHT
) ? 60 : 0));
83 /* set background color */
84 if (BG_DEFAULT
!= (color
& BG_MASK
)) {
85 fprintf (fid
, "\033[%dm", 39 + ((color
& BG_MASK
) >> 8) + ((color
& BG_BRIGHT
) ? 60 : 0));
88 /* set underline state */
89 if (color
& UNDERLINE
) {
90 fprintf (fid
, "\033[4m");
96 /* vim: set ts=4 sw=4 et: */