chiark / gitweb /
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