AnsiColor.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2016, Texas Instruments Incorporated
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * * Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * * Neither the name of Texas Instruments Incorporated nor the names of
17  * its contributors may be used to endorse or promote products derived
18  * from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 
33 #ifndef ANSI_COLOR_H_
34 #define ANSI_COLOR_H_
35 
36 #define _ANSI_TERM_GET_OVERRIDE(_1, _2, _3, _4, _5, NAME, ...) NAME
37 
38 #define _ANSI_TERM_CONCAT_COLOR5(a, b, c, d, e) \
39  "\x1b[" _ANSI_TERM_##a ";" _ANSI_TERM_##b ";" _ANSI_TERM_##c ";" _ANSI_TERM_##d ";" _ANSI_TERM_##e "m"
40 #define _ANSI_TERM_CONCAT_COLOR4(a, b, c, d) \
41  "\x1b[" _ANSI_TERM_##a ";" _ANSI_TERM_##b ";" _ANSI_TERM_##c ";" _ANSI_TERM_##d "m"
42 #define _ANSI_TERM_CONCAT_COLOR3(a, b, c) "\x1b[" _ANSI_TERM_##a ";" _ANSI_TERM_##b ";" _ANSI_TERM_##c "m"
43 #define _ANSI_TERM_CONCAT_COLOR2(a, b) "\x1b[" _ANSI_TERM_##a ";" _ANSI_TERM_##b "m"
44 #define _ANSI_TERM_CONCAT_COLOR1(a) "\x1b[" _ANSI_TERM_##a "m"
45 
46 #define _ANSI_TERM_FG_BLACK "30"
47 #define _ANSI_TERM_FG_RED "31"
48 #define _ANSI_TERM_FG_GREEN "32"
49 #define _ANSI_TERM_FG_YELLOW "33"
50 #define _ANSI_TERM_FG_BLUE "34"
51 #define _ANSI_TERM_FG_MAGENTA "35"
52 #define _ANSI_TERM_FG_CYAN "36"
53 #define _ANSI_TERM_FG_WHITE "37"
54 
55 #define _ANSI_TERM_BG_BLACK "40"
56 #define _ANSI_TERM_BG_RED "41"
57 #define _ANSI_TERM_BG_GREEN "42"
58 #define _ANSI_TERM_BG_YELLOW "43"
59 #define _ANSI_TERM_BG_BLUE "44"
60 #define _ANSI_TERM_BG_MAGENTA "45"
61 #define _ANSI_TERM_BG_CYAN "46"
62 #define _ANSI_TERM_BG_WHITE "47"
63 
64 #define _ANSI_TERM_ATTR_RESET "0"
65 #define _ANSI_TERM_ATTR_BOLD "1"
66 #define _ANSI_TERM_ATTR_UNDERLINE "4"
67 #define _ANSI_TERM_ATTR_BLINK "5"
68 
69 /* @brief Returns an ANSI escape sequence for the chosen colors and style
70  *
71  * The parameters are variadic, and up to five can be specified in any order:
72  *
73  * FG_BLACK, FG_RED, FG_GREEN, FG_YELLOW, FG_BLUE, FG_MAGENTA, FG_CYAN, FG_WHITE,
74  * BG_BLACK, BG_RED, BG_GREEN, BG_YELLOW, BG_BLUE, BG_MAGENTA, BG_CYAN, BG_WHITE,
75  * ATTR_RESET, ATTR_BOLD, ATTR_UNDERLINE, ATTR_BLINK
76  *
77  * Example use:
78  * char str[] = ANSI_COLOR(FG_WHITE, ATTR_BOLD) "Hello" ANSI_COLOR(ATTR_RESET)
79  * --> "Esc[37;1mHelloEsc[0m" where Esc is the Escape control character 0x1B.
80  *
81  * @param 1 - color or style
82  * @param 2 - color or style
83  * @param 3 - color or style
84  * @param 4 - color or style
85  * @param 5 - color or style
86  *
87  */
88 #define ANSI_COLOR(...) \
89  _ANSI_TERM_GET_OVERRIDE(__VA_ARGS__, \
90  _ANSI_TERM_CONCAT_COLOR5, \
91  _ANSI_TERM_CONCAT_COLOR4, \
92  _ANSI_TERM_CONCAT_COLOR3, \
93  _ANSI_TERM_CONCAT_COLOR2, \
94  _ANSI_TERM_CONCAT_COLOR1) \
95  (__VA_ARGS__)
96 
97 #endif /* ANSI_COLOR_H_ */
© Copyright 1995-2022, Texas Instruments Incorporated. All rights reserved.
Trademarks | Privacy policy | Terms of use | Terms of sale