2 meinOS - A unix-like x86 microkernel operating system
3 Copyright (C) 2008 Janosch Gräf <janosch.graef@gmx.net>
5 This program is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation, either version 3 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
27 wchar_t KEYBOARD_LAYOUT
[0x100][2] = {
28 /* Scancode * Description *//* Characters*/
29 /* 00 * Keyboard error */ { 0 , 0 },
30 /* 01 * Escape */ { 0 , 0 },
31 /* 02 * 1 ! */ { '1' , '!' },
32 /* 03 * 2 @ */ { '2' , '@' },
33 /* 04 * 3 # */ { '3' , '#' },
34 /* 05 * 4 $ */ { '4' , '$' },
35 /* 06 * 5 % */ { '5' , '%' },
36 /* 07 * 6 ^ */ { '6' , '^' },
37 /* 08 * 7 & */ { '7' , '&' },
38 /* 09 * 8 * */ { '8' , '*' },
39 /* 0A * 9 ( */ { '9' , '(' },
40 /* 0B * 0 ) */ { '0' , ')' },
41 /* 0C * - _ */ { '-' , '_' },
42 /* 0D * = + */ { '=' , '+' },
43 /* 0E * Backspace */ { '\b', '\b' },
44 /* 0F * Tab */ { '\t', '\t' },
45 /* 10 * q Q */ { 'q' , 'Q' },
46 /* 11 * w W */ { 'w' , 'W' },
47 /* 12 * e E */ { 'e' , 'E' },
48 /* 13 * r R */ { 'r' , 'R' },
49 /* 14 * t T */ { 't' , 'T' },
50 /* 15 * y Y */ { 'y' , 'Y' },
51 /* 16 * u U */ { 'u' , 'U' },
52 /* 17 * i I */ { 'i' , 'I' },
53 /* 18 * o O */ { 'o' , 'O' },
54 /* 19 * p P */ { 'p' , 'P' },
55 /* 1A * [ { */ { '[' , '{' },
56 /* 1B * ] } */ { ']' , '}' },
57 /* 1C * Enter */ { '\n', '\n' },
58 /* 1D * LCtrl */ { 0 , 0 },
59 /* 1E * a A */ { 'a' , 'A' },
60 /* 1F * s S */ { 's' , 'S' },
61 /* 20 * d D */ { 'd' , 'D' },
62 /* 21 * f F */ { 'f' , 'F' },
63 /* 22 * g G */ { 'g' , 'G' },
64 /* 23 * h H */ { 'h' , 'H' },
65 /* 24 * j J */ { 'j' , 'J' },
66 /* 25 * k K */ { 'k' , 'K' },
67 /* 26 * l L */ { 'l' , 'L' },
68 /* 27 * ; : */ { ';' , ':' },
69 /* 28 * ' " */ { '\'', '"' },
70 /* 29 * ` ~ */ { '`' , '~' },
71 /* 2A * LShift */ { 0 , 0 },
72 /* 2B * \ | */ { '\\', '|' },
73 /* 2C * z Z */ { 'z' , 'Z' },
74 /* 2D * x X */ { 'x' , 'X' },
75 /* 2E * c C */ { 'c' , 'C' },
76 /* 2F * v V */ { 'v' , 'V' },
77 /* 30 * b B */ { 'b' , 'B' },
78 /* 31 * n N */ { 'n' , 'N' },
79 /* 32 * m M */ { 'm' , 'M' },
80 /* 33 * , < */ { ',' , '<' },
81 /* 34 * . > */ { '.' , '>' },
82 /* 35 * / ? */ { '/' , '?' },
83 /* 36 * RShift */ { 0 , 0 },
84 /* 37 * * */ { '*' , '*' },
85 /* 38 * LAlt */ { 0 , 0 },
86 /* 39 * Spacebar */ { ' ' , ' ' },
87 /* 3A * Capslock */ { 0 , 0 },
88 /* 3B * F1 */ { 0 , 0 },
89 /* 3C * F2 */ { 0 , 0 },
90 /* 3D * F3 */ { 0 , 0 },
91 /* 3E * F4 */ { 0 , 0 },
92 /* 3F * F5 */ { 0 , 0 },
93 /* 40 * F6 */ { 0 , 0 },
94 /* 41 * F7 */ { 0 , 0 },
95 /* 42 * F8 */ { 0 , 0 },
96 /* 43 * F9 */ { 0 , 0 },
97 /* 44 * F10 */ { 0 , 0 },
98 /* 45 * NumLock */ { 0 , 0 },
99 /* 46 * ScrollLock */ { 0 , 0 },
100 /* 47 * Keypad 7 */ { '7' , '7' },
101 /* 48 * Keypad 8 */ { '8' , '8' },
102 /* 49 * Keypad 9 */ { '9' , '9' },
103 /* 4A * Keypad - */ { '-' , '-' },
104 /* 4B * Keypad 4 */ { '4' , '4' },
105 /* 4C * Keypad 5 */ { '5' , '5' },
106 /* 4D * Keypad 6 */ { '6' , '6' },
107 /* 4E * Keypad + */ { '+' , '+' },
108 /* 4F * Keypad 1 */ { '1' , '1' },
109 /* 50 * Keypad 2 */ { '2' , '2' },
110 /* 51 * Keypad 3 */ { '3' , '3' },
111 /* 52 * Keypad 0 */ { '0' , '0' },
112 /* 53 * Keypad . */ { '.' , '.' },
113 /* 54 * F11 */ { 0 , 0 },
114 /* 55 * F12 */ { 0 , 0 },
115 /* 56 * */ { 0 , 0 },
116 /* 57 * */ { 0 , 0 },
117 /* 58 * */ { 0 , 0 },
118 /* 59 * */ { 0 , 0 },
119 /* 5A * */ { 0 , 0 },
120 /* 5B * */ { 0 , 0 },
121 /* 5C * */ { 0 , 0 },
122 /* 5D * */ { 0 , 0 },
123 /* 5E * */ { 0 , 0 },
124 /* 5F * */ { 0 , 0 },
125 /* 60 * */ { 0 , 0 },
126 /* 61 * */ { 0 , 0 },
127 /* 62 * */ { 0 , 0 },
128 /* 63 * */ { 0 , 0 },
129 /* 64 * */ { 0 , 0 },
130 /* 65 * */ { 0 , 0 },
131 /* 66 * */ { 0 , 0 },
132 /* 67 * */ { 0 , 0 },
133 /* 68 * */ { 0 , 0 },
134 /* 69 * */ { 0 , 0 },
135 /* 6A * */ { 0 , 0 },
136 /* 6B * */ { 0 , 0 },
137 /* 6C * */ { 0 , 0 },
138 /* 6D * */ { 0 , 0 },
139 /* 6E * */ { 0 , 0 },
140 /* 6F * */ { 0 , 0 },
141 /* 70 * */ { 0 , 0 },
142 /* 71 * */ { 0 , 0 },
143 /* 72 * */ { 0 , 0 },
144 /* 73 * */ { 0 , 0 },
145 /* 74 * */ { 0 , 0 },
146 /* 75 * */ { 0 , 0 },
147 /* 76 * */ { 0 , 0 },
148 /* 77 * */ { 0 , 0 },
149 /* 78 * */ { 0 , 0 },
150 /* 79 * */ { 0 , 0 },
151 /* 7A * */ { 0 , 0 },
152 /* 7B * */ { 0 , 0 },
153 /* 7C * */ { 0 , 0 },
154 /* 7D * */ { 0 , 0 },
155 /* 7E * */ { 0 , 0 },
156 /* 7F * */ { 0 , 0 },
157 /* 80 * */ { 0 , 0 },
158 /* 81 * */ { 0 , 0 },
159 /* 82 * */ { 0 , 0 },
160 /* 83 * */ { 0 , 0 },
161 /* 84 * */ { 0 , 0 },
162 /* 85 * */ { 0 , 0 },
163 /* 86 * */ { 0 , 0 },
164 /* 87 * */ { 0 , 0 },
165 /* 88 * */ { 0 , 0 },
166 /* 89 * */ { 0 , 0 },
167 /* 8A * */ { 0 , 0 },
168 /* 8B * */ { 0 , 0 },
169 /* 8C * */ { 0 , 0 },
170 /* 8D * */ { 0 , 0 },
171 /* 8E * */ { 0 , 0 },
172 /* 8F * */ { 0 , 0 },
173 /* 90 * */ { 0 , 0 },
174 /* 91 * */ { 0 , 0 },
175 /* 92 * */ { 0 , 0 },
176 /* 93 * */ { 0 , 0 },
177 /* 94 * */ { 0 , 0 },
178 /* 95 * */ { 0 , 0 },
179 /* 96 * */ { 0 , 0 },
180 /* 97 * */ { 0 , 0 },
181 /* 98 * */ { 0 , 0 },
182 /* 99 * */ { 0 , 0 },
183 /* 9A * */ { 0 , 0 },
184 /* 9B * */ { 0 , 0 },
185 /* 9C * */ { 0 , 0 },
186 /* 9D * */ { 0 , 0 },
187 /* 9E * */ { 0 , 0 },
188 /* 9F * */ { 0 , 0 },
189 /* A0 * */ { 0 , 0 },
190 /* A1 * */ { 0 , 0 },
191 /* A2 * */ { 0 , 0 },
192 /* A3 * */ { 0 , 0 },
193 /* A4 * */ { 0 , 0 },
194 /* A5 * */ { 0 , 0 },
195 /* A6 * */ { 0 , 0 },
196 /* A7 * */ { 0 , 0 },
197 /* A8 * */ { 0 , 0 },
198 /* A9 * */ { 0 , 0 },
199 /* AA * */ { 0 , 0 },
200 /* AB * */ { 0 , 0 },
201 /* AC * */ { 0 , 0 },
202 /* AD * */ { 0 , 0 },
203 /* AE * */ { 0 , 0 },
204 /* AF * */ { 0 , 0 },
205 /* B0 * */ { 0 , 0 },
206 /* B1 * */ { 0 , 0 },
207 /* B2 * */ { 0 , 0 },
208 /* B3 * */ { 0 , 0 },
209 /* B4 * */ { 0 , 0 },
210 /* B5 * */ { '/' , '/' },
211 /* B6 * */ { 0 , 0 },
212 /* B7 * */ { 0 , 0 },
213 /* B8 * */ { 0 , 0 },
214 /* B9 * */ { 0 , 0 },
215 /* BA * */ { 0 , 0 },
216 /* BB * */ { 0 , 0 },
217 /* BC * */ { 0 , 0 },
218 /* BD * */ { 0 , 0 },
219 /* BE * */ { 0 , 0 },
220 /* BF * */ { 0 , 0 },
221 /* C0 * */ { 0 , 0 },
222 /* C1 * */ { 0 , 0 },
223 /* C2 * */ { 0 , 0 },
224 /* C3 * */ { 0 , 0 },
225 /* C4 * */ { 0 , 0 },
226 /* C5 * */ { 0 , 0 },
227 /* C6 * */ { 0 , 0 },
228 /* C7 * */ { 0 , 0 },
229 /* C8 * */ { 0 , 0 },
230 /* C9 * */ { 0 , 0 },
231 /* CA * */ { 0 , 0 },
232 /* CB * */ { 0 , 0 },
233 /* CC * */ { 0 , 0 },
234 /* CD * */ { 0 , 0 },
235 /* CE * */ { 0 , 0 },
236 /* CF * */ { 0 , 0 },
237 /* D0 * */ { 0 , 0 },
238 /* D1 * */ { 0 , 0 },
239 /* D2 * */ { 0 , 0 },
240 /* D3 * */ { 0 , 0 },
241 /* D4 * */ { 0 , 0 },
242 /* D5 * */ { 0 , 0 },
243 /* D6 * */ { 0 , 0 },
244 /* D7 * */ { 0 , 0 },
245 /* D8 * */ { 0 , 0 },
246 /* D9 * */ { 0 , 0 },
247 /* DA * */ { 0 , 0 },
248 /* DB * */ { 0 , 0 },
249 /* DC * */ { 0 , 0 },
250 /* DD * */ { 0 , 0 },
251 /* DE * */ { 0 , 0 },
252 /* DF * */ { 0 , 0 },
253 /* E0 * */ { 0 , 0 },
254 /* E1 * */ { 0 , 0 },
255 /* E2 * */ { 0 , 0 },
256 /* E3 * */ { 0 , 0 },
257 /* E4 * */ { 0 , 0 },
258 /* E5 * */ { 0 , 0 },
259 /* E6 * */ { 0 , 0 },
260 /* E7 * */ { 0 , 0 },
261 /* E8 * */ { 0 , 0 },
262 /* E9 * */ { 0 , 0 },
263 /* EA * */ { 0 , 0 },
264 /* EB * */ { 0 , 0 },
265 /* EC * */ { 0 , 0 },
266 /* ED * */ { 0 , 0 },
267 /* EE * */ { 0 , 0 },
268 /* EF * */ { 0 , 0 },
269 /* F0 * */ { 0 , 0 },
270 /* F1 * */ { 0 , 0 },
271 /* F2 * */ { 0 , 0 },
272 /* F3 * */ { 0 , 0 },
273 /* F4 * */ { 0 , 0 },
274 /* F5 * */ { 0 , 0 },
275 /* F6 * */ { 0 , 0 },
276 /* F7 * */ { 0 , 0 },
277 /* F8 * */ { 0 , 0 },
278 /* F9 * */ { 0 , 0 },
279 /* FA * */ { 0 , 0 },
280 /* FB * */ { 0 , 0 },
281 /* FC * */ { 0 , 0 },
282 /* FD * */ { 0 , 0 },
283 /* FE * */ { 0 , 0 },
284 /* FF * */ { 0 , 0 },
294 } __attribute__ ((packed
)) header
= {
295 .has_shift
= HAS_SHIFT
,
296 .has_altcap
= HAS_ALTCAP
,
300 fwrite(&header
,1,sizeof(header
),stdout
);
301 fwrite(KEYBOARD_LAYOUT
,1,sizeof(KEYBOARD_LAYOUT
),stdout
);