Initial revision
[ssr] / StraySrc / Libraries / Steel / h / akbd
1 /*
2 * akbd.h
3 *
4 * Really good keyboard handling
5 *
6 * © 1994-1998 Straylight
7 */
8
9 /*----- Licensing note ----------------------------------------------------*
10 *
11 * This file is part of Straylight's Steel library.
12 *
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)
16 * any later version.
17 *
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.
22 *
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.
26 */
27
28 #ifndef __akbd_h
29 #define __akbd_h
30
31 /*----- Make sure we have BOOL defined ------------------------------------*/
32
33 #ifndef BOOL
34 #define BOOL int
35 #define TRUE 1
36 #define FALSE 0
37 #endif
38
39 /*----- Old-style macros for keypresses -----------------------------------*/
40
41 #define akbd_Fn (256 + 128)
42 #define akbd_Sh (16)
43 #define akbd_Ctl (32)
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)
57
58 /*----- Constant names for the STEEL extended keyset ----------------------*
59 *
60 * Due to buggy compilers, we can't put these into an enumeration, so
61 * we put the load onto the preprocessor instead...
62 */
63
64 #define key_cA 0x001
65 #define key_cB 0x002
66 #define key_cC 0x003
67 #define key_cD 0x004
68 #define key_cE 0x005
69 #define key_cF 0x006
70 #define key_cG 0x007
71 #define key_cH 0x008
72 #define key_cI 0x009
73 #define key_cJ 0x00A
74 #define key_cK 0x00B
75 #define key_cL 0x00C
76 #define key_cM 0x00D
77 #define key_cN 0x00E
78 #define key_cO 0x00F
79 #define key_cP 0x010
80 #define key_cQ 0x011
81 #define key_cR 0x012
82 #define key_cS 0x013
83 #define key_cT 0x014
84 #define key_cU 0x015
85 #define key_cV 0x016
86 #define key_cW 0x017
87 #define key_cX 0x018
88 #define key_cY 0x019
89 #define key_cZ 0x01A
90
91 #define key_scA 0x101
92 #define key_scB 0x102
93 #define key_scC 0x103
94 #define key_scD 0x104
95 #define key_scE 0x105
96 #define key_scF 0x106
97 #define key_scG 0x107
98 #define key_scH 0x108
99 #define key_scI 0x109
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
117
118 #define key_Esc 0x01B
119 #define key_sEsc 0x11B
120 #define key_cEsc 0x13B
121 #define key_scEsc 0x15B
122
123 #define key_Backspace 0x01C
124 #define key_sBackspace 0x11C
125 #define key_cBackspace 0x13C
126 #define key_scBackspace 0x15C
127
128 #define key_Return 0x01D
129 #define key_sReturn 0x11D
130 #define key_cReturn 0x13D
131 #define key_scReturn 0x15D
132
133 #define key_Insert 0x1CD
134 #define key_sInsert 0x1DD
135 #define key_cInsert 0x1ED
136 #define key_scInsert 0x1FD
137
138 #define key_Home 0x01E
139 #define key_sHome 0x11E
140 #define key_cHome 0x13E
141 #define key_scHome 0x15E
142
143 #define key_Delete 0x07F
144 #define key_sDelete 0x17F
145 #define key_cDelete 0x01F
146 #define key_scDelete 0x11F
147
148 #define key_Copy 0x18B
149 #define key_sCopy 0x19B
150 #define key_cCopy 0x1AB
151 #define key_scCopy 0x1BB
152
153 #define key_Tab 0x18A
154 #define key_sTab 0x19A
155 #define key_cTab 0x1AA
156 #define key_scTab 0x1BA
157
158 #define key_Space 0x020
159 #define key_sSpace 0x120
160 #define key_cSpace 0x000
161 #define key_scSpace 0x100
162
163 #define key_c0 0x130
164 #define key_c1 0x131
165 #define key_c2 0x132
166 #define key_c3 0x133
167 #define key_c4 0x134
168 #define key_c5 0x135
169 #define key_c6 0x136
170 #define key_c7 0x137
171 #define key_c8 0x138
172 #define key_c9 0x139
173
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
184
185 #define key_k0 0x1C0
186 #define key_k1 0x1C1
187 #define key_k2 0x1C2
188 #define key_k3 0x1C3
189 #define key_k4 0x1C4
190 #define key_k5 0x1C5
191 #define key_k6 0x1C6
192 #define key_k7 0x1C7
193 #define key_k8 0x1C8
194 #define key_k9 0x1C9
195
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
206
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
217
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
228
229 #define key_cLSquare 0x12B
230 #define key_scLSquare 0x14B
231
232 #define key_cRSquare 0x12D
233 #define key_scRSquare 0x14D
234
235 #define key_cBackslash 0x12C
236 #define key_scBackslash 0x14C
237
238 #define key_cMinus 0x12F
239 #define key_scMinus 0x14F
240
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
248
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
256
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
264
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
272
273 #define key_Print 0x180
274 #define key_F1 0x181
275 #define key_F2 0x182
276 #define key_F3 0x183
277 #define key_F4 0x184
278 #define key_F5 0x185
279 #define key_F6 0x186
280 #define key_F7 0x187
281 #define key_F8 0x188
282 #define key_F9 0x189
283 #define key_F10 0x1CA
284 #define key_F11 0x1CB
285 #define key_F12 0x1CC
286
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
300
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
314
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
328
329 #define key_Left 0x18C
330 #define key_Right 0x18D
331 #define key_Down 0x18E
332 #define key_Up 0x18F
333 #define key_PageDown 0x19E
334 #define key_PageUp 0x19F
335
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
342
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
349
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
356
357 /*----- Functions ---------------------------------------------------------*/
358
359 /*
360 * BOOL akbd_checkInternalKey(int ikey)
361 *
362 * Use
363 * Checks whether a given key is being pressed at the moment.
364 *
365 * Parameters
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.
368 */
369
370 BOOL akbd_checkInternalKey(int ikey);
371
372 /*
373 * int akbd_translate(int chcode)
374 *
375 * Use
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.
379 *
380 * Parameters
381 * int chcode == a WIMP-type keypress number
382 *
383 * Returns
384 * An extended keycode
385 */
386
387 int akbd_translate(int chcode);
388
389 /*
390 * BOOL akbd_pollsh(void)
391 *
392 * Use
393 * Returns whether the Shift key is pressed
394 */
395
396 BOOL akbd_pollsh(void);
397
398 /*
399 * BOOL akbd_pollctl(void)
400 *
401 * Use
402 * Returns whether the Control key is pressed
403 */
404
405 BOOL akbd_pollctl(void);
406
407 /*
408 * BOOL akbd_pollkey(int *code)
409 *
410 * Use
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
414 * type.
415 *
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
419 * event.
420 */
421
422 BOOL akbd_pollkey(int *code);
423
424 #endif