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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
|
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
/*** 1. Controlling the screen. */
/* The screen is a 2D array of cells. */
struct tb_cell {
uint32_t ch; /* unicode character */
uint16_t fg; /* foreground color (0-255) and attributes */
uint16_t bg; /* background color (0-255) and attributes */
};
/* Names for some colors in tb_cell.fg and tb_cell.bg. */
#define TB_BLACK 232
#define TB_WHITE 255
/* Colors in tb_cell can be combined using bitwise-OR with multiple
* of the following attributes. */
#define TB_BOLD 0x0100
#define TB_UNDERLINE 0x0200
#define TB_REVERSE 0x0400
/* Initialize screen and keyboard. */
int tb_init(void);
/* Possible error codes returned by tb_init() */
#define TB_EUNSUPPORTED_TERMINAL -1
#define TB_EFAILED_TO_OPEN_TTY -2
/* Termbox uses unix pipes in order to deliver a message from a signal handler
* (SIGWINCH) to the main event reading loop. */
#define TB_EPIPE_TRAP_ERROR -3
/* Restore terminal mode. */
void tb_shutdown(void);
int tb_is_active(void);
/* Size of the screen. Return negative values before tb_init() or after
* tb_shutdown() */
int tb_width(void);
int tb_height(void);
/* Update the screen with internal state. Most methods below modify just the
* internal state of the screen. Changes won't be visible until you call
* tb_present(). */
void tb_present(void);
/* Returns a pointer to the internal screen state: a 1D array of cells in
* raster order. You'll need to call tb_width() and tb_height() for the
* array's dimensions. The array stays valid until tb_clear() or tb_present()
* are called. */
struct tb_cell *tb_cell_buffer();
/* Clear the internal screen state using either TB_DEFAULT or the
* color/attributes set by tb_set_clear_attributes(). */
void tb_clear(void);
void tb_set_clear_attributes(uint16_t fg, uint16_t bg);
/* Move the cursor. Upper-left character is (0, 0).
*/
void tb_set_cursor(int cx, int cy);
/* To hide the cursor, call tb_set_cursor(TB_HIDE_CURSOR, TB_HIDE_CURSOR).
* Cursor starts out hidden. */
#define TB_HIDE_CURSOR -1
/* Modify a specific cell of the screen. Don't forget to call tb_present() to
* commit your changes. */
void tb_change_cell(int x, int y, uint32_t ch, uint16_t fg, uint16_t bg);
/*** 2. Controlling keyboard events. */
struct tb_event {
uint8_t type;
/* fields for type TB_EVENT_KEY. At most one of 'key' and 'ch' will be set at
* any time. */
uint16_t key;
uint32_t ch;
/* fields for type TB_EVENT_RESIZE */
int32_t w;
int32_t h;
/* fields for type TB_EVENT_MOUSE */
int32_t x;
int32_t y;
};
/* Possible values for tb_event.type. */
#define TB_EVENT_KEY 1
#define TB_EVENT_RESIZE 2
#define TB_EVENT_MOUSE 3
/* Possible values for tb_event.key.
*
* These are a safe subset of terminfo keys, which exist on all popular
* terminals. Termbox uses only them to stay truly portable.
*/
#define TB_KEY_F1 (0xFFFF-0)
#define TB_KEY_F2 (0xFFFF-1)
#define TB_KEY_F3 (0xFFFF-2)
#define TB_KEY_F4 (0xFFFF-3)
#define TB_KEY_F5 (0xFFFF-4)
#define TB_KEY_F6 (0xFFFF-5)
#define TB_KEY_F7 (0xFFFF-6)
#define TB_KEY_F8 (0xFFFF-7)
#define TB_KEY_F9 (0xFFFF-8)
#define TB_KEY_F10 (0xFFFF-9)
#define TB_KEY_F11 (0xFFFF-10)
#define TB_KEY_F12 (0xFFFF-11)
#define TB_KEY_INSERT (0xFFFF-12)
#define TB_KEY_DELETE (0xFFFF-13)
#define TB_KEY_HOME (0xFFFF-14)
#define TB_KEY_END (0xFFFF-15)
#define TB_KEY_PGUP (0xFFFF-16)
#define TB_KEY_PGDN (0xFFFF-17)
#define TB_KEY_ARROW_UP (0xFFFF-18)
#define TB_KEY_ARROW_DOWN (0xFFFF-19)
#define TB_KEY_ARROW_LEFT (0xFFFF-20)
#define TB_KEY_ARROW_RIGHT (0xFFFF-21)
#define TB_KEY_MOUSE_LEFT (0xFFFF-22)
#define TB_KEY_MOUSE_RIGHT (0xFFFF-23)
#define TB_KEY_MOUSE_MIDDLE (0xFFFF-24)
#define TB_KEY_MOUSE_RELEASE (0xFFFF-25)
#define TB_KEY_MOUSE_WHEEL_UP (0xFFFF-26)
#define TB_KEY_MOUSE_WHEEL_DOWN (0xFFFF-27)
/* These are all ASCII code points below SPACE character and a BACKSPACE key. */
#define TB_KEY_CTRL_TILDE 0x00
#define TB_KEY_CTRL_2 0x00 /* clash with 'CTRL_TILDE' */
#define TB_KEY_CTRL_A 0x01
#define TB_KEY_CTRL_B 0x02
#define TB_KEY_CTRL_C 0x03
#define TB_KEY_CTRL_D 0x04
#define TB_KEY_CTRL_E 0x05
#define TB_KEY_CTRL_F 0x06
#define TB_KEY_CTRL_G 0x07
#define TB_KEY_BACKSPACE 0x08
#define TB_KEY_CTRL_H 0x08 /* clash with 'CTRL_BACKSPACE' */
#define TB_KEY_TAB 0x09
#define TB_KEY_CTRL_I 0x09 /* clash with 'TAB' */
#define TB_KEY_CTRL_J 0x0A
#define TB_KEY_CTRL_K 0x0B
#define TB_KEY_CTRL_L 0x0C
#define TB_KEY_ENTER 0x0D
#define TB_KEY_CTRL_M 0x0D /* clash with 'ENTER' */
#define TB_KEY_CTRL_N 0x0E
#define TB_KEY_CTRL_O 0x0F
#define TB_KEY_CTRL_P 0x10
#define TB_KEY_CTRL_Q 0x11
#define TB_KEY_CTRL_R 0x12
#define TB_KEY_CTRL_S 0x13
#define TB_KEY_CTRL_T 0x14
#define TB_KEY_CTRL_U 0x15
#define TB_KEY_CTRL_V 0x16
#define TB_KEY_CTRL_W 0x17
#define TB_KEY_CTRL_X 0x18
#define TB_KEY_CTRL_Y 0x19
#define TB_KEY_CTRL_Z 0x1A
#define TB_KEY_ESC 0x1B
#define TB_KEY_CTRL_LSQ_BRACKET 0x1B /* clash with 'ESC' */
#define TB_KEY_CTRL_3 0x1B /* clash with 'ESC' */
#define TB_KEY_CTRL_4 0x1C
#define TB_KEY_CTRL_BACKSLASH 0x1C /* clash with 'CTRL_4' */
#define TB_KEY_CTRL_5 0x1D
#define TB_KEY_CTRL_RSQ_BRACKET 0x1D /* clash with 'CTRL_5' */
#define TB_KEY_CTRL_6 0x1E
#define TB_KEY_CTRL_7 0x1F
#define TB_KEY_CTRL_SLASH 0x1F /* clash with 'CTRL_7' */
#define TB_KEY_CTRL_UNDERSCORE 0x1F /* clash with 'CTRL_7' */
#define TB_KEY_SPACE 0x20
#define TB_KEY_BACKSPACE2 0x7F
#define TB_KEY_CTRL_8 0x7F /* clash with 'DELETE' */
/* These are non-existing ones.
*
* #define TB_KEY_CTRL_1 clash with '1'
* #define TB_KEY_CTRL_9 clash with '9'
* #define TB_KEY_CTRL_0 clash with '0'
*/
/* Some aliases */
#define TB_KEY_NEWLINE TB_KEY_CTRL_J
#define TB_KEY_CARRIAGE_RETURN TB_KEY_CTRL_M
/* Wait for an event up to 'timeout' milliseconds and fill the 'event'
* structure with it, when the event is available. Returns the type of the
* event (one of TB_EVENT_* constants) or -1 if there was an error or 0 in case
* there were no event during 'timeout' period.
*/
int tb_peek_event(struct tb_event *event, int timeout);
/* Wait for an event forever and fill the 'event' structure with it, when the
* event is available. Returns the type of the event (one of TB_EVENT_*
* constants) or -1 if there was an error.
*/
int tb_poll_event(struct tb_event *event);
int tb_event_ready(void);
/*** 3. Utility utf8 functions. */
#define TB_EOF -1
int tb_utf8_char_length(char c);
int tb_utf8_char_to_unicode(uint32_t *out, const char *c);
int tb_utf8_unicode_to_char(char *out, uint32_t c);
const char* to_unicode(uint32_t c);
#ifdef __cplusplus
}
#endif
|