1 #if !defined(WINKEYBD_H)
2 #define WINKEYBD_H
3 /*
4  *Copyright (C) 1994-2000 The XFree86 Project, Inc. All Rights Reserved.
5  *
6  *Permission is hereby granted, free of charge, to any person obtaining
7  * a copy of this software and associated documentation files (the
8  *"Software"), to deal in the Software without restriction, including
9  *without limitation the rights to use, copy, modify, merge, publish,
10  *distribute, sublicense, and/or sell copies of the Software, and to
11  *permit persons to whom the Software is furnished to do so, subject to
12  *the following conditions:
13  *
14  *The above copyright notice and this permission notice shall be
15  *included in all copies or substantial portions of the Software.
16  *
17  *THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18  *EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19  *MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20  *NONINFRINGEMENT. IN NO EVENT SHALL THE XFREE86 PROJECT BE LIABLE FOR
21  *ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
22  *CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23  *WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24  *
25  *Except as contained in this notice, the name of the XFree86 Project
26  *shall not be used in advertising or otherwise to promote the sale, use
27  *or other dealings in this Software without prior written authorization
28  *from the XFree86 Project.
29  *
30  * Authors:	Harold L Hunt II
31  */
32 
33 /*
34  * We need symbols for the scan codes of keys.
35  */
36 #include "winkeynames.h"
37 
38 #define VK_FN 0xFF
39 
40 #define		WIN_KEYMAP_COLS		3
41 
42 /* Rows 160 through 165 correspond to software-generated codes, which
43  * may not be associated with the appropriate scan code.
44  */
45 const int
46  g_iKeyMap[] = {
47     /* count      Windows VK,     ASCII,          ASCII when extended VK */
48     /* 0 */ 0, 0, 0,
49     /* 1 */ 0, 0, 0,
50     /* 2 */ 0, 0, 0,
51     /* 3 */ VK_CANCEL, 0, KEY_Break,
52     /* 4 */ 0, 0, 0,
53     /* 5 */ 0, 0, 0,
54     /* 6 */ 0, 0, 0,
55     /* 7 */ 0, 0, 0,
56     /* 8 */ 0, 0, 0,
57     /* 9 */ 0, 0, 0,
58     /* 10 */ 0, 0, 0,
59     /* 11 */ 0, 0, 0,
60     /* 12 */ 0, 0, 0,
61     /* 13 */ VK_RETURN, 0, KEY_KP_Enter,
62     /* 14 */ 0, 0, 0,
63     /* 15 */ 0, 0, 0,
64     /* 16 */ VK_SHIFT, 0, 0,
65     /* 17 */ VK_CONTROL, 0, KEY_RCtrl,
66     /* 18 */ VK_MENU, 0, KEY_AltLang,
67     /* 19 */ VK_PAUSE, KEY_Pause, 0,
68     /* 20 */ 0, 0, 0,
69     /* 21 */ 0, 0, 0,
70     /* 22 */ 0, 0, 0,
71     /* 23 */ 0, 0, 0,
72     /* 24 */ 0, 0, 0,
73     /* 25 */ 0, 0, 0,
74     /* 26 */ 0, 0, 0,
75     /* 27 */ 0, 0, 0,
76     /* 28 */ 0, 0, 0,
77     /* 29 */ 0, 0, 0,
78     /* 30 */ 0, 0, 0,
79     /* 31 */ 0, 0, 0,
80     /* 32 */ 0, 0, 0,
81     /* 33 */ VK_PRIOR, 0, KEY_PgUp,
82     /* 34 */ VK_NEXT, 0, KEY_PgDown,
83     /* 35 */ VK_END, 0, KEY_End,
84     /* 36 */ VK_HOME, 0, KEY_Home,
85     /* 37 */ VK_LEFT, 0, KEY_Left,
86     /* 38 */ VK_UP, 0, KEY_Up,
87     /* 39 */ VK_RIGHT, 0, KEY_Right,
88     /* 40 */ VK_DOWN, 0, KEY_Down,
89     /* 41 */ 0, 0, 0,
90     /* 42 */ 0, 0, 0,
91     /* 43 */ 0, 0, 0,
92     /* 44 */ VK_SNAPSHOT, 0, KEY_Print,
93     /* 45 */ VK_INSERT, 0, KEY_Insert,
94     /* 46 */ VK_DELETE, 0, KEY_Delete,
95     /* 47 */ 0, 0, 0,
96     /* 48 */ 0, 0, 0,
97     /* 49 */ 0, 0, 0,
98     /* 50 */ 0, 0, 0,
99     /* 51 */ 0, 0, 0,
100     /* 52 */ 0, 0, 0,
101     /* 53 */ 0, 0, 0,
102     /* 54 */ 0, 0, 0,
103     /* 55 */ 0, 0, 0,
104     /* 56 */ 0, 0, 0,
105     /* 57 */ 0, 0, 0,
106     /* 58 */ 0, 0, 0,
107     /* 59 */ 0, 0, 0,
108     /* 60 */ 0, 0, 0,
109     /* 61 */ 0, 0, 0,
110     /* 62 */ 0, 0, 0,
111     /* 63 */ 0, 0, 0,
112     /* 64 */ 0, 0, 0,
113     /* 65 */ 0, 0, 0,
114     /* 66 */ 0, 0, 0,
115     /* 67 */ 0, 0, 0,
116     /* 68 */ 0, 0, 0,
117     /* 69 */ 0, 0, 0,
118     /* 70 */ 0, 0, 0,
119     /* 71 */ 0, 0, 0,
120     /* 72 */ 0, 0, 0,
121     /* 73 */ 0, 0, 0,
122     /* 74 */ 0, 0, 0,
123     /* 75 */ 0, 0, 0,
124     /* 76 */ 0, 0, 0,
125     /* 77 */ 0, 0, 0,
126     /* 78 */ 0, 0, 0,
127     /* 79 */ 0, 0, 0,
128     /* 80 */ 0, 0, 0,
129     /* 81 */ 0, 0, 0,
130     /* 82 */ 0, 0, 0,
131     /* 83 */ 0, 0, 0,
132     /* 84 */ 0, 0, 0,
133     /* 85 */ 0, 0, 0,
134     /* 86 */ 0, 0, 0,
135     /* 87 */ 0, 0, 0,
136     /* 88 */ 0, 0, 0,
137     /* 89 */ 0, 0, 0,
138     /* 90 */ 0, 0, 0,
139     /* 91 */ VK_LWIN, KEY_LMeta, 0,
140     /* 92 */ VK_RWIN, KEY_RMeta, 0,
141     /* 93 */ VK_APPS, KEY_Menu, 0,
142     /* 94 */ 0, 0, 0,
143     /* 95 */ 0, 0, 0,
144     /* 96 */ 0, 0, 0,
145     /* 97 */ 0, 0, 0,
146     /* 98 */ 0, 0, 0,
147     /* 99 */ 0, 0, 0,
148     /* 100 */ 0, 0, 0,
149     /* 101 */ 0, 0, 0,
150     /* 102 */ 0, 0, 0,
151     /* 103 */ 0, 0, 0,
152     /* 104 */ 0, 0, 0,
153     /* 105 */ 0, 0, 0,
154     /* 106 */ 0, 0, 0,
155     /* 107 */ 0, 0, 0,
156     /* 108 */ 0, 0, 0,
157     /* 109 */ 0, 0, 0,
158     /* 110 */ 0, 0, 0,
159     /* 111 */ VK_DIVIDE, 0, KEY_KP_Divide,
160     /* 112 */ 0, 0, 0,
161     /* 113 */ 0, 0, 0,
162     /* 114 */ 0, 0, 0,
163     /* 115 */ 0, 0, 0,
164     /* 116 */ 0, 0, 0,
165     /* 117 */ 0, 0, 0,
166     /* 118 */ 0, 0, 0,
167     /* 119 */ 0, 0, 0,
168     /* 120 */ 0, 0, 0,
169     /* 121 */ 0, 0, 0,
170     /* 122 */ 0, 0, 0,
171     /* 123 */ 0, 0, 0,
172     /* 124 */ 0, 0, 0,
173     /* 125 */ 0, 0, 0,
174     /* 126 */ 0, 0, 0,
175     /* 127 */ 0, 0, 0,
176     /* 128 */ 0, 0, 0,
177     /* 129 */ 0, 0, 0,
178     /* 130 */ 0, 0, 0,
179     /* 131 */ 0, 0, 0,
180     /* 132 */ 0, 0, 0,
181     /* 133 */ 0, 0, 0,
182     /* 134 */ 0, 0, 0,
183     /* 135 */ 0, 0, 0,
184     /* 136 */ 0, 0, 0,
185     /* 137 */ 0, 0, 0,
186     /* 138 */ 0, 0, 0,
187     /* 139 */ 0, 0, 0,
188     /* 140 */ 0, 0, 0,
189     /* 141 */ 0, 0, 0,
190     /* 142 */ 0, 0, 0,
191     /* 143 */ 0, 0, 0,
192     /* 144 */ 0, 0, 0,
193     /* 145 */ 0, 0, 0,
194     /* 146 */ 0, 0, 0,
195     /* 147 */ 0, 0, 0,
196     /* 148 */ 0, 0, 0,
197     /* 149 */ 0, 0, 0,
198     /* 150 */ 0, 0, 0,
199     /* 151 */ 0, 0, 0,
200     /* 152 */ 0, 0, 0,
201     /* 153 */ 0, 0, 0,
202     /* 154 */ 0, 0, 0,
203     /* 155 */ 0, 0, 0,
204     /* 156 */ 0, 0, 0,
205     /* 157 */ 0, 0, 0,
206     /* 158 */ 0, 0, 0,
207     /* 159 */ 0, 0, 0,
208     /* 160 */ VK_LSHIFT, KEY_ShiftL, 0,
209     /* 161 */ VK_RSHIFT, KEY_ShiftR, 0,
210     /* 162 */ VK_LCONTROL, KEY_LCtrl, 0,
211     /* 163 */ VK_RCONTROL, KEY_RCtrl, 0,
212     /* 164 */ VK_LMENU, KEY_Alt, 0,
213     /* 165 */ VK_RMENU, KEY_AltLang, 0,
214     /* 166 */ 0, 0, 0,
215     /* 167 */ 0, 0, 0,
216     /* 168 */ 0, 0, 0,
217     /* 169 */ 0, 0, 0,
218     /* 170 */ 0, 0, 0,
219     /* 171 */ 0, 0, 0,
220     /* 172 */ 0, 0, 0,
221     /* 173 */ VK_VOLUME_MUTE, 0, KEY_Mute,
222     /* 174 */ VK_VOLUME_DOWN, 0, KEY_AudioLower,
223     /* 175 */ VK_VOLUME_UP, 0, KEY_AudioRaise,
224     /* 176 */ VK_MEDIA_NEXT_TRACK, 0, KEY_NEXTSONG,
225     /* 177 */ VK_MEDIA_PREV_TRACK, 0, KEY_PREVIOUSSONG,
226     /* 178 */ VK_MEDIA_STOP, 0, KEY_STOPCD,
227     /* 179 */ VK_MEDIA_PLAY_PAUSE, 0, KEY_PLAYPAUSE,
228     /* 180 */ 0, 0, 0,
229     /* 181 */ 0, 0, 0,
230     /* 182 */ 0, 0, 0,
231     /* 183 */ 0, 0, 0,
232     /* 184 */ 0, 0, 0,
233     /* 185 */ 0, 0, 0,
234     /* 186 */ 0, 0, 0,
235     /* 187 */ 0, 0, 0,
236     /* 188 */ 0, 0, 0,
237     /* 189 */ 0, 0, 0,
238     /* 190 */ 0, 0, 0,
239     /* 191 */ 0, 0, 0,
240     /* 192 */ 0, 0, 0,
241     /* 193 */ 0, 0, 0,
242     /* 194 */ 0, 0, 0,
243     /* 195 */ 0, 0, 0,
244     /* 196 */ 0, 0, 0,
245     /* 197 */ 0, 0, 0,
246     /* 198 */ 0, 0, 0,
247     /* 199 */ 0, 0, 0,
248     /* 200 */ 0, 0, 0,
249     /* 201 */ 0, 0, 0,
250     /* 202 */ 0, 0, 0,
251     /* 203 */ 0, 0, 0,
252     /* 204 */ 0, 0, 0,
253     /* 205 */ 0, 0, 0,
254     /* 206 */ 0, 0, 0,
255     /* 207 */ 0, 0, 0,
256     /* 208 */ 0, 0, 0,
257     /* 209 */ 0, 0, 0,
258     /* 210 */ 0, 0, 0,
259     /* 211 */ 0, 0, 0,
260     /* 212 */ 0, 0, 0,
261     /* 213 */ 0, 0, 0,
262     /* 214 */ 0, 0, 0,
263     /* 215 */ 0, 0, 0,
264     /* 216 */ 0, 0, 0,
265     /* 217 */ 0, 0, 0,
266     /* 218 */ 0, 0, 0,
267     /* 219 */ 0, 0, 0,
268     /* 220 */ 0, 0, 0,
269     /* 221 */ 0, 0, 0,
270     /* 222 */ 0, 0, 0,
271                                         /* 223 */ VK_OEM_8, 0, KEY_RCtrl,
272                                         /* at least on Canadian Multilingual Standard layout */
273     /* 224 */ 0, 0, 0,
274     /* 225 */ 0, 0, 0,
275     /* 226 */ 0, 0, 0,
276     /* 227 */ 0, 0, 0,
277     /* 228 */ 0, 0, 0,
278     /* 229 */ 0, 0, 0,
279     /* 230 */ 0, 0, 0,
280     /* 231 */ 0, 0, 0,
281     /* 232 */ 0, 0, 0,
282     /* 233 */ 0, 0, 0,
283     /* 234 */ 0, 0, 0,
284     /* 235 */ 0, 0, 0,
285     /* 236 */ 0, 0, 0,
286     /* 237 */ 0, 0, 0,
287     /* 238 */ 0, 0, 0,
288     /* 239 */ 0, 0, 0,
289     /* 240 */ 0, 0, 0,
290     /* 241 */ 0, 0, 0,
291     /* 242 */ 0, 0, 0,
292     /* 243 */ 0, 0, 0,
293     /* 244 */ 0, 0, 0,
294     /* 245 */ 0, 0, 0,
295     /* 246 */ 0, 0, 0,
296     /* 247 */ 0, 0, 0,
297     /* 248 */ 0, 0, 0,
298     /* 249 */ 0, 0, 0,
299     /* 250 */ 0, 0, 0,
300     /* 251 */ 0, 0, 0,
301     /* 252 */ 0, 0, 0,
302     /* 253 */ 0, 0, 0,
303     /* 254 */ 0, 0, 0,
304                                 /* 255 */ VK_FN, 0, KEY_Fn
305                                 /* Most keyboards don't generate a scancode for Fn, but a few do... */
306 };
307 
308 #endif                          /* WINKEYBD_H */
309