4 * Really good keyboard handling
6 * © 1994-1998 Straylight
9 /*----- Licensing note ----------------------------------------------------*
11 * This file is part of Straylight's Steel library.
13 * Steel is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation; either version 2, or (at your option)
18 * Steel is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
23 * You should have received a copy of the GNU General Public License
24 * along with Steel. If not, write to the Free Software Foundation,
25 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
31 /*----- Make sure we have BOOL defined ------------------------------------*/
39 /*----- Old-style macros for keypresses -----------------------------------*/
41 #define akbd_Fn (256 + 128)
44 #define akbd_TabK (akbd_Fn + 10)
45 #define akbd_CopyK (akbd_Fn + 11)
46 #define akbd_LeftK (akbd_Fn + 12)
47 #define akbd_RightK (akbd_Fn + 13)
48 #define akbd_DownK (akbd_Fn + 14)
49 #define akbd_UpK (akbd_Fn + 15)
50 #define akbd_Fn10 (0x1CA)
51 #define akbd_Fn11 (0x1CB)
52 #define akbd_Fn12 (0x1CC)
53 #define akbd_InsertK (0x1CD)
54 #define akbd_PrintK (akbd_Fn+0)
55 #define akbd_PageUpK (akbd_Sh+akbd_UpK)
56 #define akbd_PageDownK (akbd_Sh+akbd_DownK)
58 /*----- Constant names for the STEEL extended keyset ----------------------*
60 * Due to buggy compilers, we can't put these into an enumeration, so
61 * we put the load onto the preprocessor instead...
100 #define key_scJ 0x10A
101 #define key_scK 0x10B
102 #define key_scL 0x10C
103 #define key_scM 0x10D
104 #define key_scN 0x10E
105 #define key_scO 0x10F
106 #define key_scP 0x110
107 #define key_scQ 0x111
108 #define key_scR 0x112
109 #define key_scS 0x113
110 #define key_scT 0x114
111 #define key_scU 0x115
112 #define key_scV 0x116
113 #define key_scW 0x117
114 #define key_scX 0x118
115 #define key_scY 0x119
116 #define key_scZ 0x11A
118 #define key_Esc 0x01B
119 #define key_sEsc 0x11B
120 #define key_cEsc 0x13B
121 #define key_scEsc 0x15B
123 #define key_Backspace 0x01C
124 #define key_sBackspace 0x11C
125 #define key_cBackspace 0x13C
126 #define key_scBackspace 0x15C
128 #define key_Return 0x01D
129 #define key_sReturn 0x11D
130 #define key_cReturn 0x13D
131 #define key_scReturn 0x15D
133 #define key_Insert 0x1CD
134 #define key_sInsert 0x1DD
135 #define key_cInsert 0x1ED
136 #define key_scInsert 0x1FD
138 #define key_Home 0x01E
139 #define key_sHome 0x11E
140 #define key_cHome 0x13E
141 #define key_scHome 0x15E
143 #define key_Delete 0x07F
144 #define key_sDelete 0x17F
145 #define key_cDelete 0x01F
146 #define key_scDelete 0x11F
148 #define key_Copy 0x18B
149 #define key_sCopy 0x19B
150 #define key_cCopy 0x1AB
151 #define key_scCopy 0x1BB
153 #define key_Tab 0x18A
154 #define key_sTab 0x19A
155 #define key_cTab 0x1AA
156 #define key_scTab 0x1BA
158 #define key_Space 0x020
159 #define key_sSpace 0x120
160 #define key_cSpace 0x000
161 #define key_scSpace 0x100
174 #define key_sc0 0x150
175 #define key_sc1 0x151
176 #define key_sc2 0x152
177 #define key_sc3 0x153
178 #define key_sc4 0x154
179 #define key_sc5 0x155
180 #define key_sc6 0x156
181 #define key_sc7 0x157
182 #define key_sc8 0x158
183 #define key_sc9 0x159
196 #define key_sk0 0x1D0
197 #define key_sk1 0x1D1
198 #define key_sk2 0x1D2
199 #define key_sk3 0x1D3
200 #define key_sk4 0x1D4
201 #define key_sk5 0x1D5
202 #define key_sk6 0x1D6
203 #define key_sk7 0x1D7
204 #define key_sk8 0x1D8
205 #define key_sk9 0x1D9
207 #define key_ck0 0x1E0
208 #define key_ck1 0x1E1
209 #define key_ck2 0x1E2
210 #define key_ck3 0x1E3
211 #define key_ck4 0x1E4
212 #define key_ck5 0x1E5
213 #define key_ck6 0x1E6
214 #define key_ck7 0x1E7
215 #define key_ck8 0x1E8
216 #define key_ck9 0x1E9
218 #define key_sck0 0x1F0
219 #define key_sck1 0x1F1
220 #define key_sck2 0x1F2
221 #define key_sck3 0x1F3
222 #define key_sck4 0x1F4
223 #define key_sck5 0x1F5
224 #define key_sck6 0x1F6
225 #define key_sck7 0x1F7
226 #define key_sck8 0x1F8
227 #define key_sck9 0x1F9
229 #define key_cLSquare 0x12B
230 #define key_scLSquare 0x14B
232 #define key_cRSquare 0x12D
233 #define key_scRSquare 0x14D
235 #define key_cBackslash 0x12C
236 #define key_scBackslash 0x14C
238 #define key_cMinus 0x12F
239 #define key_scMinus 0x14F
241 #define key_kSlash 0x161
242 #define key_kStar 0x162
243 #define key_kHash 0x163
244 #define key_kMinus 0x164
245 #define key_kPlus 0x165
246 #define key_kEnter 0x166
247 #define key_kDot 0x167
249 #define key_skSlash 0x171
250 #define key_skStar 0x172
251 #define key_skHash 0x173
252 #define key_skMinus 0x174
253 #define key_skPlus 0x175
254 #define key_skEnter 0x176
255 #define key_skDot 0x177
257 #define key_ckSlash 0x121
258 #define key_ckStar 0x122
259 #define key_ckHash 0x123
260 #define key_ckMinus 0x124
261 #define key_ckPlus 0x125
262 #define key_ckEnter 0x126
263 #define key_ckDot 0x127
265 #define key_sckSlash 0x141
266 #define key_sckStar 0x142
267 #define key_sckHash 0x143
268 #define key_sckMinus 0x144
269 #define key_sckPlus 0x145
270 #define key_sckEnter 0x146
271 #define key_sckDot 0x147
273 #define key_Print 0x180
283 #define key_F10 0x1CA
284 #define key_F11 0x1CB
285 #define key_F12 0x1CC
287 #define key_sPrint 0x190
288 #define key_sF1 0x191
289 #define key_sF2 0x192
290 #define key_sF3 0x193
291 #define key_sF4 0x194
292 #define key_sF5 0x195
293 #define key_sF6 0x196
294 #define key_sF7 0x197
295 #define key_sF8 0x198
296 #define key_sF9 0x199
297 #define key_sF10 0x1DA
298 #define key_sF11 0x1DB
299 #define key_sF12 0x1DC
301 #define key_cPrint 0x1A0
302 #define key_cF1 0x1A1
303 #define key_cF2 0x1A2
304 #define key_cF3 0x1A3
305 #define key_cF4 0x1A4
306 #define key_cF5 0x1A5
307 #define key_cF6 0x1A6
308 #define key_cF7 0x1A7
309 #define key_cF8 0x1A8
310 #define key_cF9 0x1A9
311 #define key_cF10 0x1EA
312 #define key_cF11 0x1EB
313 #define key_cF12 0x1EC
315 #define key_scPrint 0x1B0
316 #define key_scF1 0x1B1
317 #define key_scF2 0x1B2
318 #define key_scF3 0x1B3
319 #define key_scF4 0x1B4
320 #define key_scF5 0x1B5
321 #define key_scF6 0x1B6
322 #define key_scF7 0x1B7
323 #define key_scF8 0x1B8
324 #define key_scF9 0x1B9
325 #define key_scF10 0x1FA
326 #define key_scF11 0x1FB
327 #define key_scF12 0x1FC
329 #define key_Left 0x18C
330 #define key_Right 0x18D
331 #define key_Down 0x18E
333 #define key_PageDown 0x19E
334 #define key_PageUp 0x19F
336 #define key_sLeft 0x19C
337 #define key_sRight 0x19D
338 #define key_sDown 0x19E
339 #define key_sUp 0x19F
340 #define key_sPageDown 0x18E
341 #define key_sPageUp 0x18F
343 #define key_cLeft 0x1AC
344 #define key_cRight 0x1AD
345 #define key_cDown 0x1AE
346 #define key_cUp 0x1AF
347 #define key_cPageDown 0x1BE
348 #define key_cPageUp 0x1BF
350 #define key_scLeft 0x1BC
351 #define key_scRight 0x1BD
352 #define key_scDown 0x1BE
353 #define key_scUp 0x1BF
354 #define key_scPageDown 0x1AE
355 #define key_scPageUp 0x1AF
357 /*----- Functions ---------------------------------------------------------*/
360 * BOOL akbd_checkInternalKey(int ikey)
363 * Checks whether a given key is being pressed at the moment.
366 * int ikey == the internal key number of the key to check, as shown on page
367 * 1-849 of the RISC OS 3 Programmer's Reference Manual.
370 BOOL akbd_checkInternalKey(int ikey);
373 * int akbd_translate(int chcode)
376 * Translates the given WIMP-type key number, as returned in a Key_Pressed
377 * (wimp_EKEY) event into a STEEL extended key number, which should
378 * distinguish almost every keypress available.
381 * int chcode == a WIMP-type keypress number
384 * An extended keycode
387 int akbd_translate(int chcode);
390 * BOOL akbd_pollsh(void)
393 * Returns whether the Shift key is pressed
396 BOOL akbd_pollsh(void);
399 * BOOL akbd_pollctl(void)
402 * Returns whether the Control key is pressed
405 BOOL akbd_pollctl(void);
408 * BOOL akbd_pollkey(int *code)
411 * Reports whether the user has typed ahead, and if so what the keypress
412 * was. Note that the keypresses returned are WIMP-type, not STEEL extended
413 * ones so you will have to use akbd_translate if you need the extended
416 * This call could be used to allow buffering of keypresses: on a
417 * Key_Pressed event you would call this routine until it returns FALSE
418 * and store the codes it returns in a buffer along with the code from the
422 BOOL akbd_pollkey(int *code);