initial commit
[midikeys] / keyb.h
1 /*
2 DOS interrupt-based keyboard driver.
3 Copyright (C) 2013-2023  John Tsiombikas <nuclear@member.fsf.org>
4
5 This program is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation, either version 3 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License  for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with the program. If not, see <http://www.gnu.org/licenses/>
17 */
18 #ifndef KEYB_H_
19 #define KEYB_H_
20
21 /* special keys */
22 enum {
23         KB_BACKSP = 8,
24         KB_ESC = 27,
25         KB_DEL = 127,
26
27         KB_NUM_0, KB_NUM_1, KB_NUM_2, KB_NUM_3, KB_NUM_4,
28         KB_NUM_5, KB_NUM_6, KB_NUM_7, KB_NUM_8, KB_NUM_9,
29         KB_NUM_DOT, KB_NUM_DIV, KB_NUM_MUL, KB_NUM_MINUS, KB_NUM_PLUS, KB_NUM_ENTER, KB_NUM_EQUALS,
30         KB_UP, KB_DOWN, KB_RIGHT, KB_LEFT,
31         KB_INSERT, KB_HOME, KB_END, KB_PGUP, KB_PGDN,
32         KB_F1, KB_F2, KB_F3, KB_F4, KB_F5, KB_F6,
33         KB_F7, KB_F8, KB_F9, KB_F10, KB_F11, KB_F12,
34         KB_F13, KB_F14, KB_F15,
35         KB_NUMLK, KB_CAPSLK, KB_SCRLK,
36         KB_RSHIFT, KB_LSHIFT, KB_RCTRL, KB_LCTRL, KB_RALT, KB_LALT,
37         KB_RMETA, KB_LMETA, KB_LSUPER, KB_RSUPER, KB_MODE, KB_COMPOSE,
38         KB_HELP, KB_PRINT, KB_SYSRQ, KB_BREAK
39 };
40
41 #define KB_ANY          (-1)
42 #define KB_ALT          (-2)
43 #define KB_CTRL         (-3)
44 #define KB_SHIFT        (-4)
45
46 struct kb_event {
47         int key;
48         int code;
49         int press;
50 };
51
52 extern unsigned char keystate[256];
53
54 #ifdef __cplusplus
55 extern "C" {
56 #endif
57
58 int kb_init(void);
59 void kb_shutdown(void);
60
61 /* Returns the ASCII key event with bit 8 set of release, clear for press
62  * kb_event filled if the pointer is non-null
63  */
64 int kb_event(struct kb_event *ev);
65 int kb_pending(void);
66
67 #ifdef __cplusplus
68 }
69 #endif
70
71 #endif  /* KEYB_H_ */