diff options
Diffstat (limited to 'src/main.c')
-rw-r--r-- | src/main.c | 31 |
1 files changed, 30 insertions, 1 deletions
@@ -288,7 +288,36 @@ handle_input(Uxn *u) { | |||
288 | update_cursor(cursor_position + KEYBOARD_ROW_SIZE); | 288 | update_cursor(cursor_position + KEYBOARD_ROW_SIZE); |
289 | } | 289 | } |
290 | if (key_tap(KEY_B)) { | 290 | if (key_tap(KEY_B)) { |
291 | devctrl->dat[3] = keyboard[cursor_position].symbol; | 291 | u8 symbol = keyboard[cursor_position].symbol; |
292 | switch (symbol) { | ||
293 | case 0x7f: { | ||
294 | // Backspace. | ||
295 | devctrl->dat[3] = 0x08; | ||
296 | } break; | ||
297 | case 0x14: { | ||
298 | // New line. | ||
299 | devctrl->dat[3] = 0x0d; | ||
300 | } break; | ||
301 | case 0x18: { | ||
302 | // Arrow up. | ||
303 | devctrl->dat[2] = 0x10; | ||
304 | } break; | ||
305 | case 0x19: { | ||
306 | // Arrow down. | ||
307 | devctrl->dat[2] = 0x20; | ||
308 | } break; | ||
309 | case 0x1b: { | ||
310 | // Arrow left. | ||
311 | devctrl->dat[2] = 0x40; | ||
312 | } break; | ||
313 | case 0x1a: { | ||
314 | // Arrow right. | ||
315 | devctrl->dat[2] = 0x80; | ||
316 | } break; | ||
317 | default: { | ||
318 | devctrl->dat[3] = symbol; | ||
319 | } break; | ||
320 | } | ||
292 | evaluxn(u, mempeek16(devctrl->dat, 0)); | 321 | evaluxn(u, mempeek16(devctrl->dat, 0)); |
293 | devctrl->dat[3] = 0; | 322 | devctrl->dat[3] = 0; |
294 | } | 323 | } |