blob: b2c2df90321de32b0fbbf11602678b341d26dde9 (
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
|
Key :: enum u64 {
READ_ERROR :: 0xffffffff_ffffffff;
UP :: 0x41_5b1b;
DOWN :: 0x42_5b1b;
RIGHT :: 0x43_5b1b;
LEFT :: 0x44_5b1b;
CTRL_UP :: 0x4135_3b315b1b;
CTRL_DOWN :: 0x4235_3b315b1b;
CTRL_RIGHT :: 0x4335_3b315b1b;
CTRL_LEFT :: 0x4435_3b315b1b;
SHIFT_UP :: 0x4132_3b315b1b;
SHIFT_DOWN :: 0x4232_3b315b1b;
SHIFT_RIGHT :: 0x4332_3b315b1b;
SHIFT_LEFT :: 0x4432_3b315b1b;
CTRL_SHIFT_UP :: 0x4136_3b315b1b;
CTRL_SHIFT_DOWN :: 0x4236_3b315b1b;
CTRL_SHIFT_RIGHT:: 0x4336_3b315b1b;
CTRL_SHIFT_LEFT :: 0x4436_3b315b1b;
ALT_UP :: 0x4133_3b315b1b;
ALT_DOWN :: 0x4233_3b315b1b;
ALT_RIGHT :: 0x4333_3b315b1b;
ALT_LEFT :: 0x4433_3b315b1b;
CTRL_C :: 0x03;
CTRL_V :: 0x16;
CTRL_X :: 0x18;
CTRL_Y :: 0x19;
CTRL_Z :: 0x1A;
CTRL_BACKSLASH :: 0x1C;
// ALT_SHIFT_UP :: 0x4133_3b315b1b;
// ALT_SHIFT_DOWN :: 0x4233_3b315b1b;
// ALT_SHIFT_RIGHT :: 0x4333_3b315b1b;
// ALT_SHIFT_LEFT :: 0x4433_3b315b1b;
ENTER :: 0x0D;
ESCAPE :: 0x1B;
BACKSPACE :: 0x7F;
DELETE :: 0x7E335B1B;
}
ks_getch :: (block := true) -> Key {
#if OS == .LINUX {
buf : Key = xx 0;
l := read(STDIN_FILENO, (cast(*u8)*buf), 8); //!!!
check_signal :: inline (key : Key) {
#if ENABLE_SIGINT if key == .CTRL_C raise(SIGINT); //!!!
#if ENABLE_SIGQUIT if key == .CTRL_BACKSLASH raise(SIGQUIT);
}
check_signal(buf);
return ifx l <= 0 then Key.READ_ERROR else buf;
} else {
return .READ_ERROR;
}
}
ks_write :: (str : string) {
#if OS == .LINUX {
printed := 0;
// while 1 {
r := write(STDIN_FILENO, str.data + printed, xx (str.count - printed));
// if printed + r == str.count {
// break;
// } else if r >= 0 {
// printed += r;
// }
// }
} else {
}
__write_counter += str.count;
}
__write_counter := 0;
write_counter_delta :: () -> int {
result := __write_counter;
__write_counter = 0;
return result;
}
|