1 /* $OpenBSD: sunkbdmap.c,v 1.1 2005/05/14 15:25:20 miod Exp $ */ 2 3 /* 4 * Copyright (c) 2002, 2003 Miodrag Vallat. 5 * Copyright (c) 2002 Jason L. Wright (jason@thought.net) 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 20 * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 21 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 23 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 25 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 26 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 27 * POSSIBILITY OF SUCH DAMAGE. 28 * 29 * Effort sponsored in part by the Defense Advanced Research Projects 30 * Agency (DARPA) and Air Force Research Laboratory, Air Force 31 * Materiel Command, USAF, under agreement number F30602-01-2-0537. 32 * 33 */ 34 35 #include <sys/param.h> 36 #include <sys/systm.h> 37 #include <sys/device.h> 38 #include <sys/kernel.h> 39 #include <sys/timeout.h> 40 41 #include <dev/wscons/wsconsio.h> 42 #include <dev/wscons/wskbdvar.h> 43 #include <dev/wscons/wsksymdef.h> 44 #include <dev/wscons/wsksymvar.h> 45 46 #include <dev/sun/sunkbdreg.h> 47 #include <dev/sun/sunkbdvar.h> 48 49 #define KC(n) KS_KEYCODE(n) 50 51 /* 000/021/022 US English type 4/5 keyboard */ 52 const keysym_t sunkbd_keydesc_us[] = { 53 KC(0x01), KS_Cmd, 54 KC(0x02), KS_Cmd_BrightnessDown, 55 KC(0x03), KS_Again, 56 KC(0x04), KS_Cmd_BrightnessUp, 57 KC(0x05), KS_f1, 58 KC(0x06), KS_f2, 59 KC(0x07), KS_f10, 60 KC(0x08), KS_f3, 61 KC(0x09), KS_f11, 62 KC(0x0a), KS_f4, 63 KC(0x0b), KS_f12, 64 KC(0x0c), KS_f5, 65 KC(0x0d), KS_Alt_R, 66 KC(0x0e), KS_f6, 67 KC(0x10), KS_f7, 68 KC(0x11), KS_f8, 69 KC(0x12), KS_f9, 70 KC(0x13), KS_Alt_L, 71 KC(0x14), KS_Up, 72 KC(0x15), KS_Pause, 73 KC(0x16), KS_Print_Screen, 74 KC(0x17), KS_Hold_Screen, 75 KC(0x18), KS_Left, 76 KC(0x19), KS_Props, 77 KC(0x1a), KS_Undo, 78 KC(0x1b), KS_Down, 79 KC(0x1c), KS_Right, 80 KC(0x1d), KS_Escape, 81 KC(0x1e), KS_1, KS_exclam, 82 KC(0x1f), KS_2, KS_at, 83 KC(0x20), KS_3, KS_numbersign, 84 KC(0x21), KS_4, KS_dollar, 85 KC(0x22), KS_5, KS_percent, 86 KC(0x23), KS_6, KS_asciicircum, 87 KC(0x24), KS_7, KS_ampersand, 88 KC(0x25), KS_8, KS_asterisk, 89 KC(0x26), KS_9, KS_parenleft, 90 KC(0x27), KS_0, KS_parenright, 91 KC(0x28), KS_minus, KS_underscore, 92 KC(0x29), KS_equal, KS_plus, 93 KC(0x2a), KS_grave, KS_asciitilde, 94 KC(0x2b), KS_Delete, 95 KC(0x2c), KS_Insert, 96 KC(0x2d), KS_KP_Equal, 97 KC(0x2e), KS_KP_Divide, 98 KC(0x2f), KS_KP_Multiply, 99 KC(0x31), KS_Front, 100 KC(0x32), KS_KP_Delete, KS_KP_Decimal, 101 KC(0x33), KS_Copy, 102 KC(0x34), KS_Home, 103 KC(0x35), KS_Tab, 104 KC(0x36), KS_q, 105 KC(0x37), KS_w, 106 KC(0x38), KS_e, 107 KC(0x39), KS_r, 108 KC(0x3a), KS_t, 109 KC(0x3b), KS_y, 110 KC(0x3c), KS_u, 111 KC(0x3d), KS_i, 112 KC(0x3e), KS_o, 113 KC(0x3f), KS_p, 114 KC(0x40), KS_bracketleft, KS_braceleft, 115 KC(0x41), KS_bracketright,KS_braceright, 116 KC(0x42), KS_Delete, 117 KC(0x43), KS_Multi_key, 118 KC(0x44), KS_KP_Home, KS_KP_7, 119 KC(0x45), KS_KP_Up, KS_KP_8, 120 KC(0x46), KS_KP_Prior, KS_KP_9, 121 KC(0x47), KS_KP_Subtract, 122 KC(0x48), KS_Open, 123 KC(0x49), KS_Paste, 124 KC(0x4a), KS_End, 125 KC(0x4c), KS_Control_L, 126 KC(0x4d), KS_Cmd_Debugger, KS_a, 127 KC(0x4e), KS_s, 128 KC(0x4f), KS_d, 129 KC(0x50), KS_f, 130 KC(0x51), KS_g, 131 KC(0x52), KS_h, 132 KC(0x53), KS_j, 133 KC(0x54), KS_k, 134 KC(0x55), KS_l, 135 KC(0x56), KS_semicolon, KS_colon, 136 KC(0x57), KS_apostrophe, KS_quotedbl, 137 KC(0x58), KS_backslash, KS_bar, 138 KC(0x59), KS_Return, 139 KC(0x5a), KS_KP_Enter, 140 KC(0x5b), KS_KP_Left, KS_KP_4, 141 KC(0x5c), KS_KP_Begin, KS_KP_5, 142 KC(0x5d), KS_KP_Right, KS_KP_6, 143 KC(0x5e), KS_KP_Insert, KS_KP_0, 144 KC(0x5f), KS_Find, 145 KC(0x60), KS_Prior, 146 KC(0x61), KS_Cut, 147 KC(0x62), KS_Num_Lock, 148 KC(0x63), KS_Shift_L, 149 KC(0x64), KS_z, 150 KC(0x65), KS_x, 151 KC(0x66), KS_c, 152 KC(0x67), KS_v, 153 KC(0x68), KS_b, 154 KC(0x69), KS_n, 155 KC(0x6a), KS_m, 156 KC(0x6b), KS_comma, KS_less, 157 KC(0x6c), KS_period, KS_greater, 158 KC(0x6d), KS_slash, KS_question, 159 KC(0x6e), KS_Shift_R, 160 KC(0x6f), KS_Linefeed, 161 KC(0x70), KS_KP_End, KS_KP_1, 162 KC(0x71), KS_KP_Down, KS_KP_2, 163 KC(0x72), KS_KP_Next, KS_KP_3, 164 KC(0x76), KS_Help, 165 KC(0x77), KS_Caps_Lock, 166 KC(0x78), KS_Meta_L, 167 KC(0x79), KS_space, 168 KC(0x7a), KS_Meta_R, 169 KC(0x7b), KS_Next, 170 KC(0x7d), KS_KP_Add, 171 }; 172 173 /* 002 French/Belgian type 4 keyboard */ 174 const keysym_t sunkbd_keydesc_befr[] = { 175 KC(0x0d), KS_Caps_Lock, 176 KC(0x0f), KS_bracketright,KS_braceright, KS_guillemotright, 177 KC(0x1e), KS_ampersand, KS_1, 178 KC(0x1f), KS_eacute, KS_2, KS_twosuperior, 179 KC(0x20), KS_quotedbl, KS_3, KS_threesuperior, 180 KC(0x21), KS_apostrophe, KS_4, 181 KC(0x22), KS_parenleft, KS_5, 182 KC(0x23), KS_section, KS_6, 183 KC(0x24), KS_egrave, KS_7, 184 KC(0x25), KS_exclam, KS_8, KS_sterling, 185 KC(0x26), KS_ccedilla, KS_9, KS_backslash, 186 KC(0x27), KS_agrave, KS_0, 187 KC(0x28), KS_parenright, KS_degree, KS_asciitilde, 188 KC(0x29), KS_minus, KS_underscore, KS_numbersign, 189 KC(0x2a), KS_asterisk, KS_bar, KS_currency, 190 KC(0x36), KS_a, 191 KC(0x37), KS_z, 192 KC(0x40), KS_dead_circumflex,KS_dead_diaeresis, 193 KC(0x41), KS_grave, KS_dollar, KS_at, 194 KC(0x4d), KS_Cmd_Debugger, KS_q, 195 KC(0x56), KS_m, KS_M, KS_mu, 196 KC(0x57), KS_ugrave, KS_percent, 197 KC(0x58), KS_bracketleft, KS_braceleft, KS_guillemotleft, 198 KC(0x64), KS_w, 199 KC(0x6a), KS_comma, KS_question, 200 KC(0x6b), KS_semicolon, KS_period, 201 KC(0x6c), KS_colon, KS_slash, 202 KC(0x6d), KS_equal, KS_plus, 203 KC(0x77), KS_Mode_switch, 204 KC(0x7c), KS_less, KS_greater, 205 }; 206 207 /* 023 French type 5 keyboard */ 208 const keysym_t sunkbd5_keydesc_fr[] = { 209 KC(0x0d), KS_Mode_switch, 210 KC(0x1e), KS_ampersand, KS_1, 211 KC(0x1f), KS_eacute, KS_2, KS_asciitilde, 212 KC(0x20), KS_quotedbl, KS_3, KS_numbersign, 213 KC(0x21), KS_apostrophe, KS_4, KS_braceleft, 214 KC(0x22), KS_parenleft, KS_5, KS_bracketleft, 215 KC(0x23), KS_minus, KS_6, KS_bar, 216 KC(0x24), KS_egrave, KS_7, KS_grave, 217 KC(0x25), KS_underscore, KS_8, KS_backslash, 218 KC(0x26), KS_ccedilla, KS_9, KS_asciicircum, 219 KC(0x27), KS_agrave, KS_0, KS_at, 220 KC(0x28), KS_parenright, KS_degree, KS_bracketright, 221 KC(0x29), KS_equal, KS_plus, KS_braceright, 222 KC(0x2a), KS_twosuperior, 223 KC(0x36), KS_a, 224 KC(0x37), KS_z, 225 KC(0x40), KS_dead_circumflex,KS_dead_diaeresis, 226 KC(0x41), KS_dollar, KS_sterling, KS_currency, 227 KC(0x4d), KS_Cmd_Debugger, KS_q, 228 KC(0x56), KS_m, 229 KC(0x57), KS_ugrave, KS_percent, 230 KC(0x58), KS_asterisk, KS_mu, 231 KC(0x64), KS_w, 232 KC(0x6a), KS_comma, KS_question, 233 KC(0x6b), KS_semicolon, KS_period, 234 KC(0x6c), KS_colon, KS_slash, 235 KC(0x6d), KS_exclam, KS_section, 236 KC(0x7c), KS_less, KS_greater, 237 }; 238 239 /* 004 Danish type 4 keyboard */ 240 const keysym_t sunkbd_keydesc_dk[] = { 241 KC(0x0d), KS_Multi_key, 242 KC(0x0f), KS_asciitilde, KS_asciicircum, 243 KC(0x1f), KS_2, KS_quotedbl, KS_at, 244 KC(0x20), KS_3, KS_numbersign, KS_sterling, 245 KC(0x21), KS_4, KS_currency, KS_dollar, 246 KC(0x23), KS_6, KS_ampersand, 247 KC(0x24), KS_7, KS_slash, KS_braceleft, 248 KC(0x25), KS_8, KS_parenleft, KS_bracketleft, 249 KC(0x26), KS_9, KS_parenright, KS_bracketright, 250 KC(0x27), KS_0, KS_equal, KS_braceright, 251 KC(0x28), KS_plus, KS_question, 252 KC(0x29), KS_dead_acute, KS_dead_grave, KS_bar, 253 KC(0x2a), KS_apostrophe, KS_asterisk, KS_grave, 254 KC(0x40), KS_aring, 255 KC(0x41), KS_dead_diaeresis,KS_dead_circumflex,KS_dead_tilde, 256 KC(0x43), KS_Mode_switch, 257 KC(0x4c), KS_Caps_Lock, 258 KC(0x56), KS_ae, 259 KC(0x57), KS_oslash, 260 KC(0x58), KS_onehalf, KS_section, 261 KC(0x6b), KS_comma, KS_semicolon, 262 KC(0x6c), KS_period, KS_colon, 263 KC(0x6d), KS_minus, KS_underscore, 264 KC(0x77), KS_Control_L, 265 KC(0x7c), KS_less, KS_greater, KS_backslash, 266 }; 267 268 /* 024 Danish type 5 keyboard */ 269 const keysym_t sunkbd5_keydesc_dk[] = { 270 KC(0x0d), KS_Mode_switch, 271 KC(0x1f), KS_2, KS_quotedbl, KS_at, 272 KC(0x20), KS_3, KS_numbersign, KS_sterling, 273 KC(0x21), KS_4, KS_currency, KS_dollar, 274 KC(0x22), KS_5, KS_percent, KS_asciitilde, 275 KC(0x23), KS_6, KS_ampersand, KS_asciicircum, 276 KC(0x24), KS_7, KS_slash, KS_braceleft, 277 KC(0x25), KS_8, KS_parenleft, KS_bracketleft, 278 KC(0x26), KS_9, KS_parenright, KS_bracketright, 279 KC(0x27), KS_0, KS_equal, KS_braceright, 280 KC(0x28), KS_plus, KS_question, 281 KC(0x29), KS_dead_acute, KS_dead_grave, KS_bar, 282 KC(0x2a), KS_onehalf, KS_asterisk, KS_grave, 283 KC(0x40), KS_aring, 284 KC(0x41), KS_dead_diaeresis,KS_dead_circumflex,KS_dead_tilde, 285 KC(0x56), KS_ae, 286 KC(0x57), KS_oslash, 287 KC(0x58), KS_backslash, KS_asterisk, KS_grave, 288 KC(0x6b), KS_comma, KS_semicolon, 289 KC(0x6c), KS_period, KS_colon, 290 KC(0x6d), KS_minus, KS_underscore, 291 KC(0x7c), KS_less, KS_greater, KS_backslash, 292 }; 293 294 /* 005 German type 4 keyboard */ 295 const keysym_t sunkbd_keydesc_de[] = { 296 KC(0x0d), KS_Alt_L, 297 KC(0x0f), KS_bracketright,KS_braceright, KS_guillemotright, 298 KC(0x13), KS_Mode_switch, 299 KC(0x1f), KS_2, KS_quotedbl, KS_twosuperior, 300 KC(0x20), KS_3, KS_section, KS_threesuperior, 301 KC(0x23), KS_6, KS_ampersand, 302 KC(0x24), KS_7, KS_slash, KS_degree, 303 KC(0x25), KS_8, KS_parenleft, KS_grave, 304 KC(0x26), KS_9, KS_parenright, KS_apostrophe, 305 KC(0x27), KS_0, KS_equal, KS_bar, 306 KC(0x28), KS_ssharp, KS_question, KS_backslash, 307 KC(0x29), KS_dead_acute, KS_dead_grave, 308 KC(0x2a), KS_numbersign, KS_asciicircum, KS_at, 309 KC(0x3b), KS_z, 310 KC(0x40), KS_udiaeresis, 311 KC(0x41), KS_plus, KS_multiply, KS_asciitilde, 312 KC(0x4c), KS_Caps_Lock, 313 KC(0x56), KS_odiaeresis, 314 KC(0x57), KS_adiaeresis, 315 KC(0x58), KS_bracketleft, KS_braceleft, KS_guillemotleft, 316 KC(0x64), KS_y, 317 KC(0x6a), KS_m, KS_M, KS_mu, 318 KC(0x6b), KS_comma, KS_semicolon, 319 KC(0x6c), KS_period, KS_colon, 320 KC(0x6d), KS_minus, KS_underscore, 321 KC(0x77), KS_Control_L, 322 KC(0x7c), KS_less, KS_greater, 323 }; 324 325 /* 025 German type 5 keyboard */ 326 const keysym_t sunkbd5_keydesc_de[] = { 327 KC(0x0d), KS_Mode_switch, 328 KC(0x1f), KS_2, KS_quotedbl, KS_twosuperior, 329 KC(0x20), KS_3, KS_section, KS_threesuperior, 330 KC(0x23), KS_6, KS_ampersand, 331 KC(0x24), KS_7, KS_slash, KS_braceleft, 332 KC(0x25), KS_8, KS_parenleft, KS_bracketleft, 333 KC(0x26), KS_9, KS_parenright, KS_bracketright, 334 KC(0x27), KS_0, KS_equal, KS_braceright, 335 KC(0x28), KS_ssharp, KS_question, KS_backslash, 336 KC(0x29), KS_dead_acute, KS_dead_grave, 337 KC(0x2a), KS_asciicircum, KS_degree, 338 KC(0x36), KS_q, KS_Q, KS_at, 339 KC(0x3b), KS_z, 340 KC(0x40), KS_udiaeresis, 341 KC(0x41), KS_plus, KS_multiply, KS_asciitilde, 342 KC(0x56), KS_odiaeresis, 343 KC(0x57), KS_adiaeresis, 344 KC(0x58), KS_numbersign, KS_apostrophe, KS_grave, 345 KC(0x64), KS_y, 346 KC(0x6a), KS_m, KS_M, KS_mu, 347 KC(0x6b), KS_comma, KS_semicolon, 348 KC(0x6c), KS_period, KS_colon, 349 KC(0x6d), KS_minus, KS_underscore, 350 KC(0x7c), KS_less, KS_greater, KS_bar, 351 }; 352 353 /* 006 Italian type 4 keyboard */ 354 const keysym_t sunkbd_keydesc_it[] = { 355 KC(0x0d), KS_Mode_switch, 356 KC(0x0f), KS_bracketright,KS_braceright, KS_guillemotright, 357 KC(0x1f), KS_2, KS_quotedbl, KS_twosuperior, 358 KC(0x20), KS_3, KS_sterling, KS_threesuperior, 359 KC(0x23), KS_6, KS_ampersand, KS_notsign, 360 KC(0x24), KS_7, KS_slash, 361 KC(0x25), KS_8, KS_parenleft, 362 KC(0x26), KS_9, KS_parenright, KS_backslash, 363 KC(0x27), KS_0, KS_equal, KS_bar, 364 KC(0x28), KS_apostrophe, KS_question, KS_grave, 365 KC(0x29), KS_igrave, KS_asciicircum, 366 KC(0x2a), KS_ugrave, KS_section, 367 KC(0x40), KS_egrave, KS_eacute, 368 KC(0x41), KS_plus, KS_asterisk, KS_asciitilde, 369 KC(0x4c), KS_Caps_Lock, 370 KC(0x56), KS_ograve, KS_ccedilla, KS_at, 371 KC(0x57), KS_agrave, KS_degree, KS_numbersign, 372 KC(0x58), KS_bracketleft, KS_braceleft, KS_guillemotleft, 373 KC(0x6b), KS_comma, KS_semicolon, 374 KC(0x6c), KS_period, KS_colon, 375 KC(0x6d), KS_minus, KS_underscore, 376 KC(0x77), KS_Control_L, 377 KC(0x7c), KS_less, KS_greater, 378 }; 379 380 /* 026 Italian type 5 keyboard */ 381 const keysym_t sunkbd5_keydesc_it[] = { 382 KC(0x0d), KS_Mode_switch, 383 KC(0x1f), KS_2, KS_quotedbl, 384 KC(0x20), KS_3, KS_sterling, 385 KC(0x23), KS_6, KS_ampersand, 386 KC(0x24), KS_7, KS_slash, 387 KC(0x25), KS_8, KS_parenleft, KS_braceleft, 388 KC(0x26), KS_9, KS_parenright, KS_braceright, 389 KC(0x27), KS_0, KS_equal, 390 KC(0x28), KS_apostrophe, KS_question, KS_grave, 391 KC(0x29), KS_igrave, KS_asciicircum, 392 KC(0x2a), KS_backslash, KS_bar, 393 KC(0x40), KS_egrave, KS_eacute, KS_bracketleft, 394 KC(0x41), KS_plus, KS_asterisk, KS_bracketright, 395 KC(0x56), KS_ograve, KS_ccedilla, KS_at, 396 KC(0x57), KS_agrave, KS_degree, KS_numbersign, 397 KC(0x58), KS_ugrave, KS_section, KS_asciitilde, 398 KC(0x6b), KS_comma, KS_semicolon, 399 KC(0x6c), KS_period, KS_colon, 400 KC(0x6d), KS_minus, KS_underscore, 401 KC(0x7c), KS_less, KS_greater, 402 }; 403 404 /* 007 Dutch type 4 keyboard */ 405 const keysym_t sunkbd_keydesc_nl[] = { 406 KC(0x0d), KS_Caps_Lock, 407 KC(0x0f), KS_backslash, KS_bar, 408 KC(0x1e), KS_1, KS_exclam, KS_onesuperior, 409 KC(0x1f), KS_2, KS_quotedbl, KS_twosuperior, 410 KC(0x20), KS_3, KS_numbersign, KS_threesuperior, 411 KC(0x21), KS_4, KS_dollar, KS_onequarter, 412 KC(0x22), KS_5, KS_percent, KS_onehalf, 413 KC(0x23), KS_6, KS_ampersand, KS_threequarters, 414 KC(0x24), KS_7, KS_underscore, KS_sterling, 415 KC(0x25), KS_8, KS_parenleft, KS_braceleft, 416 KC(0x26), KS_9, KS_parenright, KS_braceright, 417 KC(0x27), KS_0, KS_apostrophe, KS_grave, 418 KC(0x28), KS_slash, KS_question, 419 KC(0x29), KS_degree, KS_dead_tilde, KS_dead_abovering, 420 KC(0x2a), KS_less, KS_greater, 421 KC(0x40), KS_dead_diaeresis,KS_dead_circumflex, 422 KC(0x41), KS_asterisk, KS_brokenbar, KS_asciitilde, 423 KC(0x4e), KS_s, KS_S, KS_ssharp, 424 KC(0x56), KS_plus, KS_plusminus, 425 KC(0x57), KS_dead_acute, KS_dead_grave, 426 KC(0x58), KS_at, KS_section, KS_notsign, 427 KC(0x64), KS_z, KS_Z, KS_guillemotleft, 428 KC(0x65), KS_x, KS_X, KS_guillemotright, 429 KC(0x66), KS_c, KS_C, KS_cent, 430 KC(0x6a), KS_m, KS_M, KS_mu, 431 KC(0x6b), KS_comma, KS_semicolon, 432 KC(0x6c), KS_period, KS_colon, 433 KC(0x6d), KS_minus, KS_equal, 434 KC(0x77), KS_Mode_switch, 435 KC(0x7d), KS_bracketright,KS_bracketleft, 436 }; 437 438 /* 027 Dutch type 5 keyboard */ 439 const keysym_t sunkbd5_keydesc_nl[] = { 440 KC(0x0d), KS_Mode_switch, 441 KC(0x1e), KS_1, KS_exclam, KS_onesuperior, 442 KC(0x1f), KS_2, KS_quotedbl, KS_twosuperior, 443 KC(0x20), KS_3, KS_numbersign, KS_threesuperior, 444 KC(0x21), KS_4, KS_dollar, KS_onequarter, 445 KC(0x22), KS_5, KS_percent, KS_onehalf, 446 KC(0x23), KS_6, KS_ampersand, KS_threequarters, 447 KC(0x24), KS_7, KS_underscore, KS_sterling, 448 KC(0x25), KS_8, KS_parenleft, KS_braceleft, 449 KC(0x26), KS_9, KS_parenright, KS_braceright, 450 KC(0x27), KS_0, KS_apostrophe, KS_grave, 451 KC(0x28), KS_slash, KS_question, KS_backslash, 452 KC(0x29), KS_degree, KS_dead_tilde, KS_dead_abovering, 453 KC(0x2a), KS_at, KS_section, KS_notsign, 454 KC(0x40), KS_dead_diaeresis,KS_dead_circumflex, 455 KC(0x41), KS_asterisk, KS_bar, KS_asciitilde, 456 KC(0x4e), KS_s, KS_S, KS_ssharp, 457 KC(0x56), KS_plus, KS_plusminus, 458 KC(0x57), KS_dead_acute, KS_dead_grave, 459 KC(0x58), KS_less, KS_greater, KS_asciicircum, 460 KC(0x64), KS_z, KS_Z, KS_guillemotleft, 461 KC(0x65), KS_x, KS_X, KS_guillemotright, 462 KC(0x66), KS_c, KS_C, KS_cent, 463 KC(0x6a), KS_m, KS_M, KS_mu, 464 KC(0x6b), KS_comma, KS_semicolon, 465 KC(0x6c), KS_period, KS_colon, KS_hyphen, 466 KC(0x6d), KS_minus, KS_equal, 467 KC(0x7d), KS_bracketright,KS_bracketleft, KS_brokenbar, 468 }; 469 470 /* 008 Norwegian type 4 keyboard */ 471 const keysym_t sunkbd_keydesc_no[] = { 472 KC(0x0d), KS_Mode_switch, 473 KC(0x0f), KS_asciitilde, KS_asciicircum, 474 KC(0x1f), KS_2, KS_quotedbl, KS_at, 475 KC(0x20), KS_3, KS_numbersign, KS_sterling, 476 KC(0x21), KS_4, KS_currency, KS_dollar, 477 KC(0x23), KS_6, KS_ampersand, 478 KC(0x24), KS_7, KS_slash, KS_braceleft, 479 KC(0x25), KS_8, KS_parenleft, KS_bracketleft, 480 KC(0x26), KS_9, KS_parenright, KS_bracketright, 481 KC(0x27), KS_0, KS_equal, KS_braceright, 482 KC(0x28), KS_plus, KS_question, 483 KC(0x29), KS_backslash, KS_dead_grave, KS_dead_acute, 484 KC(0x2a), KS_apostrophe, KS_asterisk, KS_grave, 485 KC(0x40), KS_aring, 486 KC(0x41), KS_dead_diaeresis,KS_dead_circumflex,KS_dead_tilde, 487 KC(0x4c), KS_Caps_Lock, 488 KC(0x56), KS_oslash, 489 KC(0x57), KS_ae, 490 KC(0x58), KS_bar, KS_section, 491 KC(0x6b), KS_comma, KS_semicolon, 492 KC(0x6c), KS_period, KS_colon, 493 KC(0x6d), KS_minus, KS_underscore, 494 KC(0x77), KS_Control_L, 495 KC(0x7d), KS_less, KS_greater, 496 }; 497 498 /* 028 Norwegian type 5 keyboard */ 499 const keysym_t sunkbd5_keydesc_no[] = { 500 KC(0x0d), KS_Mode_switch, 501 KC(0x1f), KS_2, KS_quotedbl, KS_at, 502 KC(0x20), KS_3, KS_numbersign, KS_sterling, 503 KC(0x21), KS_4, KS_currency, KS_dollar, 504 KC(0x22), KS_5, KS_percent, KS_asciitilde, 505 KC(0x23), KS_6, KS_ampersand, KS_asciicircum, 506 KC(0x24), KS_7, KS_slash, KS_braceleft, 507 KC(0x25), KS_8, KS_parenleft, KS_bracketleft, 508 KC(0x26), KS_9, KS_parenright, KS_bracketright, 509 KC(0x27), KS_0, KS_equal, KS_braceright, 510 KC(0x28), KS_plus, KS_question, 511 KC(0x29), KS_backslash, KS_dead_grave, KS_dead_acute, 512 KC(0x2a), KS_bar, KS_section, 513 KC(0x40), KS_aring, 514 KC(0x41), KS_dead_diaeresis,KS_dead_circumflex,KS_dead_tilde, 515 KC(0x56), KS_oslash, 516 KC(0x57), KS_ae, 517 KC(0x58), KS_apostrophe, KS_asterisk, KS_grave, 518 KC(0x6b), KS_comma, KS_semicolon, 519 KC(0x6c), KS_period, KS_colon, 520 KC(0x6d), KS_minus, KS_underscore, 521 KC(0x7d), KS_less, KS_greater, 522 }; 523 524 /* 009 Portuguese type 4 keyboard */ 525 const keysym_t sunkbd_keydesc_pt[] = { 526 KC(0x0d), KS_Mode_switch, 527 KC(0x0f), KS_bracketright,KS_braceright, KS_guillemotright, 528 KC(0x1f), KS_2, KS_quotedbl, KS_at, 529 KC(0x20), KS_3, KS_numbersign, KS_sterling, 530 KC(0x21), KS_4, KS_dollar, KS_section, 531 KC(0x23), KS_6, KS_ampersand, KS_notsign, 532 KC(0x24), KS_7, KS_slash, 533 KC(0x25), KS_8, KS_parenleft, 534 KC(0x26), KS_9, KS_parenright, KS_backslash, 535 KC(0x27), KS_0, KS_equal, KS_bar, 536 KC(0x28), KS_apostrophe, KS_question, KS_grave, 537 KC(0x29), KS_exclamdown, KS_questiondown, 538 KC(0x2a), KS_dead_tilde, KS_dead_circumflex,KS_asciicircum, 539 KC(0x40), KS_dead_diaeresis,KS_asterisk, KS_plus, 540 KC(0x41), KS_dead_acute, KS_dead_grave, KS_asciitilde, 541 KC(0x4c), KS_Caps_Lock, 542 KC(0x56), KS_ccedilla, 543 KC(0x57), KS_masculine, KS_ordfeminine, 544 KC(0x58), KS_bracketleft, KS_braceleft, KS_guillemotleft, 545 KC(0x6b), KS_comma, KS_semicolon, 546 KC(0x6c), KS_period, KS_colon, 547 KC(0x6d), KS_minus, KS_underscore, 548 KC(0x77), KS_Control_L, 549 KC(0x7d), KS_less, KS_greater, 550 }; 551 552 /* 029 Portuguese type 4 keyboard */ 553 const keysym_t sunkbd5_keydesc_pt[] = { 554 KC(0x0d), KS_Mode_switch, 555 KC(0x1f), KS_2, KS_quotedbl, KS_at, 556 KC(0x20), KS_3, KS_numbersign, KS_sterling, 557 KC(0x21), KS_4, KS_dollar, KS_section, 558 KC(0x22), KS_5, KS_percent, KS_asciitilde, 559 KC(0x23), KS_6, KS_ampersand, KS_asciicircum, 560 KC(0x24), KS_7, KS_slash, KS_braceleft, 561 KC(0x25), KS_8, KS_parenleft, KS_bracketleft, 562 KC(0x26), KS_9, KS_parenright, KS_bracketright, 563 KC(0x27), KS_0, KS_equal, KS_braceright, 564 KC(0x28), KS_apostrophe, KS_question, KS_grave, 565 KC(0x29), KS_guillemotleft,KS_guillemotright, 566 KC(0x2a), KS_backslash, KS_bar, 567 KC(0x40), KS_plus, KS_asterisk, KS_dead_diaeresis, 568 KC(0x41), KS_dead_acute, KS_dead_grave, 569 KC(0x56), KS_ccedilla, 570 KC(0x57), KS_masculine, KS_ordfeminine, 571 KC(0x58), KS_dead_tilde, KS_dead_circumflex, 572 KC(0x6b), KS_comma, KS_semicolon, 573 KC(0x6c), KS_period, KS_colon, 574 KC(0x6d), KS_minus, KS_underscore, 575 KC(0x7d), KS_less, KS_greater, 576 }; 577 578 /* 00a Spanish type 4 keyboard */ 579 const keysym_t sunkbd_keydesc_es[] = { 580 KC(0x0d), KS_Mode_switch, 581 KC(0x0f), KS_bracketright,KS_braceright, KS_guillemotright, 582 KC(0x1f), KS_2, KS_quotedbl, KS_at, 583 KC(0x20), KS_3, KS_hyphen, KS_numbersign, 584 KC(0x22), KS_5, KS_percent, KS_degree, 585 KC(0x23), KS_6, KS_ampersand, KS_notsign, 586 KC(0x24), KS_7, KS_slash, 587 KC(0x25), KS_8, KS_parenleft, 588 KC(0x26), KS_9, KS_parenright, KS_backslash, 589 KC(0x27), KS_0, KS_equal, KS_bar, 590 KC(0x28), KS_apostrophe, KS_question, KS_grave, 591 KC(0x29), KS_exclamdown, KS_questiondown, 592 KC(0x2a), KS_ccedilla, 593 KC(0x3e), KS_o, KS_O, KS_masculine, 594 KC(0x40), KS_dead_grave, KS_dead_circumflex,KS_asciicircum, 595 KC(0x41), KS_plus, KS_asterisk, KS_asciitilde, 596 KC(0x4c), KS_Caps_Lock, 597 KC(0x4d), KS_a, KS_A, KS_ordfeminine, 598 KC(0x56), KS_ntilde, 599 KC(0x57), KS_dead_acute, KS_dead_diaeresis, 600 KC(0x58), KS_bracketleft, KS_braceleft, KS_guillemotleft, 601 KC(0x6b), KS_comma, KS_semicolon, 602 KC(0x6c), KS_period, KS_colon, 603 KC(0x6d), KS_minus, KS_underscore, 604 KC(0x77), KS_Control_L, 605 KC(0x7d), KS_less, KS_greater, 606 }; 607 608 /* 02a Spanish type 5 keyboard */ 609 const keysym_t sunkbd5_keydesc_es[] = { 610 KC(0x0d), KS_Mode_switch, 611 KC(0x1e), KS_1, KS_exclam, KS_bar, 612 KC(0x1f), KS_2, KS_quotedbl, KS_at, 613 KC(0x20), KS_3, KS_hyphen, KS_numbersign, 614 KC(0x21), KS_4, KS_dollar, KS_asciicircum, 615 KC(0x22), KS_5, KS_percent, KS_asciitilde, 616 KC(0x23), KS_6, KS_ampersand, KS_notsign, 617 KC(0x24), KS_7, KS_slash, 618 KC(0x25), KS_8, KS_parenleft, 619 KC(0x26), KS_9, KS_parenright, 620 KC(0x27), KS_0, KS_equal, 621 KC(0x28), KS_apostrophe, KS_question, KS_grave, 622 KC(0x29), KS_exclamdown, KS_questiondown, 623 KC(0x2a), KS_masculine, KS_ordfeminine, KS_backslash, 624 KC(0x40), KS_dead_grave, KS_dead_circumflex,KS_bracketleft, 625 KC(0x41), KS_plus, KS_asterisk, KS_bracketright, 626 KC(0x56), KS_ntilde, 627 KC(0x57), KS_dead_acute, KS_dead_diaeresis,KS_braceleft, 628 KC(0x58), KS_ccedilla, KS_Ccedilla, KS_braceright, 629 KC(0x6b), KS_comma, KS_semicolon, 630 KC(0x6c), KS_period, KS_colon, 631 KC(0x6d), KS_minus, KS_underscore, 632 KC(0x7d), KS_less, KS_greater, 633 }; 634 635 /* 00b Swedish/Finnish type 4 keyboard */ 636 const keysym_t sunkbd_keydesc_sv[] = { 637 KC(0x0d), KS_Multi_key, 638 KC(0x0f), KS_asciitilde, KS_asciicircum, 639 KC(0x1f), KS_2, KS_quotedbl, KS_at, 640 KC(0x20), KS_3, KS_numbersign, KS_sterling, 641 KC(0x21), KS_4, KS_currency, KS_dollar, 642 KC(0x23), KS_6, KS_ampersand, 643 KC(0x24), KS_7, KS_slash, KS_braceleft, 644 KC(0x25), KS_8, KS_parenleft, KS_bracketleft, 645 KC(0x26), KS_9, KS_parenright, KS_bracketright, 646 KC(0x27), KS_0, KS_equal, KS_braceright, 647 KC(0x28), KS_plus, KS_question, KS_backslash, 648 KC(0x29), KS_dead_acute, KS_dead_grave, 649 KC(0x2a), KS_apostrophe, KS_asterisk, KS_grave, 650 KC(0x40), KS_aring, 651 KC(0x41), KS_dead_diaeresis,KS_dead_circumflex,KS_dead_tilde, 652 KC(0x43), KS_Mode_switch, 653 KC(0x4c), KS_Caps_Lock, 654 KC(0x56), KS_odiaeresis, 655 KC(0x57), KS_adiaeresis, 656 KC(0x58), KS_section, KS_onehalf, 657 KC(0x6b), KS_comma, KS_semicolon, 658 KC(0x6c), KS_period, KS_colon, 659 KC(0x6d), KS_minus, KS_underscore, 660 KC(0x77), KS_Control_L, 661 KC(0x7c), KS_less, KS_greater, KS_bar, 662 }; 663 664 const keysym_t sunkbd_keydesc_sv_nodead[] = { 665 KC(0x29), KS_apostrophe, KS_grave, 666 KC(0x41), KS_diaeresis, KS_asciicircum, KS_asciitilde, 667 }; 668 669 /* 02b Swedish type 5 keyboard */ 670 const keysym_t sunkbd5_keydesc_sv[] = { 671 KC(0x0d), KS_Mode_switch, 672 KC(0x0f), KS_asciitilde, KS_asciicircum, 673 KC(0x1f), KS_2, KS_quotedbl, KS_at, 674 KC(0x20), KS_3, KS_numbersign, KS_sterling, 675 KC(0x21), KS_4, KS_currency, KS_dollar, 676 KC(0x23), KS_6, KS_ampersand, 677 KC(0x24), KS_7, KS_slash, KS_braceleft, 678 KC(0x25), KS_8, KS_parenleft, KS_bracketleft, 679 KC(0x26), KS_9, KS_parenright, KS_bracketright, 680 KC(0x27), KS_0, KS_equal, KS_braceright, 681 KC(0x28), KS_plus, KS_question, KS_backslash, 682 KC(0x29), KS_dead_acute, KS_dead_grave, 683 KC(0x2a), KS_section, KS_onehalf, 684 KC(0x40), KS_aring, 685 KC(0x41), KS_dead_diaeresis,KS_dead_circumflex,KS_dead_tilde, 686 KC(0x43), KS_Multi_key, 687 KC(0x4c), KS_Control_L, 688 KC(0x56), KS_odiaeresis, 689 KC(0x57), KS_adiaeresis, 690 KC(0x58), KS_apostrophe, KS_asterisk, KS_grave, 691 KC(0x6b), KS_comma, KS_semicolon, 692 KC(0x6c), KS_period, KS_colon, 693 KC(0x6d), KS_minus, KS_underscore, 694 KC(0x77), KS_Caps_Lock, 695 KC(0x7c), KS_less, KS_greater, KS_bar, 696 }; 697 698 /* 00c Swiss-French type 4 keyboard */ 699 const keysym_t sunkbd_keydesc_sf[] = { 700 KC(0x0d), KS_Multi_key, 701 KC(0x0f), KS_greater, KS_braceright, 702 KC(0x1e), KS_1, KS_plus, KS_exclam, 703 KC(0x1f), KS_2, KS_quotedbl, KS_at, 704 KC(0x20), KS_3, KS_asterisk, KS_numbersign, 705 KC(0x21), KS_4, KS_ccedilla, KS_cent, 706 KC(0x22), KS_5, KS_percent, KS_asciitilde, 707 KC(0x23), KS_6, KS_ampersand, KS_section, 708 KC(0x24), KS_7, KS_slash, KS_bar, 709 KC(0x25), KS_8, KS_parenleft, KS_degree, 710 KC(0x26), KS_9, KS_parenright, KS_backslash, 711 KC(0x27), KS_0, KS_equal, KS_asciicircum, 712 KC(0x28), KS_apostrophe, KS_question, KS_grave, 713 KC(0x29), KS_dead_circumflex,KS_dead_grave, 714 KC(0x2a), KS_dollar, KS_dead_tilde, KS_sterling, 715 KC(0x3b), KS_z, 716 KC(0x40), KS_egrave, KS_udiaeresis, 717 KC(0x41), KS_dead_diaeresis,KS_dead_acute, 718 KC(0x43), KS_Mode_switch, 719 KC(0x4c), KS_Caps_Lock, 720 KC(0x56), KS_eacute, KS_odiaeresis, 721 KC(0x57), KS_agrave, KS_adiaeresis, 722 KC(0x58), KS_less, KS_braceleft, 723 KC(0x64), KS_y, 724 KC(0x6a), KS_m, KS_M, KS_mu, 725 KC(0x6b), KS_comma, KS_semicolon, 726 KC(0x6c), KS_period, KS_colon, 727 KC(0x6d), KS_minus, KS_underscore, 728 KC(0x77), KS_Control_L, 729 KC(0x7c), KS_bracketright,KS_bracketleft, KS_backslash, 730 }; 731 732 /* 02c Swiss-French type 5 keyboard */ 733 const keysym_t sunkbd5_keydesc_sf[] = { 734 KC(0x0d), KS_Mode_switch, 735 KC(0x1e), KS_1, KS_plus, KS_bar, 736 KC(0x1f), KS_2, KS_quotedbl, KS_at, 737 KC(0x20), KS_3, KS_asterisk, KS_numbersign, 738 KC(0x21), KS_4, KS_ccedilla, KS_asciicircum, 739 KC(0x22), KS_5, KS_percent, KS_asciitilde, 740 KC(0x23), KS_6, KS_ampersand, 741 KC(0x24), KS_7, KS_slash, 742 KC(0x25), KS_8, KS_parenleft, 743 KC(0x26), KS_9, KS_parenright, 744 KC(0x27), KS_0, KS_equal, KS_grave, 745 KC(0x28), KS_apostrophe, KS_question, KS_dead_acute, 746 KC(0x29), KS_dead_circumflex,KS_dead_grave,KS_dead_tilde, 747 KC(0x2a), KS_dollar, KS_degree, 748 KC(0x3b), KS_z, 749 KC(0x40), KS_egrave, KS_udiaeresis, KS_bracketleft, 750 KC(0x41), KS_dead_diaeresis,KS_exclam, KS_bracketright, 751 KC(0x56), KS_eacute, KS_odiaeresis, 752 KC(0x57), KS_agrave, KS_adiaeresis, KS_braceleft, 753 KC(0x58), KS_dollar, KS_sterling, KS_braceright, 754 KC(0x64), KS_y, 755 KC(0x6b), KS_comma, KS_semicolon, 756 KC(0x6c), KS_period, KS_colon, 757 KC(0x6d), KS_minus, KS_underscore, 758 KC(0x7c), KS_less, KS_greater, KS_backslash, 759 }; 760 761 /* 00d Swiss-German type 4 keyboard */ 762 const keysym_t sunkbd_keydesc_sg[] = { 763 KC(0x0d), KS_Multi_key, 764 KC(0x0f), KS_greater, KS_braceright, 765 KC(0x1e), KS_1, KS_plus, KS_exclam, 766 KC(0x1f), KS_2, KS_quotedbl, KS_at, 767 KC(0x20), KS_3, KS_asterisk, KS_numbersign, 768 KC(0x21), KS_4, KS_ccedilla, KS_cent, 769 KC(0x22), KS_5, KS_percent, KS_asciitilde, 770 KC(0x23), KS_6, KS_ampersand, KS_section, 771 KC(0x24), KS_7, KS_slash, KS_bar, 772 KC(0x25), KS_8, KS_parenleft, KS_degree, 773 KC(0x26), KS_9, KS_parenright, KS_backslash, 774 KC(0x27), KS_0, KS_equal, KS_asciicircum, 775 KC(0x28), KS_apostrophe, KS_question, KS_grave, 776 KC(0x29), KS_dead_circumflex,KS_dead_grave, 777 KC(0x2a), KS_dollar, KS_dead_tilde, KS_sterling, 778 KC(0x3b), KS_z, 779 KC(0x40), KS_udiaeresis, KS_egrave, 780 KC(0x41), KS_dead_diaeresis,KS_dead_acute, 781 KC(0x43), KS_Mode_switch, 782 KC(0x4c), KS_Caps_Lock, 783 KC(0x56), KS_odiaeresis, KS_eacute, 784 KC(0x57), KS_adiaeresis, KS_agrave, 785 KC(0x58), KS_less, KS_braceleft, 786 KC(0x64), KS_y, 787 KC(0x6a), KS_m, KS_M, KS_mu, 788 KC(0x6b), KS_comma, KS_semicolon, 789 KC(0x6c), KS_period, KS_colon, 790 KC(0x6d), KS_minus, KS_underscore, 791 KC(0x77), KS_Control_L, 792 KC(0x7c), KS_bracketright,KS_bracketleft, KS_backslash, 793 }; 794 795 /* 02d Swiss-German type 5 keyboard */ 796 const keysym_t sunkbd5_keydesc_sg[] = { 797 KC(0x0d), KS_Mode_switch, 798 KC(0x1e), KS_1, KS_plus, KS_bar, 799 KC(0x1f), KS_2, KS_quotedbl, KS_at, 800 KC(0x20), KS_3, KS_asterisk, KS_numbersign, 801 KC(0x21), KS_4, KS_ccedilla, KS_asciicircum, 802 KC(0x22), KS_5, KS_percent, KS_asciitilde, 803 KC(0x23), KS_6, KS_ampersand, 804 KC(0x24), KS_7, KS_slash, 805 KC(0x25), KS_8, KS_parenleft, 806 KC(0x26), KS_9, KS_parenright, 807 KC(0x27), KS_0, KS_equal, KS_grave, 808 KC(0x28), KS_apostrophe, KS_question, KS_dead_acute, 809 KC(0x29), KS_dead_circumflex,KS_dead_grave,KS_dead_tilde, 810 KC(0x2a), KS_dollar, KS_degree, 811 KC(0x3b), KS_z, 812 KC(0x40), KS_udiaeresis, KS_egrave, KS_bracketleft, 813 KC(0x41), KS_dead_diaeresis,KS_exclam, KS_bracketright, 814 KC(0x56), KS_odiaeresis, KS_eacute, 815 KC(0x57), KS_adiaeresis, KS_agrave, KS_braceleft, 816 KC(0x58), KS_dollar, KS_sterling, KS_braceright, 817 KC(0x64), KS_y, 818 KC(0x6b), KS_comma, KS_semicolon, 819 KC(0x6c), KS_period, KS_colon, 820 KC(0x6d), KS_minus, KS_underscore, 821 KC(0x7c), KS_less, KS_greater, KS_backslash, 822 }; 823 824 /* 00e UK English type 4 keyboard */ 825 const keysym_t sunkbd_keydesc_uk[] = { 826 KC(0x1e), KS_1, KS_exclam, KS_bar, 827 KC(0x21), KS_3, KS_sterling, KS_numbersign, 828 KC(0x28), KS_minus, KS_underscore, KS_notsign, 829 KC(0x43), KS_Mode_switch, 830 }; 831 832 /* 02e UK English type 5 keyboard */ 833 const keysym_t sunkbd5_keydesc_uk[] = { 834 KC(0x0d), KS_Mode_switch, 835 KC(0x1f), KS_2, KS_quotedbl, 836 KC(0x20), KS_3, KS_sterling, 837 KC(0x2a), KS_grave, KS_notsign, KS_brokenbar, 838 KC(0x57), KS_apostrophe, KS_at, 839 KC(0x58), KS_numbersign, KS_asciitilde, 840 KC(0x7c), KS_backslash, KS_bar, 841 }; 842 843 /* 031 Japan type 5 keyboard */ 844 const keysym_t sunkbd5_keydesc_jp[] = { 845 KC(0x1f), KS_2, KS_quotedbl, 846 KC(0x23), KS_6, KS_ampersand, 847 KC(0x24), KS_7, KS_apostrophe, 848 KC(0x25), KS_8, KS_parenleft, 849 KC(0x26), KS_9, KS_parenright, 850 KC(0x27), KS_0, 851 KC(0x28), KS_minus, KS_equal, 852 KC(0x29), KS_asciicircum, KS_asciitilde, 853 KC(0x2a), KS_yen, KS_bar, 854 KC(0x40), KS_at, KS_grave, 855 KC(0x41), KS_bracketleft, KS_braceleft, 856 KC(0x56), KS_semicolon, KS_plus, 857 KC(0x57), KS_colon, KS_asterisk, 858 KC(0x58), KS_bracketright,KS_braceright, 859 KC(0x7c), KS_backslash, KS_underscore, 860 }; 861 862 #define KBD_MAP(name, base, map) \ 863 { name, base, sizeof(map)/sizeof(keysym_t), map } 864 865 /* Supported type 4 keyboard layouts */ 866 const struct wscons_keydesc sunkbd_keydesctab[] = { 867 KBD_MAP(KB_US, 0, sunkbd_keydesc_us), 868 KBD_MAP(KB_BE, KB_US, sunkbd_keydesc_befr), 869 KBD_MAP(KB_DE, KB_US, sunkbd_keydesc_de), 870 KBD_MAP(KB_DK, KB_US, sunkbd_keydesc_dk), 871 KBD_MAP(KB_ES, KB_US, sunkbd_keydesc_es), 872 KBD_MAP(KB_FR, KB_US, sunkbd_keydesc_befr), 873 KBD_MAP(KB_IT, KB_US, sunkbd_keydesc_it), 874 KBD_MAP(KB_NL, KB_US, sunkbd_keydesc_nl), 875 KBD_MAP(KB_NO, KB_US, sunkbd_keydesc_no), 876 KBD_MAP(KB_PT, KB_US, sunkbd_keydesc_pt), 877 KBD_MAP(KB_SF, KB_US, sunkbd_keydesc_sf), 878 KBD_MAP(KB_SG, KB_US, sunkbd_keydesc_sg), 879 KBD_MAP(KB_SV, KB_US, sunkbd_keydesc_sv), 880 KBD_MAP(KB_SV | KB_NODEAD, KB_SV, sunkbd_keydesc_sv_nodead), 881 KBD_MAP(KB_UK, KB_US, sunkbd_keydesc_uk), 882 {0, 0, 0, 0}, 883 }; 884 885 /* Supported type 5 keyboard layouts */ 886 const struct wscons_keydesc sunkbd5_keydesctab[] = { 887 KBD_MAP(KB_US, 0, sunkbd_keydesc_us), 888 KBD_MAP(KB_DE, KB_US, sunkbd5_keydesc_de), 889 KBD_MAP(KB_DK, KB_US, sunkbd5_keydesc_dk), 890 KBD_MAP(KB_ES, KB_US, sunkbd5_keydesc_es), 891 KBD_MAP(KB_FR, KB_US, sunkbd5_keydesc_fr), 892 KBD_MAP(KB_IT, KB_US, sunkbd5_keydesc_it), 893 KBD_MAP(KB_JP, KB_US, sunkbd5_keydesc_jp), 894 KBD_MAP(KB_NL, KB_US, sunkbd5_keydesc_nl), 895 KBD_MAP(KB_NO, KB_US, sunkbd5_keydesc_no), 896 KBD_MAP(KB_PT, KB_US, sunkbd5_keydesc_pt), 897 KBD_MAP(KB_SF, KB_US, sunkbd5_keydesc_sf), 898 KBD_MAP(KB_SG, KB_US, sunkbd5_keydesc_sg), 899 KBD_MAP(KB_SV, KB_US, sunkbd5_keydesc_sv), 900 KBD_MAP(KB_SV | KB_NODEAD, KB_SV, sunkbd_keydesc_sv_nodead), 901 KBD_MAP(KB_UK, KB_US, sunkbd5_keydesc_uk), 902 {0, 0, 0, 0}, 903 }; 904 905 /* 906 * Keyboard layout to ID table 907 * References: 908 * Sun Type 5 Keyboard Supplement Installation Guide, May 1992 909 * http://docs.sun.com/db/doc/806-6642/6jfipqu57?a=view 910 * http://jp.sunsolve.sun.com/handbook_pub/Systems/SSVygr/INPUT_Compact1_Keyboard.html 911 */ 912 const int sunkbd_layouts[MAXSUNLAYOUT] = { 913 /* Type 4 layouts */ 914 KB_US, /* 000 USA */ 915 KB_US, /* 001 same as 000 */ 916 KB_BE, /* 002 Belgium/French */ 917 -1, /* 003 Canada */ 918 KB_DK, /* 004 Denmark */ 919 KB_DE, /* 005 Germany */ 920 KB_IT, /* 006 Italy */ 921 KB_NL, /* 007 The Netherlands */ 922 KB_NO, /* 008 Norway */ 923 KB_PT, /* 009 Portugal */ 924 KB_ES, /* 00a Latin America/Spanish */ 925 KB_SV, /* 00b Sweden */ 926 KB_SF, /* 00c Switzerland/French */ 927 KB_SG, /* 00d Switzerland/German */ 928 KB_UK, /* 00e Great Britain */ 929 -1, /* 00f unaffected */ 930 -1, /* 010 Korea */ 931 -1, /* 011 Taiwan */ 932 -1, /* 012 unaffected */ 933 -1, /* 013 unaffected */ 934 -1, /* 014 VT220 */ 935 -1, /* 015 VT220 Switzerland/French */ 936 -1, /* 016 VT220 Switzerland/German */ 937 -1, /* 017 VT220 Switzerland/Italian */ 938 -1, /* 018 unaffected */ 939 -1, /* 019 Belgium */ 940 -1, /* 01a unaffected */ 941 -1, /* 01b unaffected */ 942 -1, /* 01c unaffected */ 943 -1, /* 01d unaffected */ 944 -1, /* 01e unaffected */ 945 -1, /* 01f unaffected */ 946 -1, /* 020 Japan */ 947 948 /* Type 5 layouts */ 949 KB_US, /* 021 USA */ 950 KB_US, /* 022 UNIX */ 951 KB_FR, /* 023 France */ 952 KB_DK, /* 024 Denmark */ 953 KB_DE, /* 025 Germany */ 954 KB_IT, /* 026 Italy */ 955 KB_NL, /* 027 The Netherlands */ 956 KB_NO, /* 028 Norway */ 957 KB_PT, /* 029 Portugal */ 958 KB_ES, /* 02a Spain */ 959 KB_SV, /* 02b Sweden */ 960 KB_SF, /* 02c Switzerland/French */ 961 KB_SG, /* 02d Switzerland/German */ 962 KB_UK, /* 02e Great Britain */ 963 -1, /* 02f Korea */ 964 -1, /* 030 Taiwan */ 965 KB_JP, /* 031 Japan */ 966 -1, /* 032 Canada/French */ 967 -1, /* 033 Hungary */ 968 -1, /* 034 Poland */ 969 -1, /* 035 Czech */ 970 -1, /* 036 Russia */ 971 -1, /* 037 Latvia */ 972 -1, /* 038 Turkey-Q5 */ 973 -1, /* 039 Greece */ 974 -1, /* 03a Arabic */ 975 -1, /* 03b Lithuania */ 976 -1, /* 03c Belgium */ 977 -1, /* 03d unaffected */ 978 -1, /* 03e Turkey-F5 */ 979 -1, /* 03f Canada/French */ 980 981 /* Not affected range */ 982 -1, /* 040 */ 983 -1, /* 041 */ 984 -1, /* 042 */ 985 -1, /* 043 */ 986 -1, /* 044 */ 987 -1, /* 045 */ 988 -1, /* 046 */ 989 -1, /* 047 */ 990 -1, /* 048 */ 991 -1, /* 049 */ 992 -1, /* 04a */ 993 -1, /* 04b */ 994 -1, /* 04c */ 995 -1, /* 04d */ 996 -1, /* 04e */ 997 -1, /* 04f */ 998 999 /* ``Compact-1'' layouts */ 1000 KB_US, /* 050 USA */ 1001 KB_US, /* 051 UNIX */ 1002 KB_FR, /* 052 France */ 1003 KB_DK, /* 053 Denmark */ 1004 KB_DE, /* 054 Germany */ 1005 KB_IT, /* 055 Italy */ 1006 KB_NL, /* 056 The Netherlands */ 1007 KB_NO, /* 057 Norway */ 1008 KB_PT, /* 058 Portugal */ 1009 KB_ES, /* 059 Spain */ 1010 KB_SV, /* 05a Sweden */ 1011 KB_SF, /* 05b Switzerland/French */ 1012 KB_SG, /* 05c Switzerland/German */ 1013 KB_UK, /* 05d Great Britain */ 1014 -1, /* 05e Korea */ 1015 -1, /* 05f Taiwan */ 1016 KB_JP, /* 060 Japan */ 1017 -1, /* 061 Canada/French */ 1018 }; 1019 1020 struct wskbd_mapdata sunkbd_keymapdata = { 1021 sunkbd_keydesctab, 1022 #ifdef SUNKBD_LAYOUT 1023 SUNKBD_LAYOUT, 1024 #else 1025 KB_US, 1026 #endif 1027 }; 1028 1029 struct wskbd_mapdata sunkbd5_keymapdata = { 1030 sunkbd5_keydesctab, 1031 #ifdef SUNKBD5_LAYOUT 1032 SUNKBD5_LAYOUT, 1033 #else 1034 KB_US, 1035 #endif 1036 }; 1037