summaryrefslogtreecommitdiffstats
path: root/include/escape.h
blob: 13bd9969147e1c633192ec71139d88d2104c2986 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
// escape.h - ESC escape code macros and functions

#ifndef ESCAPE_H
#define ESCAPE_H


#include <stdint.h>


#ifdef __cplusplus
extern "C" {
#endif


#define CSI	"\x1B["


#define ESC_CURSOR_UP( n )  CSI #n "A"
void esc_cursor_up( uint32_t n );

#define ESC_CURSOR_DOWN( n ) CSI #n "B"
void esc_cursor_down( uint32_t n );

#define ESC_CURSOR_LEFT( n )  CSI #n "C"
void esc_cursor_left( uint32_t n );

#define ESC_CURSOR_RIGHT( n )  CSI #n "D"
void esc_cursor_right( uint32_t n );

#define ESC_CURSOR_LINE_NEXT( n ) CSI #n "E"
void esc_cursor_line_next( uint32_t n );

#define ESC_CURSOR_POSITION( x, y )  CSI #y ";" #x "H"
void esc_cursor_position( uint32_t x, uint32_t y );

#define ESC_CLEAR_SCREEN  CSI "2J"
void esc_clear_screen( void );

#define ESC_CLEAR_SCREEN_START CSI "1J"
void esc_clear_screen_start( void );

#define ESC_CLEAR_SCREEN_END CSI "0J"
void esc_clear_screen_end( void );

#define ESC_CLEAR_LINE CSI "2K"
void esc_clear_line( void );

#define ESC_CLEAR_LINE_START CSI "1L"
void esc_clear_line_start( void );

#define ESC_CLEAR_LINE_END  CSI "0L"
void esc_clear_line_end( void );

#define ESC_SCROLL_UP( n ) CSI #n "S"
void esc_scroll_up( uint32_t n );

#define ESC_SCROLL_DOWN( n ) CSI #n "T"
void esc_scroll_down( uint32_t n );

#define ESC_SGR  "m"

#define ESC_RESET          CSI "0" ESC_SGR
#define ESC_BOLD	       CSI "1" ESC_SGR
#define ESC_UNDERLINE      CSI "4" ESC_SGR
#define ESC_BLINK          CSI "5" ESC_SGR
#define ESC_REVERSE        CSI "7" ESC_SGR
#define ESC_CONCEAL        CSI "8" ESC_SGR
#define ESC_REVEAL         CSI "28" ESC_SGR
#define ESC_STRIKETHROUGH  CSI "9" ESC_SGR
#define ESC_OVERLINE       CSI "53" ESC_SGR

#define ESC_COLOR_FG_RGB( r, g, b )  CSI "38;2;" #r ";" #g ";" #b ESC_SGR
void esc_color_fg_rgb( uint32_t r, uint32_t g, uint32_t b );

#define ESC_COLOR_BG_RGB( r, g, b )  CSI "48;2;" #r ";" #g ";" #b ESC_SGR
void esc_color_bg_rgb( uint32_t r, uint32_t g, uint32_t b );

#define ESC_COLOR_FG_256( n )  CSI "38;5;" #n ESC_SGR
void esc_color_fg_256( uint32_t r, uint32_t g, uint32_t b );

#define ESC_COLOR_BG_256( n )  CSI "48;5;" #n ESC_SGR
void esc_color_bg_256( uint32_t r, uint32_t g, uint32_t b );

#define ESC_COLOR_FG( n )         CSI "3" #n ESC_SGR
#define ESC_COLOR_BG( n )         CSI "4" #n ESC_SGR
#define ESC_COLOR_FG_BRIGHT( n )  CSI "9" #n ESC_SGR
#define ESC_COLOR_BG_BRIGHT( n )  CSI "10" #n ESC_SGR


#ifdef __cplusplus
}
#endif

#endif // ESCAPE_H


#ifdef ESCAPE_IMPLEMENTATION

#include <stdio.h>

void esc_cursor_up( uint32_t n ) { fprintf( stdout, CSI "%dA", n ); }
void esc_cursor_down( uint32_t n ) { fprintf( stdout, CSI "%dB", n ); }
void esc_cursor_left( uint32_t n ) { fprintf( stdout, CSI "%dC", n ); }
void esc_cursor_right( uint32_t n ) { fprintf( stdout, CSI "%dD", n ); }
void esc_cursor_line_next( uint32_t n ) { fprintf( stdout, CSI "%dE", n ); }
void esc_cursor_position( uint32_t x, uint32_t y ) { fprintf( stdout, CSI "%d;%dH", y, x ); }
void esc_clear_screen( void ) { fputs( CSI "2J", stdout ); }
void esc_clear_screen_start( void ) { fputs( CSI "1J", stdout ); }
void esc_clear_screen_end( void ) { fputs( CSI "0J", stdout ); }
void esc_clear_line( void ) { fputs( CSI "2L", stdout ); }
void esc_clear_line_start( void ) { fputs( CSI "1L", stdout ); }
void esc_clear_line_end( void ) { fputs( CSI "0L", stdout ); }
void esc_scroll_up( uint32_t n ) { fprintf( stdout, "%dS", n ); }
void esc_scroll_down( uint32_t n ) { fprintf( stdout, "%dT", n ); }

void esc_color_fg_rgb( uint32_t r, uint32_t g, uint32_t b ) { fprintf( stdout, CSI "38;2;%d;%d;%d" ESC_SGR, r, g, b ); }
void esc_color_bg_rgb( uint32_t r, uint32_t g, uint32_t b ) { fprintf( stdout, CSI "48;2;%d;%d;%d" ESC_SGR, r, g, b ); }
void esc_color_fg_256( uint32_t r, uint32_t g, uint32_t b ) { fprintf( stdout, CSI "38;5;%d;%d;%d" ESC_SGR, r, g, b ); }
void esc_color_bg_256( uint32_t r, uint32_t g, uint32_t b ) { fprintf( stdout, CSI "48;5;%d;%d;%d" ESC_SGR, r, g, b ); }

#endif // ESCAPE_IMPLEMENTATION