aboutsummaryrefslogtreecommitdiff
path: root/kscurses/io.jai
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;
}