2 Copyright © 1995-2014, The AROS Development Team. All rights reserved.
6 #include <proto/exec.h>
7 #include <proto/intuition.h>
8 #include <proto/keymap.h>
12 #include <exec/execbase.h>
13 #include <devices/rawkeycodes.h>
14 #include <devices/inputevent.h>
16 #define NUM_STDKEYS 89
19 struct Library
*KeymapBase
;
21 static WORD std_keytable
[NUM_STDKEYS
] =
23 NOKEY
, /* 000 (0x00) */
24 RAWKEY_ESCAPE
, /* 001 (0x01) K_Escape */
25 RAWKEY_1
, /* 002 (0x02) K_1 */
26 RAWKEY_2
, /* 003 (0x03) K_2 */
27 RAWKEY_3
, /* 004 (0x04) K_3 */
28 RAWKEY_4
, /* 005 (0x05) K_4 */
29 RAWKEY_5
, /* 006 (0x06) K_5 */
30 RAWKEY_6
, /* 007 (0x07) K_6 */
31 RAWKEY_7
, /* 008 (0x08) K_7 */
32 RAWKEY_8
, /* 009 (0x09) K_8 */
33 RAWKEY_9
, /* 010 (0x0A) K_9 */
34 RAWKEY_0
, /* 011 (0x0B) K_0 */
35 RAWKEY_MINUS
, /* 012 (0x0C) K_Minus */
36 RAWKEY_EQUAL
, /* 013 (0x0D) K_Equal */
37 RAWKEY_BACKSPACE
, /* 014 (0x0E) K_Backspace */
38 RAWKEY_TAB
, /* 015 (0x0F) K_Tab */
39 RAWKEY_Q
, /* 016 (0x10) K_Q */
40 RAWKEY_W
, /* 017 (0x11) K_W */
41 RAWKEY_E
, /* 018 (0x12) K_E */
42 RAWKEY_R
, /* 019 (0x13) K_R */
43 RAWKEY_T
, /* 020 (0x14) K_T */
44 RAWKEY_Y
, /* 021 (0x15) K_Y */
45 RAWKEY_U
, /* 022 (0x16) K_U */
46 RAWKEY_I
, /* 023 (0x17) K_I */
47 RAWKEY_O
, /* 024 (0x18) K_O */
48 RAWKEY_P
, /* 025 (0x19) K_P */
49 RAWKEY_LBRACKET
, /* 026 (0x1A) K_LBracket */
50 RAWKEY_RBRACKET
, /* 027 (0x1B) K_RBracket */
51 RAWKEY_RETURN
, /* 028 (0x1C) K_Enter */
52 RAWKEY_LCONTROL
, /* 029 (0x1D) K_LCtrl */
53 RAWKEY_A
, /* 030 (0x1E) K_A */
54 RAWKEY_S
, /* 031 (0x1F) K_S */
55 RAWKEY_D
, /* 032 (0x20) K_D */
56 RAWKEY_F
, /* 033 (0x21) K_F */
57 RAWKEY_G
, /* 034 (0x22) K_G */
58 RAWKEY_H
, /* 035 (0x23) K_H */
59 RAWKEY_J
, /* 036 (0x24) K_J */
60 RAWKEY_K
, /* 037 (0x25) K_K */
61 RAWKEY_L
, /* 038 (0x26) K_L */
62 RAWKEY_SEMICOLON
, /* 039 (0x27) K_Semicolon */
63 RAWKEY_QUOTE
, /* 040 (0x28) K_Quote */
64 RAWKEY_TILDE
, /* 041 (0x29) K_BackQuote */
65 RAWKEY_LSHIFT
, /* 042 (0x2A) K_LShift */
66 RAWKEY_2B
, /* 043 (0x2B) K_BackSlash */
67 RAWKEY_Z
, /* 044 (0x2C) K_Z */
68 RAWKEY_X
, /* 045 (0x2D) K_X */
69 RAWKEY_C
, /* 046 (0x2E) K_C */
70 RAWKEY_V
, /* 047 (0x2F) K_V */
71 RAWKEY_B
, /* 048 (0x30) K_B */
72 RAWKEY_N
, /* 049 (0x31) K_N */
73 RAWKEY_M
, /* 050 (0x32) K_M */
74 RAWKEY_COMMA
, /* 051 (0x33) K_Comma */
75 RAWKEY_PERIOD
, /* 052 (0x34) K_Period */
76 RAWKEY_SLASH
, /* 053 (0x35) K_Slash */
77 RAWKEY_RSHIFT
, /* 054 (0x36) K_RShift */
78 0x5c , /* 055 (0x37) K_KP_Multiply */
79 RAWKEY_LALT
, /* 056 (0x38) K_LAlt */
80 RAWKEY_SPACE
, /* 057 (0x39) K_Space */
81 RAWKEY_CAPSLOCK
, /* 058 (0x3A) K_CapsLock */
82 RAWKEY_F1
, /* 059 (0x3B) K_F1 */
83 RAWKEY_F2
, /* 060 (0x3C) K_F2 */
84 RAWKEY_F3
, /* 061 (0x3D) K_F3 */
85 RAWKEY_F4
, /* 062 (0x3E) K_F4 */
86 RAWKEY_F5
, /* 063 (0x3F) K_F5 */
87 RAWKEY_F6
, /* 064 (0x40) K_F6 */
88 RAWKEY_F7
, /* 065 (0x41) K_F7 */
89 RAWKEY_F8
, /* 066 (0x42) K_F8 */
90 RAWKEY_F9
, /* 067 (0x43) K_F9 */
91 RAWKEY_F10
, /* 068 (0x44) K_F10 */
92 0x5A , /* 069 (0x45) K_NumLock */
93 NOKEY
, /* 070 (0x46) K_Scroll_Lock ???? */
94 RAWKEY_KP_7
, /* 071 (0x47) K_KP_7 */
95 RAWKEY_KP_8
, /* 072 (0x48) K_KP_8 */
96 RAWKEY_KP_9
, /* 073 (0x49) K_KP_9 */
97 0x5D , /* 074 (0x4A) K_KP_Sub */
98 RAWKEY_KP_4
, /* 075 (0x4B) K_KP_4 */
99 RAWKEY_KP_5
, /* 076 (0x4C) K_KP_5 */
100 RAWKEY_KP_6
, /* 077 (0x4D) K_KP_6 */
101 0x5E , /* 078 (0x4E) K_KP_Add */
102 RAWKEY_KP_1
, /* 079 (0x4F) K_KP_1 */
103 RAWKEY_KP_2
, /* 080 (0x50) K_KP_2 */
104 RAWKEY_KP_3
, /* 081 (0x51) K_KP_3 */
105 RAWKEY_KP_0
, /* 082 (0x52) K_KP_0 */
106 RAWKEY_KP_DECIMAL
, /* 083 (0x53) K_KP_Decimal */
107 NOKEY
, /* 084 (0x54) */
108 NOKEY
, /* 085 (0x55) */
109 RAWKEY_LESSGREATER
, /* 086 (0x56) K_LessGreater */
110 RAWKEY_LAMIGA
, /* 087 (0x57) K_F11 - Note: we map to LAMIGA, F11 rawkey code would be 0x4B */
111 RAWKEY_RAMIGA
/* 088 (0x58) K_F12 - Note: we map to RAMIGA, F12 rawkey code would be 0x6F */
115 static void dotest(void)
118 struct IntuiMessage
*msg
;
121 KeymapBase
= OpenLibrary("keymap.library", 0);
122 if (!KeymapBase
) return;
124 win
= OpenWindowTags(NULL
, WA_Left
, 20,
129 WA_CloseGadget
, TRUE
,
130 WA_DepthGadget
, TRUE
,
131 WA_Title
, (IPTR
)"IDCMP_RAWKEY Test",
132 WA_IDCMP
, IDCMP_CLOSEWINDOW
| IDCMP_RAWKEY
,
136 CloseLibrary(KeymapBase
);
142 WaitPort(win
->UserPort
);
143 while((msg
= (struct IntuiMessage
*)GetMsg(win
->UserPort
)))
147 case IDCMP_CLOSEWINDOW
:
152 printf("RAWKEY %s: %3d (0x%02x) QUAL=0x%04x DEAD=0x%08lx ",
153 (msg
->Code
& IECODE_UP_PREFIX
) ? "UP " : "DOWN",
154 (msg
->Code
& ~IECODE_UP_PREFIX
),
155 (msg
->Code
& ~IECODE_UP_PREFIX
),
157 (long)*(ULONG
*)msg
->IAddress
);
160 struct InputEvent ie
;
164 ie
.ie_Class
= IECLASS_RAWKEY
;
165 ie
.ie_Code
= msg
->Code
;
166 ie
.ie_Qualifier
= msg
->Qualifier
;
167 ie
.ie_EventAddress
= *((ULONG
**) msg
->IAddress
);
169 ret
= MapRawKey(&ie
, buf
, sizeof(buf
), NULL
);
170 if (ret
>= 0) buf
[ret
] = 0;
172 printf("MAPPED=%3d (%s)\n", ret
, (ret
== -1) ? "<NONE>" : ((ret
== 0) ? "<ZERO>" : buf
));
176 ReplyMsg((struct Message
*)msg
);
181 CloseLibrary(KeymapBase
);
184 int main(int argc
, char **argv
)
194 if (strcmp(argv
[1], "test") == 0)
200 index
= strtol(argv
[1], 0, 0);
202 if (index
< 0) index
= 0;
203 if (index
> 88) index
= 88;
205 startindex
= endindex
= index
;
208 #if AROS_SIZEOFULONG == AROS_SIZEOFPTR
209 table
= (WORD
*)SysBase
->ex_Reserved2
[1]; /* set up in config/i386-native/Drivers/keyboard/kbdclass.c */
215 puts("Error: table points to NULL!\n");
219 printf("Table address = 0x%p\n\n", table
);
221 for(index
= startindex
; index
<= endindex
; index
++)
223 printf("#%02d: %d (0x%x)\n", index
, table
[index
], table
[index
]);
224 if (table
[index
] != std_keytable
[index
]) trashed
++;
229 printf("\n=============== Found %d trashed entries ============\n", trashed
);
230 for(index
= startindex
; index
<= endindex
; index
++)
232 if (table
[index
] != std_keytable
[index
])
234 printf("#%02d: %d (0x%x) should be: %d (0x%x)\n", index
, table
[index
], table
[index
], std_keytable
[index
], std_keytable
[index
]);