rb_termbox 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +2 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +11 -13
- data/README.md +14 -0
- data/ext/termbox/bytebuffer.inl +78 -0
- data/ext/termbox/extconf.rb +3 -0
- data/ext/termbox/input.inl +96 -0
- data/ext/termbox/term.inl +291 -0
- data/ext/termbox/termbox.c +536 -0
- data/ext/termbox/termbox.h +226 -0
- data/ext/termbox/utf8.c +79 -0
- data/lib/termbox.rb +1 -1
- data/lib/termbox/colors.rb +9 -8
- data/lib/termbox/keys.rb +2 -1
- data/lib/termbox/version.rb +1 -1
- data/rb_termbox.gemspec +6 -7
- data/sample/all_colors.rb +37 -0
- data/sample/keyboard.rb +15 -15
- metadata +65 -73
- data/README +0 -10
@@ -0,0 +1,226 @@
|
|
1
|
+
#pragma once
|
2
|
+
|
3
|
+
#include <stdbool.h>
|
4
|
+
#include <stdint.h>
|
5
|
+
|
6
|
+
// for shared objects
|
7
|
+
#if __GNUC__ >= 4
|
8
|
+
#define SO_IMPORT __attribute__((visibility("default")))
|
9
|
+
#else
|
10
|
+
#define SO_IMPORT
|
11
|
+
#endif
|
12
|
+
|
13
|
+
#ifdef __cplusplus
|
14
|
+
extern "C" {
|
15
|
+
#endif
|
16
|
+
|
17
|
+
// Key constants. See also struct tb_event's key field.
|
18
|
+
|
19
|
+
// These are a safe subset of terminfo keys, which exist on all popular
|
20
|
+
// terminals. Termbox uses only them to stay truly portable.
|
21
|
+
#define TB_KEY_F1 (0xFFFF-0)
|
22
|
+
#define TB_KEY_F2 (0xFFFF-1)
|
23
|
+
#define TB_KEY_F3 (0xFFFF-2)
|
24
|
+
#define TB_KEY_F4 (0xFFFF-3)
|
25
|
+
#define TB_KEY_F5 (0xFFFF-4)
|
26
|
+
#define TB_KEY_F6 (0xFFFF-5)
|
27
|
+
#define TB_KEY_F7 (0xFFFF-6)
|
28
|
+
#define TB_KEY_F8 (0xFFFF-7)
|
29
|
+
#define TB_KEY_F9 (0xFFFF-8)
|
30
|
+
#define TB_KEY_F10 (0xFFFF-9)
|
31
|
+
#define TB_KEY_F11 (0xFFFF-10)
|
32
|
+
#define TB_KEY_F12 (0xFFFF-11)
|
33
|
+
#define TB_KEY_INSERT (0xFFFF-12)
|
34
|
+
#define TB_KEY_DELETE (0xFFFF-13)
|
35
|
+
#define TB_KEY_HOME (0xFFFF-14)
|
36
|
+
#define TB_KEY_END (0xFFFF-15)
|
37
|
+
#define TB_KEY_PGUP (0xFFFF-16)
|
38
|
+
#define TB_KEY_PGDN (0xFFFF-17)
|
39
|
+
#define TB_KEY_ARROW_UP (0xFFFF-18)
|
40
|
+
#define TB_KEY_ARROW_DOWN (0xFFFF-19)
|
41
|
+
#define TB_KEY_ARROW_LEFT (0xFFFF-20)
|
42
|
+
#define TB_KEY_ARROW_RIGHT (0xFFFF-21)
|
43
|
+
|
44
|
+
// These are all ASCII code points below SPACE character and a BACKSPACE key.
|
45
|
+
#define TB_KEY_CTRL_TILDE 0x00
|
46
|
+
#define TB_KEY_CTRL_2 0x00 // clash with 'CTRL_TILDE'
|
47
|
+
#define TB_KEY_CTRL_A 0x01
|
48
|
+
#define TB_KEY_CTRL_B 0x02
|
49
|
+
#define TB_KEY_CTRL_C 0x03
|
50
|
+
#define TB_KEY_CTRL_D 0x04
|
51
|
+
#define TB_KEY_CTRL_E 0x05
|
52
|
+
#define TB_KEY_CTRL_F 0x06
|
53
|
+
#define TB_KEY_CTRL_G 0x07
|
54
|
+
#define TB_KEY_BACKSPACE 0x08
|
55
|
+
#define TB_KEY_CTRL_H 0x08 // clash with 'CTRL_BACKSPACE'
|
56
|
+
#define TB_KEY_TAB 0x09
|
57
|
+
#define TB_KEY_CTRL_I 0x09 // clash with 'TAB'
|
58
|
+
#define TB_KEY_CTRL_J 0x0A
|
59
|
+
#define TB_KEY_CTRL_K 0x0B
|
60
|
+
#define TB_KEY_CTRL_L 0x0C
|
61
|
+
#define TB_KEY_ENTER 0x0D
|
62
|
+
#define TB_KEY_CTRL_M 0x0D // clash with 'ENTER'
|
63
|
+
#define TB_KEY_CTRL_N 0x0E
|
64
|
+
#define TB_KEY_CTRL_O 0x0F
|
65
|
+
#define TB_KEY_CTRL_P 0x10
|
66
|
+
#define TB_KEY_CTRL_Q 0x11
|
67
|
+
#define TB_KEY_CTRL_R 0x12
|
68
|
+
#define TB_KEY_CTRL_S 0x13
|
69
|
+
#define TB_KEY_CTRL_T 0x14
|
70
|
+
#define TB_KEY_CTRL_U 0x15
|
71
|
+
#define TB_KEY_CTRL_V 0x16
|
72
|
+
#define TB_KEY_CTRL_W 0x17
|
73
|
+
#define TB_KEY_CTRL_X 0x18
|
74
|
+
#define TB_KEY_CTRL_Y 0x19
|
75
|
+
#define TB_KEY_CTRL_Z 0x1A
|
76
|
+
#define TB_KEY_ESC 0x1B
|
77
|
+
#define TB_KEY_CTRL_LSQ_BRACKET 0x1B // clash with 'ESC'
|
78
|
+
#define TB_KEY_CTRL_3 0x1B // clash with 'ESC'
|
79
|
+
#define TB_KEY_CTRL_4 0x1C
|
80
|
+
#define TB_KEY_CTRL_BACKSLASH 0x1C // clash with 'CTRL_4'
|
81
|
+
#define TB_KEY_CTRL_5 0x1D
|
82
|
+
#define TB_KEY_CTRL_RSQ_BRACKET 0x1D // clash with 'CTRL_5'
|
83
|
+
#define TB_KEY_CTRL_6 0x1E
|
84
|
+
#define TB_KEY_CTRL_7 0x1F
|
85
|
+
#define TB_KEY_CTRL_SLASH 0x1F // clash with 'CTRL_7'
|
86
|
+
#define TB_KEY_CTRL_UNDERSCORE 0x1F // clash with 'CTRL_7'
|
87
|
+
#define TB_KEY_SPACE 0x20
|
88
|
+
#define TB_KEY_BACKSPACE2 0x7F
|
89
|
+
#define TB_KEY_CTRL_8 0x7F // clash with 'DELETE'
|
90
|
+
|
91
|
+
// These are non-existing ones.
|
92
|
+
//
|
93
|
+
// #define TB_KEY_CTRL_1 clash with '1'
|
94
|
+
// #define TB_KEY_CTRL_9 clash with '9'
|
95
|
+
// #define TB_KEY_CTRL_0 clash with '0'
|
96
|
+
|
97
|
+
// Currently there is only one modificator. See also struct tb_event's mod
|
98
|
+
// field.
|
99
|
+
#define TB_MOD_ALT 0x01
|
100
|
+
|
101
|
+
// Colors (see struct tb_cell's fg and bg fields).
|
102
|
+
#define TB_DEFAULT 0x00
|
103
|
+
#define TB_BLACK 0x01
|
104
|
+
#define TB_RED 0x02
|
105
|
+
#define TB_GREEN 0x03
|
106
|
+
#define TB_YELLOW 0x04
|
107
|
+
#define TB_BLUE 0x05
|
108
|
+
#define TB_MAGENTA 0x06
|
109
|
+
#define TB_CYAN 0x07
|
110
|
+
#define TB_WHITE 0x08
|
111
|
+
|
112
|
+
// Attributes, it is possible to use multiple attributes by combining them
|
113
|
+
// using bitwise OR ('|'). Although, colors cannot be combined. But you can
|
114
|
+
// combine attributes and a single color. See also struct tb_cell's fg and bg
|
115
|
+
// fields.
|
116
|
+
#define TB_BOLD 0x10
|
117
|
+
#define TB_UNDERLINE 0x20
|
118
|
+
#define TB_REVERSE 0x40
|
119
|
+
|
120
|
+
// A cell, single conceptual entity on the terminal screen. The terminal screen
|
121
|
+
// is basically a 2d array of cells. It has the following fields:
|
122
|
+
// - 'ch' is a unicode character
|
123
|
+
// - 'fg' foreground color and attributes
|
124
|
+
// - 'bg' background color and attributes
|
125
|
+
struct tb_cell {
|
126
|
+
uint32_t ch;
|
127
|
+
uint16_t fg;
|
128
|
+
uint16_t bg;
|
129
|
+
};
|
130
|
+
|
131
|
+
#define TB_EVENT_KEY 1
|
132
|
+
#define TB_EVENT_RESIZE 2
|
133
|
+
|
134
|
+
// This struct represents a termbox event. The 'mod', 'key' and 'ch' fields are
|
135
|
+
// valid if 'type' is TB_EVENT_KEY. The 'w' and 'h' fields are valid if 'type'
|
136
|
+
// is TB_EVENT_RESIZE. See also
|
137
|
+
struct tb_event {
|
138
|
+
uint8_t type;
|
139
|
+
uint8_t mod;
|
140
|
+
uint16_t key;
|
141
|
+
uint32_t ch;
|
142
|
+
int32_t w;
|
143
|
+
int32_t h;
|
144
|
+
};
|
145
|
+
|
146
|
+
// Error codes returned by tb_init(). All of them are self-explanatory, except
|
147
|
+
// the pipe trap error. Termbox uses unix pipes in order to deliever a message
|
148
|
+
// from a signal handler (SIGWINCH) to the main event reading loop. Honestly in
|
149
|
+
// most cases you should just check the returned code as < 0.
|
150
|
+
#define TB_EUNSUPPORTED_TERMINAL -1
|
151
|
+
#define TB_EFAILED_TO_OPEN_TTY -2
|
152
|
+
#define TB_EPIPE_TRAP_ERROR -3
|
153
|
+
|
154
|
+
// Initializes the termbox library. This function should be called before any
|
155
|
+
// other functions. After successful initialization, the library must be
|
156
|
+
// finalized using the tb_shutdown() function.
|
157
|
+
SO_IMPORT int tb_init(void);
|
158
|
+
SO_IMPORT void tb_shutdown(void);
|
159
|
+
|
160
|
+
// Returns the size of the internal back buffer (which is the same as
|
161
|
+
// terminal's window size in characters). The internal buffer can be resized
|
162
|
+
// after tb_clear() or tb_present() function calls.
|
163
|
+
SO_IMPORT int tb_width(void);
|
164
|
+
SO_IMPORT int tb_height(void);
|
165
|
+
|
166
|
+
// Clears the internal back buffer using TB_DEFAULT color or the
|
167
|
+
// color/attributes set by tb_set_clear_attributes() function.
|
168
|
+
SO_IMPORT void tb_clear(void);
|
169
|
+
SO_IMPORT void tb_set_clear_attributes(uint16_t fg, uint16_t bg);
|
170
|
+
|
171
|
+
// Syncronizes the internal back buffer with the terminal.
|
172
|
+
SO_IMPORT void tb_present(void);
|
173
|
+
|
174
|
+
#define TB_HIDE_CURSOR -1
|
175
|
+
|
176
|
+
// Sets the position of the cursor. Upper-left character is (0, 0). If you pass
|
177
|
+
// TB_HIDE_CURSOR as both coordinates, then the cursor will be hidden. Cursor
|
178
|
+
// is hidden by default.
|
179
|
+
SO_IMPORT void tb_set_cursor(int cx, int cy);
|
180
|
+
|
181
|
+
// Changes cell's parameters in the internal back buffer at the specified
|
182
|
+
// position.
|
183
|
+
SO_IMPORT void tb_put_cell(int x, int y, const struct tb_cell *cell);
|
184
|
+
SO_IMPORT void tb_change_cell(int x, int y, uint32_t ch, uint16_t fg, uint16_t bg);
|
185
|
+
|
186
|
+
// Copies the buffer from 'cells' at the specified position, assuming the
|
187
|
+
// buffer is a two-dimensional array of size ('w' x 'h'), represented as a
|
188
|
+
// one-dimensional buffer containing lines of cells starting from the top.
|
189
|
+
SO_IMPORT void tb_blit(int x, int y, int w, int h, const struct tb_cell *cells);
|
190
|
+
|
191
|
+
#define TB_INPUT_CURRENT 0
|
192
|
+
#define TB_INPUT_ESC 1
|
193
|
+
#define TB_INPUT_ALT 2
|
194
|
+
|
195
|
+
// Sets the termbox input mode. Termbox has two input modes:
|
196
|
+
// 1. Esc input mode.
|
197
|
+
// When ESC sequence is in the buffer and it doesn't match any known
|
198
|
+
// ESC sequence => ESC means TB_KEY_ESC.
|
199
|
+
// 2. Alt input mode.
|
200
|
+
// When ESC sequence is in the buffer and it doesn't match any known
|
201
|
+
// sequence => ESC enables TB_MOD_ALT modifier for the next keyboard event.
|
202
|
+
//
|
203
|
+
// If 'mode' is TB_INPUT_CURRENT, it returns the current input mode.
|
204
|
+
SO_IMPORT int tb_select_input_mode(int mode);
|
205
|
+
|
206
|
+
|
207
|
+
// Wait for an event up to 'timeout' milliseconds and fill the 'event'
|
208
|
+
// structure with it, when the event is available. Returns the type of the
|
209
|
+
// event (one of TB_EVENT_* constants) or -1 if there was an error or 0 in case
|
210
|
+
// there were no event during 'timeout' period.
|
211
|
+
SO_IMPORT int tb_peek_event(struct tb_event *event, int timeout);
|
212
|
+
|
213
|
+
// Wait for an event forever and fill the 'event' structure with it, when the
|
214
|
+
// event is available. Returns the type of the event (one of TB_EVENT_*
|
215
|
+
// constants) or -1 if there was an error.
|
216
|
+
SO_IMPORT int tb_poll_event(struct tb_event *event);
|
217
|
+
|
218
|
+
// Utility utf8 functions.
|
219
|
+
#define TB_EOF -1
|
220
|
+
SO_IMPORT int tb_utf8_char_length(char c);
|
221
|
+
SO_IMPORT int tb_utf8_char_to_unicode(uint32_t *out, const char *c);
|
222
|
+
SO_IMPORT int tb_utf8_unicode_to_char(char *out, uint32_t c);
|
223
|
+
|
224
|
+
#ifdef __cplusplus
|
225
|
+
}
|
226
|
+
#endif
|
data/ext/termbox/utf8.c
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
#include "termbox.h"
|
2
|
+
|
3
|
+
static const unsigned char utf8_length[256] = {
|
4
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
5
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
6
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
7
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
8
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
9
|
+
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
10
|
+
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
|
11
|
+
3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,6,6,1,1
|
12
|
+
};
|
13
|
+
|
14
|
+
static const unsigned char utf8_mask[6] = {
|
15
|
+
0x7F,
|
16
|
+
0x1F,
|
17
|
+
0x0F,
|
18
|
+
0x07,
|
19
|
+
0x03,
|
20
|
+
0x01
|
21
|
+
};
|
22
|
+
|
23
|
+
int tb_utf8_char_length(char c)
|
24
|
+
{
|
25
|
+
return utf8_length[(unsigned char)c];
|
26
|
+
}
|
27
|
+
|
28
|
+
int tb_utf8_char_to_unicode(uint32_t *out, const char *c)
|
29
|
+
{
|
30
|
+
if (*c == 0)
|
31
|
+
return TB_EOF;
|
32
|
+
|
33
|
+
int i;
|
34
|
+
unsigned char len = tb_utf8_char_length(*c);
|
35
|
+
unsigned char mask = utf8_mask[len-1];
|
36
|
+
uint32_t result = c[0] & mask;
|
37
|
+
for (i = 1; i < len; ++i) {
|
38
|
+
result <<= 6;
|
39
|
+
result |= c[i] & 0x3f;
|
40
|
+
}
|
41
|
+
|
42
|
+
*out = result;
|
43
|
+
return (int)len;
|
44
|
+
}
|
45
|
+
|
46
|
+
int tb_utf8_unicode_to_char(char *out, uint32_t c)
|
47
|
+
{
|
48
|
+
int len = 0;
|
49
|
+
int first;
|
50
|
+
int i;
|
51
|
+
|
52
|
+
if (c < 0x80) {
|
53
|
+
first = 0;
|
54
|
+
len = 1;
|
55
|
+
} else if (c < 0x800) {
|
56
|
+
first = 0xc0;
|
57
|
+
len = 2;
|
58
|
+
} else if (c < 0x10000) {
|
59
|
+
first = 0xe0;
|
60
|
+
len = 3;
|
61
|
+
} else if (c < 0x200000) {
|
62
|
+
first = 0xf0;
|
63
|
+
len = 4;
|
64
|
+
} else if (c < 0x4000000) {
|
65
|
+
first = 0xf8;
|
66
|
+
len = 5;
|
67
|
+
} else {
|
68
|
+
first = 0xfc;
|
69
|
+
len = 6;
|
70
|
+
}
|
71
|
+
|
72
|
+
for (i = len - 1; i > 0; --i) {
|
73
|
+
out[i] = (c & 0x3f) | 0x80;
|
74
|
+
c >>= 6;
|
75
|
+
}
|
76
|
+
out[0] = c | first;
|
77
|
+
|
78
|
+
return len;
|
79
|
+
}
|
data/lib/termbox.rb
CHANGED
data/lib/termbox/colors.rb
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
module Termbox
|
2
2
|
Colors = {
|
3
|
-
:
|
4
|
-
:
|
5
|
-
:
|
6
|
-
:
|
7
|
-
:
|
8
|
-
:
|
9
|
-
:
|
10
|
-
:
|
3
|
+
:default => 0x00,
|
4
|
+
:black => 0x01,
|
5
|
+
:red => 0x02,
|
6
|
+
:green => 0x03,
|
7
|
+
:yellow => 0x04,
|
8
|
+
:blue => 0x05,
|
9
|
+
:magenta => 0x06,
|
10
|
+
:cyan => 0x07,
|
11
|
+
:white => 0x08
|
11
12
|
}
|
12
13
|
end
|
data/lib/termbox/keys.rb
CHANGED
@@ -70,7 +70,7 @@ module Termbox
|
|
70
70
|
"[" => 0x1B,
|
71
71
|
"]" => 0x1D,
|
72
72
|
"_" => 0x1F, # same as few others
|
73
|
-
" " => 0x20
|
73
|
+
" " => 0x20 # same as few others
|
74
74
|
},
|
75
75
|
|
76
76
|
"BACKSPACE" => 0x08,
|
@@ -80,6 +80,7 @@ module Termbox
|
|
80
80
|
"RETURN" => 0x0D,
|
81
81
|
"ESC" => 0x1B,
|
82
82
|
"ESCAPE" => 0x1B,
|
83
|
+
"SPACE" => 0x20,
|
83
84
|
}
|
84
85
|
|
85
86
|
def lookup_key string
|
data/lib/termbox/version.rb
CHANGED
data/rb_termbox.gemspec
CHANGED
@@ -9,17 +9,16 @@ Gem::Specification.new do |s|
|
|
9
9
|
s.version = Termbox::VERSION
|
10
10
|
s.platform = Gem::Platform::RUBY
|
11
11
|
s.authors = ["James Cook"]
|
12
|
-
s.email = ["
|
13
|
-
s.summary = %q{Ruby binding to Termbox, a ncurses alternative.}
|
14
|
-
|
15
|
-
|
16
|
-
s.required_rubygems_version = ">= 1.3.6"
|
17
|
-
s.rubyforge_project = "rb_termbox"
|
12
|
+
s.email = ["jcook.rubyist@gmail.com"]
|
13
|
+
s.summary = s.description = %q{Ruby binding to Termbox, a ncurses alternative.}
|
14
|
+
s.homepage = "http://github.com/jamescook/rb_termbox"
|
15
|
+
s.license = "MIT"
|
18
16
|
|
19
17
|
s.add_dependency "ffi"
|
20
18
|
s.add_development_dependency "rspec"
|
21
19
|
|
22
20
|
s.files = `git ls-files`.split("\n")
|
23
21
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
24
|
-
s.require_paths = ["lib"]
|
22
|
+
s.require_paths = ["lib", "."]
|
23
|
+
s.extensions = %w[ext/termbox/extconf.rb]
|
25
24
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
load File.join(File.expand_path("."), "/lib/termbox.rb")
|
2
|
+
|
3
|
+
class AllColors
|
4
|
+
def self.run
|
5
|
+
Termbox.termbox_library_path File.expand_path("./libtermbox.so")
|
6
|
+
Termbox.initialize_library
|
7
|
+
start = Termbox.tb_init
|
8
|
+
if start
|
9
|
+
Termbox.tb_select_input_mode 1 # TB_INPUT_ESC
|
10
|
+
ev = Termbox::Event.new
|
11
|
+
Termbox.tb_clear
|
12
|
+
draw_colors
|
13
|
+
Termbox.tb_present
|
14
|
+
|
15
|
+
while Termbox.tb_poll_event(ev) >= 0 do
|
16
|
+
case ev[:type]
|
17
|
+
when 1 #TB_EVENT_KEY
|
18
|
+
if ev[:key] == 0x1B # ESC
|
19
|
+
Termbox.tb_shutdown
|
20
|
+
exit
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.draw_colors
|
28
|
+
(0..255).to_a.each do |i|
|
29
|
+
Termbox.tb_change_cell(i,0, 0x20, 0x00, i);
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
if __FILE__ == $0
|
35
|
+
AllColors.run
|
36
|
+
end
|
37
|
+
|
data/sample/keyboard.rb
CHANGED
@@ -6,7 +6,7 @@ class Keyboard
|
|
6
6
|
def self.run
|
7
7
|
|
8
8
|
# Tell termbox where your shared lib is
|
9
|
-
Termbox.termbox_library_path
|
9
|
+
Termbox.termbox_library_path "termbox"
|
10
10
|
|
11
11
|
# Call initialize_library once the above is set, this links us to the library C functions
|
12
12
|
Termbox.initialize_library
|
@@ -49,28 +49,28 @@ class Keyboard
|
|
49
49
|
end
|
50
50
|
|
51
51
|
def self.draw
|
52
|
-
Termbox.tb_change_cell(0, 0, 0x250C, Termbox::Colors[:white], Termbox::Colors[:
|
53
|
-
Termbox.tb_change_cell(79, 0, 0x2510, Termbox::Colors[:white], Termbox::Colors[:
|
54
|
-
Termbox.tb_change_cell(0, 23, 0x2514, Termbox::Colors[:white], Termbox::Colors[:
|
55
|
-
Termbox.tb_change_cell(79, 23, 0x2518, Termbox::Colors[:white], Termbox::Colors[:
|
52
|
+
Termbox.tb_change_cell(0, 0, 0x250C, Termbox::Colors[:white], Termbox::Colors[:default])
|
53
|
+
Termbox.tb_change_cell(79, 0, 0x2510, Termbox::Colors[:white], Termbox::Colors[:default])
|
54
|
+
Termbox.tb_change_cell(0, 23, 0x2514, Termbox::Colors[:white], Termbox::Colors[:default])
|
55
|
+
Termbox.tb_change_cell(79, 23, 0x2518, Termbox::Colors[:white], Termbox::Colors[:default])
|
56
56
|
|
57
57
|
|
58
58
|
1.upto(79) do |i|
|
59
|
-
Termbox.tb_change_cell(i, 0, 0x2500, Termbox::Colors[:white], Termbox::Colors[:
|
60
|
-
Termbox.tb_change_cell(i, 23, 0x2500, Termbox::Colors[:white], Termbox::Colors[:
|
61
|
-
Termbox.tb_change_cell(i, 17, 0x2500, Termbox::Colors[:white], Termbox::Colors[:
|
62
|
-
Termbox.tb_change_cell(i, 4, 0x2500, Termbox::Colors[:white], Termbox::Colors[:
|
59
|
+
Termbox.tb_change_cell(i, 0, 0x2500, Termbox::Colors[:white], Termbox::Colors[:default])
|
60
|
+
Termbox.tb_change_cell(i, 23, 0x2500, Termbox::Colors[:white], Termbox::Colors[:default])
|
61
|
+
Termbox.tb_change_cell(i, 17, 0x2500, Termbox::Colors[:white], Termbox::Colors[:default])
|
62
|
+
Termbox.tb_change_cell(i, 4, 0x2500, Termbox::Colors[:white], Termbox::Colors[:default])
|
63
63
|
end
|
64
64
|
|
65
65
|
1.upto(23) do |i|
|
66
|
-
Termbox.tb_change_cell(0, i, 0x2502, Termbox::Colors[:white], Termbox::Colors[:
|
67
|
-
Termbox.tb_change_cell(79, i, 0x2502, Termbox::Colors[:white], Termbox::Colors[:
|
66
|
+
Termbox.tb_change_cell(0, i, 0x2502, Termbox::Colors[:white], Termbox::Colors[:default])
|
67
|
+
Termbox.tb_change_cell(79, i, 0x2502, Termbox::Colors[:white], Termbox::Colors[:default])
|
68
68
|
end
|
69
69
|
|
70
|
-
Termbox.tb_change_cell(0, 17, 0x251C, Termbox::Colors[:white], Termbox::Colors[:
|
71
|
-
Termbox.tb_change_cell(79, 17, 0x2524, Termbox::Colors[:white], Termbox::Colors[:
|
72
|
-
Termbox.tb_change_cell(0, 4, 0x251C, Termbox::Colors[:white], Termbox::Colors[:
|
73
|
-
Termbox.tb_change_cell(79, 4, 0x2524, Termbox::Colors[:white], Termbox::Colors[:
|
70
|
+
Termbox.tb_change_cell(0, 17, 0x251C, Termbox::Colors[:white], Termbox::Colors[:default])
|
71
|
+
Termbox.tb_change_cell(79, 17, 0x2524, Termbox::Colors[:white], Termbox::Colors[:default])
|
72
|
+
Termbox.tb_change_cell(0, 4, 0x251C, Termbox::Colors[:white], Termbox::Colors[:default])
|
73
|
+
Termbox.tb_change_cell(79, 4, 0x2524, Termbox::Colors[:white], Termbox::Colors[:default])
|
74
74
|
|
75
75
|
5.upto(17) do |i|
|
76
76
|
Termbox.tb_change_cell(1, i, 0x2588, Termbox::Colors[:yellow], Termbox::Colors[:yellow])
|