← Back to davo.co
summaryrefslogtreecommitdiffstats
path: root/esc.h
blob: d355c906ddb84edaea01e14229f4b7ca476d9550 (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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#ifndef ESCAPE_H
#define ESCAPE_H 1

#include <stdio.h>

#define ESC_CSI     "\e["
#define ESC_SS2     "\eN"
#define ESC_SS3     "\eO"
#define ESC_SCI     "\eZ"
#define ESC_ROI     "\e%"

#define ESC_SAVE    ESC_CSI "s"
#define ESC_RESTORE ESC_CSI "u"
#define ESC_HOME    ESC_CSI "H"
#define ESC_CLRSCR  ESC_CSI "1J"
#define ESC_CLEAR   ESC_CSI "2K"
#define ESC_UP      ESC_CSI "A"
#define ESC_DOWN    ESC_CSI "B"
#define ESC_FRWD    ESC_CSI "C"
#define ESC_BKWD    ESC_CSI "D"
#define ESC_END     ESC_CSI "F"
#define ESC_INSERT  ESC_CSI "2~"
#define ESC_DELETE  ESC_CSI "3~"
#define ESC_PGUP    ESC_CSI "5~"
#define ESC_PGDOWN  ESC_CSI "6~"

// F1 to F4 are special
#define ESC_F1      ESC_SS3 "P"
#define ESC_F2      ESC_SS3 "Q"
#define ESC_F3      ESC_SS3 "R"
#define ESC_F4      ESC_SS3 "S"
#define ESC_S_F1    ESC_CSI "1;2P"
#define ESC_S_F2    ESC_CSI "1;2Q"
#define ESC_S_F3    ESC_CSI "1;2R"
#define ESC_S_F4    ESC_CSI "1;2S"
#define ESC_C_F1    ESC_CSI "1;5P"
#define ESC_C_F2    ESC_CSI "1;5Q"
#define ESC_C_F3    ESC_CSI "1;5R"
#define ESC_C_F4    ESC_CSI "1;5S"

#define ESC_F5      ESC_CSI "15~"
#define ESC_F6      ESC_CSI "17~"
#define ESC_F7      ESC_CSI "18~"
#define ESC_F8      ESC_CSI "19~"
#define ESC_F9      ESC_CSI "20~"
#define ESC_F10     ESC_CSI "21~"
#define ESC_F11     ESC_CSI "23~"
#define ESC_F12     ESC_CSI "24~"

#define ESC_S_F5    ESC_CSI "15;2~"
#define ESC_S_F6    ESC_CSI "17;2~"
#define ESC_S_F7    ESC_CSI "18;2~"
#define ESC_S_F8    ESC_CSI "19;2~"
#define ESC_S_F9    ESC_CSI "20;2~"
#define ESC_S_F10   ESC_CSI "21;2~"
#define ESC_S_F11   ESC_CSI "23;2~"
#define ESC_S_F12   ESC_CSI "24;2~"

#define ESC_C_F5    ESC_CSI "15;5~"
#define ESC_C_F6    ESC_CSI "17;5~"
#define ESC_C_F7    ESC_CSI "18;5~"
#define ESC_C_F8    ESC_CSI "19;5~"
#define ESC_C_F9    ESC_CSI "20;5~"
#define ESC_C_F10   ESC_CSI "21;5~"
#define ESC_C_F11   ESC_CSI "23;5~"
#define ESC_C_F12   ESC_CSI "24;5~"

#define ESC_HIDE    ESC_CSI "?25l"
#define ESC_SHOW    ESC_CSI "?25h"

#define ESC_NORMAL  ESC_CSI "0m"
#define ESC_BOLD    ESC_CSI "1m"
#define ESC_UNDERL  ESC_CSI "4m"
#define ESC_BLINK   ESC_CSI "5m"
#define ESC_INVERS  ESC_CSI "7m"
#define ESC_FRAMED  ESC_CSI "51m"
#define ESC_CIRCLED ESC_CSI "52m"
#define ESC_OVERL   ESC_CSI "53m"

#define ESC_TBLACK  ESC_CSI "30m"
#define ESC_TRED    ESC_CSI "38;2;255;0;0m"
#define ESC_TGREEN  ESC_CSI "38;2;0;255;0m"
#define ESC_TYELLOW ESC_CSI "38;2;255;255;0m"
#define ESC_TBLUE   ESC_CSI "38;2;0;0;255m"
#define ESC_TMAGENTA ESC_CSI "38;2;255;0;255m"
#define ESC_TCYAN   ESC_CSI "38;2;0;255;255m"
#define ESC_TWHITE  ESC_CSI "37m"

#define ESC_BBLACK  ESC_CSI "40m"
#define ESC_BRED    ESC_CSI "48;2;255;0;0m"
#define ESC_BGREEN  ESC_CSI "48;2;0;255;0m"
#define ESC_BYELLOW ESC_CSI "48;2;255;255;0m"
#define ESC_BBLUE   ESC_CSI "48;2;0;0;255m"
#define ESC_BMAGENTA ESC_CSI "48;2;255;0;255m"
#define ESC_BCYAN   ESC_CSI "48;2;0;255;255m"
#define ESC_BWHITE  ESC_CSI "47m"

#define ESC_BLIGHTGREY ESC_CSI "48;2;220;220;220m"
#define ESC_BGREY      ESC_CSI "48;2;128;128;128m"


enum { esc_top = 1, esc_bottom = 2, esc_left = 4, esc_right = 8, };

#define ESC_BORDER                                      \
((char const*const[]){                                  \
[0] = " ",                                              \
  [esc_top] = "━",                                      \
  [esc_bottom] = "━",                                   \
  [esc_bottom | esc_top] = "━",                         \
  [esc_left] = "┃",                                     \
  [esc_left | esc_top] = "┏",                           \
  [esc_left | esc_bottom] = "┗",                        \
  [esc_left | esc_bottom | esc_top] = "┣",              \
  [esc_right] = "┃",                                    \
  [esc_right | esc_top] = "┓",                          \
  [esc_right | esc_bottom] = "┛",                       \
  [esc_right | esc_bottom | esc_top] = "┫",             \
  [esc_right | esc_left] = "┃",                         \
  [esc_right | esc_left | esc_top] = "┳",               \
  [esc_right | esc_left | esc_bottom] = "┻",            \
  [esc_right | esc_left | esc_bottom | esc_top] = "╋",  \
  })

enum { esc_nw = 1, esc_ne = 2, esc_sw = 4, esc_se = 8, };

#define ESC_BLOCK                               \
((char const*const[]){                          \
[0] = " ",                                      \
  [esc_nw] = "▘",                               \
  [esc_ne] = "▝",                               \
  [esc_ne | esc_nw] = "▀",                      \
  [esc_sw] = "▖",                               \
  [esc_sw | esc_nw] = "▌",                      \
  [esc_sw | esc_ne] = "▞",                      \
  [esc_sw | esc_ne | esc_nw] = "▛",             \
  [esc_se] = "▗",                               \
  [esc_se | esc_nw] = "▚",                      \
  [esc_se | esc_ne] = "▐",                      \
  [esc_se | esc_ne | esc_nw] = "▜",             \
  [esc_se | esc_sw] = "▄",                      \
  [esc_se | esc_sw | esc_nw] = "▙",             \
  [esc_se | esc_sw | esc_ne] = "▟",             \
  [esc_se | esc_sw | esc_ne | esc_nw] = "█",    \
  })

/**
 ** @brief relative cursor movement
 **/
void esc_move(FILE* f, int vert, int hori);

/**
 ** @brief asolute cursor movement
 **/
void esc_goto(FILE* f, unsigned vert, unsigned hori);

#endif