1 /* Keyboard interface for svgalib. */
2 /* Can be used independently. */
3 
4 #ifndef VGAKEYBOARD_H
5 #define VGAKEYBOARD_H
6 
7 #ifdef __cplusplus
8 extern "C"
9 {
10 #endif
11 
12 #define SCANCODE_ESCAPE			1
13 
14 #define SCANCODE_1			2
15 #define SCANCODE_2			3
16 #define SCANCODE_3			4
17 #define SCANCODE_4			5
18 #define SCANCODE_5			6
19 #define SCANCODE_6			7
20 #define SCANCODE_7			8
21 #define SCANCODE_8			9
22 #define SCANCODE_9			10
23 #define SCANCODE_0			11
24 
25 #define SCANCODE_MINUS			12
26 #define SCANCODE_EQUAL			13
27 
28 #define SCANCODE_BACKSPACE		14
29 #define SCANCODE_TAB			15
30 
31 #define SCANCODE_Q			16
32 #define SCANCODE_W			17
33 #define SCANCODE_E			18
34 #define SCANCODE_R			19
35 #define SCANCODE_T			20
36 #define SCANCODE_Y			21
37 #define SCANCODE_U			22
38 #define SCANCODE_I			23
39 #define SCANCODE_O			24
40 #define SCANCODE_P			25
41 #define SCANCODE_BRACKET_LEFT		26
42 #define SCANCODE_BRACKET_RIGHT		27
43 
44 #define SCANCODE_ENTER			28
45 
46 #define SCANCODE_LEFTCONTROL		29
47 
48 #define SCANCODE_A			30
49 #define SCANCODE_S			31
50 #define SCANCODE_D			32
51 #define SCANCODE_F			33
52 #define SCANCODE_G			34
53 #define SCANCODE_H			35
54 #define SCANCODE_J			36
55 #define SCANCODE_K			37
56 #define SCANCODE_L			38
57 #define SCANCODE_SEMICOLON		39
58 #define SCANCODE_APOSTROPHE		40
59 #define SCANCODE_GRAVE			41
60 
61 #define SCANCODE_LEFTSHIFT		42
62 #define SCANCODE_BACKSLASH		43
63 
64 #define SCANCODE_Z			44
65 #define SCANCODE_X			45
66 #define SCANCODE_C			46
67 #define SCANCODE_V			47
68 #define SCANCODE_B			48
69 #define SCANCODE_N			49
70 #define SCANCODE_M			50
71 #define SCANCODE_COMMA			51
72 #define SCANCODE_PERIOD			52
73 #define SCANCODE_SLASH			53
74 
75 #define SCANCODE_RIGHTSHIFT		54
76 #define SCANCODE_KEYPADMULTIPLY		55
77 
78 #define SCANCODE_LEFTALT		56
79 #define SCANCODE_SPACE			57
80 #define SCANCODE_CAPSLOCK		58
81 
82 #define SCANCODE_F1			59
83 #define SCANCODE_F2			60
84 #define SCANCODE_F3			61
85 #define SCANCODE_F4			62
86 #define SCANCODE_F5			63
87 #define SCANCODE_F6			64
88 #define SCANCODE_F7			65
89 #define SCANCODE_F8			66
90 #define SCANCODE_F9			67
91 #define SCANCODE_F10			68
92 
93 #define SCANCODE_NUMLOCK		69
94 #define SCANCODE_SCROLLLOCK		70
95 
96 #define SCANCODE_KEYPAD7		71
97 #define SCANCODE_CURSORUPLEFT		71
98 #define SCANCODE_KEYPAD8		72
99 #define SCANCODE_CURSORUP		72
100 #define SCANCODE_KEYPAD9		73
101 #define SCANCODE_CURSORUPRIGHT		73
102 #define SCANCODE_KEYPADMINUS		74
103 #define SCANCODE_KEYPAD4		75
104 #define SCANCODE_CURSORLEFT		75
105 #define SCANCODE_KEYPAD5		76
106 #define SCANCODE_KEYPAD6		77
107 #define SCANCODE_CURSORRIGHT		77
108 #define SCANCODE_KEYPADPLUS		78
109 #define SCANCODE_KEYPAD1		79
110 #define SCANCODE_CURSORDOWNLEFT		79
111 #define SCANCODE_KEYPAD2		80
112 #define SCANCODE_CURSORDOWN		80
113 #define SCANCODE_KEYPAD3		81
114 #define SCANCODE_CURSORDOWNRIGHT	81
115 #define SCANCODE_KEYPAD0		82
116 #define SCANCODE_KEYPADPERIOD		83
117 
118 #define SCANCODE_LESS			86
119 
120 #define SCANCODE_F11			87
121 #define SCANCODE_F12			88
122 
123 #define SCANCODE_KEYPADENTER		89
124 #define SCANCODE_RIGHTCONTROL		90
125 #define SCANCODE_CONTROL		107
126 #define SCANCODE_KEYPADDIVIDE		91
127 #define SCANCODE_PRINTSCREEN		92
128 #define SCANCODE_RIGHTALT		93
129 #define SCANCODE_BREAK			104	/* Beware: is 119     */
130 #define SCANCODE_BREAK_ALTERNATIVE	104	/* on some keyboards! */
131 
132 #define SCANCODE_HOME			94
133 #define SCANCODE_CURSORBLOCKUP		95	/* Cursor key block */
134 #define SCANCODE_PAGEUP			96
135 #define SCANCODE_CURSORBLOCKLEFT	97	/* Cursor key block */
136 #define SCANCODE_CURSORBLOCKRIGHT	98	/* Cursor key block */
137 #define SCANCODE_END			99
138 #define SCANCODE_CURSORBLOCKDOWN	100	/* Cursor key block */
139 #define SCANCODE_PAGEDOWN		101
140 #define SCANCODE_INSERT			102
141 #define SCANCODE_REMOVE			103
142 
143 #define SCANCODE_RIGHTWIN		106
144 #define SCANCODE_LEFTWIN		105
145 
146 #define KEY_EVENTRELEASE 0
147 #define KEY_EVENTPRESS 1
148 
149 #define MAX_KEYNAME_LEN 20
150 
151 /* Initialize keyboard handler (brings keyboard into RAW mode). Returns */
152 /* 0 if succesful, -1 otherwise. */
153     int keyboard_init(void);
154 /* Similar, but returns console fd if succesful. */
155     int keyboard_init_return_fd(void);
156 /* Set event handler invoked by keyboard_update(). */
157     typedef void (*__keyboard_handler) (int scancode, int press);
158     void keyboard_seteventhandler(__keyboard_handler handler);
159 /* Return keyboard to normal state. */
160     void keyboard_close(void);
161 /* Read raw keyboard device and handle events. Returns 0 if no event. */
162     int keyboard_update(void);
163 /* Similar to keyboard_update, but wait for an event to happen. */
164 /* [This doesn't seem to work very well -- use select on fd] */
165     void keyboard_waitforupdate(void);
166 
167 /* keyboard_init sets default event handler that keeps track of complete */
168 /* keyboard state: */
169 
170 /* Result of keypressed. */
171 #define KEY_NOTPRESSED 0
172 #define KEY_PRESSED 1
173 
174 /* Modes for translatekeys. */
175 #define TRANSLATE_CURSORKEYS 1	/* Map cursor block to keypad cursor. */
176 #define TRANSLATE_DIAGONAL 2	/* Map keypad diagonal to keypad cursor. */
177 #define TRANSLATE_KEYPADENTER 4	/* Map keypad enter to main enter key. */
178 #define DONT_CATCH_CTRLC 8	/* Disable Crtl-C check. */
179 
180 /* Revert to default handler. */
181     void keyboard_setdefaulteventhandler(void);
182 /* Return pointer to buffer holding state of each key (scancode). */
183 /* Value 1 corresponds to key that is pressed, 0 means not pressed. */
184     char *keyboard_getstate(void);
185 /* Force keyboard state to nothing pressed (all zeroes). */
186     void keyboard_clearstate(void);
187 /* Let default handler translate cursor key block events to numeric keypad */
188 /* cursor key events and other translations. */
189     void keyboard_translatekeys(int mask);
190 
191 /* Return nonzero if key is depressed. */
192     int keyboard_keypressed(int scancode);
193 
194 #ifdef __cplusplus
195 }
196 
197 #endif
198 #endif
199