CLibs
Loading...
Searching...
No Matches
terminal_colors.h
Go to the documentation of this file.
1/*
2 * Functions and macros for working with colors on UNIX terminals.
3 *
4 *
5 * Created by MacBook on 14.01.2025.
6 */
7
8#ifndef CLIBS_TERMINAL_COLORS_H
9#define CLIBS_TERMINAL_COLORS_H
10
11#include "attributes.h" /* PrintfLike(), LibraryDefined */
12
13#include <stdarg.h>
14#include <stdio.h>
15
16
18#define PRINT_COLOR "%s"
19
30#define COLOR_CREATOR( NUM ) "\033[" NUM "m"
31
32
33#define COLOR_DEFAULT COLOR_CREATOR( "0" )
34
35
36#define GROUND_FORE "3"
37#define GROUND_BACK "4"
38
39
40#define COLORCODE_BLACK "0"
41#define COLORCODE_RED "1"
42#define COLORCODE_GREEN "2"
43#define COLORCODE_YELLOW "3"
44#define COLORCODE_BLUE "4"
45#define COLORCODE_MAGENTA "5"
46#define COLORCODE_CYAN "6"
47#define COLORCODE_WHITE "7"
48
49#define FOREGROUND_BLACK COLOR_CREATOR( GROUND_FORE COLORCODE_BLACK )
50#define FOREGROUND_RED COLOR_CREATOR( GROUND_FORE COLORCODE_RED )
51#define FOREGROUND_GREEN COLOR_CREATOR( GROUND_FORE COLORCODE_GREEN )
52#define FOREGROUND_YELLOW COLOR_CREATOR( GROUND_FORE COLORCODE_YELLOW )
53#define FOREGROUND_BLUE COLOR_CREATOR( GROUND_FORE COLORCODE_BLUE )
54#define FOREGROUND_MAGENTA COLOR_CREATOR( GROUND_FORE COLORCODE_MAGENTA )
55#define FOREGROUND_CYAN COLOR_CREATOR( GROUND_FORE COLORCODE_CYAN )
56#define FOREGROUND_WHITE COLOR_CREATOR( GROUND_FORE COLORCODE_WHITE )
57
58#define BACKGROUND_BLACK COLOR_CREATOR( GROUND_BACK COLORCODE_BLACK )
59#define BACKGROUND_RED COLOR_CREATOR( GROUND_BACK COLORCODE_RED )
60#define BACKGROUND_GREEN COLOR_CREATOR( GROUND_BACK COLORCODE_GREEN )
61#define BACKGROUND_YELLOW COLOR_CREATOR( GROUND_BACK COLORCODE_YELLOW )
62#define BACKGROUND_BLUE COLOR_CREATOR( GROUND_BACK COLORCODE_BLUE )
63#define BACKGROUND_MAGENTA COLOR_CREATOR( GROUND_BACK COLORCODE_MAGENTA )
64#define BACKGROUND_CYAN COLOR_CREATOR( GROUND_BACK COLORCODE_CYAN )
65#define BACKGROUND_WHITE COLOR_CREATOR( GROUND_BACK COLORCODE_WHITE )
66
67
68#define FOREGROUND_GRAY COLOR_CREATOR( GROUND_FORE "8;5;238" )
69#define BACKGROUND_GRAY COLOR_CREATOR( GROUND_BACK "8;5;238" )
70
71
79LibraryDefined inline bool SetTerminalColor( FILE *stream, const char *Color )
80{
81 return fprintf( stream, "%s", Color ) > 0;
82}
83
85LibraryDefined inline int VPrintInColor( FILE *file,
86 const char *Color,
87 const char *format,
88 va_list vaList )
89{
90 if ( !SetTerminalColor( file, Color ) )
91 return -1;
92
93 const int rv = vfprintf( file, format, vaList );
94
95 if ( !SetTerminalColor( file, COLOR_DEFAULT ) )
96 return -1;
97
98 return rv;
99}
100
107LibraryDefined PrintfLike( 3, 4 ) inline int PrintInColor( FILE *file,
108 const char *Color,
109 const char *format,
110 ... )
111{
112 va_list va;
113 va_start( va, format );
114 const int rv = VPrintInColor( file, Color, format, va );
115 va_end( va );
116 return rv;
117}
118
119
120#endif //CLIBS_TERMINAL_COLORS_H
Function and variable attributes.
#define LibraryDefined
Definition attributes.h:107
#define PrintfLike(FORMAT_STRING, FIRST_VAR_ARG)
Tells the compiler which varargs correspond to a format string.
Definition attributes.h:39
LibraryDefined int VPrintInColor(FILE *file, const char *Color, const char *format, va_list vaList)
Definition terminal_colors.h:85
#define COLOR_DEFAULT
Definition terminal_colors.h:33
LibraryDefined PrintfLike int PrintInColor(FILE *file, const char *Color, const char *format,...)
Definition terminal_colors.h:107
LibraryDefined bool SetTerminalColor(FILE *stream, const char *Color)
Definition terminal_colors.h:79