blob: 4a2f0b39be72645ce492fee0d71f8bc24b2030ca [file] [log] [blame]
Adrien Destugues69b1f062017-06-05 13:44:30 +02001/*
2 * Copyright 2017, Adrien Destugues, pulkomandy@pulkomandy.tk
3 * Distributed under terms of the MIT license.
4 */
5
6
7#include "ctk-arch.h"
8
9#include "lib/textmode/textmode.h"
10
11struct event e = {0};
12
Adrien Destugues6fe1d932017-06-05 20:54:24 +020013short mx, my;
14
15/* Keyboard management */
Adrien Destugues69b1f062017-06-05 13:44:30 +020016ctk_arch_key_t
17ctk_arch_getkey(void)
18{
19 while (e.type != evt_keyboard_press || e.kbd.sym < 8)
20 {
21 events_poll();
22 e = event_get();
23 }
24
25 return e.kbd.sym;
26}
27
28unsigned char kbhit(void)
29{
30 events_poll();
31 e = event_get();
32 return e.type == evt_keyboard_press && e.kbd.sym >= 8;
33}
34
Adrien Destugues6fe1d932017-06-05 20:54:24 +020035
36/* Mouse management */
37void ctk_mouse_init(void)
38{
39 mx = 50;
40 my = 20;
41}
42
43unsigned char ctk_mouse_xtoc(unsigned short x)
44{
45 return x;
46}
47
48unsigned char ctk_mouse_ytoc(unsigned short y)
49{
50 return y;
51}
52
53void ctk_mouse_hide(void)
54{
55 vram_attr[ctk_mouse_ytoc(my)][ctk_mouse_xtoc(mx)] &= ~32;
56}
57
58void ctk_mouse_show(void)
59{
60 vram_attr[ctk_mouse_ytoc(my)][ctk_mouse_xtoc(mx)] |= 32;
61}
62
63unsigned short ctk_mouse_x(void)
64{
65 if (mouse_x != 0)
66 {
67 ctk_mouse_hide();
68 mx += mouse_x; mouse_x = 0;
69 if (mx < 0) mx = 0;
70 if (mx >= LIBCONIO_SCREEN_WIDTH) mx = LIBCONIO_SCREEN_WIDTH - 1;
71 }
72 return mx;
73}
74
75unsigned short ctk_mouse_y(void)
76{
77 if (mouse_y != 0) {
78 ctk_mouse_hide();
79 my += mouse_y; mouse_y = 0;
80 if (my < 0) my = 0;
81 if (my >= LIBCONIO_SCREEN_HEIGHT) my = LIBCONIO_SCREEN_HEIGHT - 1;
82 }
83 return my;
84}
85
86unsigned char ctk_mouse_button(void)
87{
88 return mouse_buttons;
89}
90
91
92/* Character display */
Adrien Destugues69b1f062017-06-05 13:44:30 +020093void
94ctk_arch_draw_char(char c,
95 unsigned char x, unsigned char y,
96 unsigned char reversed,
97 unsigned char color)
98{
99 vram[y][x] = c;
100 vram_attr[y][x] = color;
101}