stevel@tonic-gate | 7c478bd | 2005-06-14 00:00:00 -0700 | [diff] [blame] | 1 | /* |
| 2 | * CDDL HEADER START |
| 3 | * |
| 4 | * The contents of this file are subject to the terms of the |
qz150045 | e460330 | 2007-01-26 16:10:27 -0800 | [diff] [blame] | 5 | * Common Development and Distribution License (the "License"). |
| 6 | * You may not use this file except in compliance with the License. |
stevel@tonic-gate | 7c478bd | 2005-06-14 00:00:00 -0700 | [diff] [blame] | 7 | * |
| 8 | * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE |
| 9 | * or http://www.opensolaris.org/os/licensing. |
| 10 | * See the License for the specific language governing permissions |
| 11 | * and limitations under the License. |
| 12 | * |
| 13 | * When distributing Covered Code, include this CDDL HEADER in each |
| 14 | * file and include the License file at usr/src/OPENSOLARIS.LICENSE. |
| 15 | * If applicable, add the following below this CDDL HEADER, with the |
| 16 | * fields enclosed by brackets "[]" replaced with your own identifying |
| 17 | * information: Portions Copyright [yyyy] [name of copyright owner] |
| 18 | * |
| 19 | * CDDL HEADER END |
| 20 | */ |
| 21 | /* |
qz150045 | e460330 | 2007-01-26 16:10:27 -0800 | [diff] [blame] | 22 | * Copyright 2007 Sun Microsystems, Inc. All rights reserved. |
| 23 | * Use is subject to license terms. |
stevel@tonic-gate | 7c478bd | 2005-06-14 00:00:00 -0700 | [diff] [blame] | 24 | */ |
| 25 | |
| 26 | #pragma ident "%Z%%M% %I% %E% SMI" |
| 27 | /* SunOS-4.0 1.19 */ |
| 28 | |
| 29 | /* |
| 30 | * This module contains the translation tables for the up-down encoded |
| 31 | * Sun keyboards. |
| 32 | */ |
| 33 | |
| 34 | #include <sys/param.h> |
| 35 | #include <sys/kbd.h> |
| 36 | |
| 37 | /* handy way to define control characters in the tables */ |
| 38 | #define c(c_char) (c_char&0x1F) |
| 39 | #define ESC 0x1B |
| 40 | #define DEL 0x7F |
| 41 | |
| 42 | |
| 43 | /* Unshifted keyboard table for Type 3 keyboard */ |
| 44 | |
| 45 | static struct keymap keytab_s3_lc = { |
| 46 | /* BEGIN CSTYLED */ |
| 47 | /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT, |
| 48 | HOLE, LF(2), HOLE, TF(1), TF(2), HOLE, |
| 49 | /* 8 */ TF(3), HOLE, TF(4), HOLE, TF(5), HOLE, TF(6), HOLE, |
| 50 | /* 16 */ TF(7), TF(8), TF(9), SHIFTKEYS+ALT, |
| 51 | HOLE, RF(1), RF(2), RF(3), |
| 52 | /* 24 */ HOLE, LF(3), LF(4), HOLE, HOLE, ESC, '1', '2', |
| 53 | /* 32 */ '3', '4', '5', '6', '7', '8', '9', '0', |
| 54 | /* 40 */ '-', '=', '`', '\b', HOLE, RF(4), RF(5), RF(6), |
| 55 | /* 48 */ HOLE, LF(5), HOLE, LF(6), HOLE, '\t', 'q', 'w', |
| 56 | /* 56 */ 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', |
| 57 | /* 64 */ '[', ']', DEL, HOLE, RF(7), STRING+UPARROW, |
| 58 | RF(9), HOLE, |
| 59 | /* 72 */ LF(7), LF(8), HOLE, HOLE, SHIFTKEYS+LEFTCTRL, |
| 60 | 'a', 's', 'd', |
| 61 | /* 80 */ 'f', 'g', 'h', 'j', 'k', 'l', ';', '\'', |
| 62 | /* 88 */ '\\', '\r', HOLE, STRING+LEFTARROW, |
| 63 | RF(11), STRING+RIGHTARROW, |
| 64 | HOLE, LF(9), |
| 65 | /* 96 */ HOLE, LF(10), HOLE, SHIFTKEYS+LEFTSHIFT, |
| 66 | 'z', 'x', 'c', 'v', |
| 67 | /*104 */ 'b', 'n', 'm', ',', '.', '/', SHIFTKEYS+RIGHTSHIFT, |
| 68 | '\n', |
| 69 | /*112 */ RF(13), STRING+DOWNARROW, |
| 70 | RF(15), HOLE, HOLE, HOLE, HOLE, SHIFTKEYS+CAPSLOCK, |
| 71 | /*120 */ BUCKYBITS+METABIT, |
| 72 | ' ', BUCKYBITS+METABIT, |
| 73 | HOLE, HOLE, HOLE, ERROR, IDLE, |
| 74 | /* END CSTYLED */ |
| 75 | }; |
| 76 | |
| 77 | /* Shifted keyboard table for Type 3 keyboard */ |
| 78 | |
| 79 | static struct keymap keytab_s3_uc = { |
| 80 | /* BEGIN CSTYLED */ |
| 81 | /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT, |
| 82 | HOLE, LF(2), HOLE, TF(1), TF(2), HOLE, |
| 83 | /* 8 */ TF(3), HOLE, TF(4), HOLE, TF(5), HOLE, TF(6), HOLE, |
| 84 | /* 16 */ TF(7), TF(8), TF(9), SHIFTKEYS+ALT, |
| 85 | HOLE, RF(1), RF(2), RF(3), |
| 86 | /* 24 */ HOLE, LF(3), LF(4), HOLE, HOLE, ESC, '!', '@', |
| 87 | /* 32 */ '#', '$', '%', '^', '&', '*', '(', ')', |
| 88 | /* 40 */ '_', '+', '~', '\b', HOLE, RF(4), RF(5), RF(6), |
| 89 | /* 48 */ HOLE, LF(5), HOLE, LF(6), HOLE, '\t', 'Q', 'W', |
| 90 | /* 56 */ 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', |
| 91 | /* 64 */ '{', '}', DEL, HOLE, RF(7), STRING+UPARROW, |
| 92 | RF(9), HOLE, |
| 93 | /* 72 */ LF(7), LF(8), HOLE, HOLE, SHIFTKEYS+LEFTCTRL, |
| 94 | 'A', 'S', 'D', |
| 95 | /* 80 */ 'F', 'G', 'H', 'J', 'K', 'L', ':', '"', |
| 96 | /* 88 */ '|', '\r', HOLE, STRING+LEFTARROW, |
| 97 | RF(11), STRING+RIGHTARROW, |
| 98 | HOLE, LF(9), |
| 99 | /* 96 */ HOLE, LF(10), HOLE, SHIFTKEYS+LEFTSHIFT, |
| 100 | 'Z', 'X', 'C', 'V', |
| 101 | /*104 */ 'B', 'N', 'M', '<', '>', '?', SHIFTKEYS+RIGHTSHIFT, |
| 102 | '\n', |
| 103 | /*112 */ RF(13), STRING+DOWNARROW, |
| 104 | RF(15), HOLE, HOLE, HOLE, HOLE, SHIFTKEYS+CAPSLOCK, |
| 105 | /*120 */ BUCKYBITS+METABIT, |
| 106 | ' ', BUCKYBITS+METABIT, |
| 107 | HOLE, HOLE, HOLE, ERROR, IDLE, |
| 108 | /* END CSTYLED */ |
| 109 | }; |
| 110 | |
| 111 | /* Caps Locked keyboard table for Type 3 keyboard */ |
| 112 | |
| 113 | static struct keymap keytab_s3_cl = { |
| 114 | /* BEGIN CSTYLED */ |
| 115 | /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT, |
| 116 | HOLE, LF(2), HOLE, TF(1), TF(2), HOLE, |
| 117 | /* 8 */ TF(3), HOLE, TF(4), HOLE, TF(5), HOLE, TF(6), HOLE, |
| 118 | /* 16 */ TF(7), TF(8), TF(9), SHIFTKEYS+ALT, |
| 119 | HOLE, RF(1), RF(2), RF(3), |
| 120 | /* 24 */ HOLE, LF(3), LF(4), HOLE, HOLE, ESC, '1', '2', |
| 121 | /* 32 */ '3', '4', '5', '6', '7', '8', '9', '0', |
| 122 | /* 40 */ '-', '=', '`', '\b', HOLE, RF(4), RF(5), RF(6), |
| 123 | /* 48 */ HOLE, LF(5), HOLE, LF(6), HOLE, '\t', 'Q', 'W', |
| 124 | /* 56 */ 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', |
| 125 | /* 64 */ '[', ']', DEL, HOLE, RF(7), STRING+UPARROW, |
| 126 | RF(9), HOLE, |
| 127 | /* 72 */ LF(7), LF(8), HOLE, HOLE, SHIFTKEYS+LEFTCTRL, |
| 128 | 'A', 'S', 'D', |
| 129 | /* 80 */ 'F', 'G', 'H', 'J', 'K', 'L', ';', '\'', |
| 130 | /* 88 */ '\\', '\r', HOLE, STRING+LEFTARROW, |
| 131 | RF(11), STRING+RIGHTARROW, |
| 132 | HOLE, LF(9), |
| 133 | /* 96 */ HOLE, LF(10), HOLE, SHIFTKEYS+LEFTSHIFT, |
| 134 | 'Z', 'X', 'C', 'V', |
| 135 | /*104 */ 'B', 'N', 'M', ',', '.', '/', SHIFTKEYS+RIGHTSHIFT, |
| 136 | '\n', |
| 137 | /*112 */ RF(13), STRING+DOWNARROW, |
| 138 | RF(15), HOLE, HOLE, HOLE, HOLE, SHIFTKEYS+CAPSLOCK, |
| 139 | /*120 */ BUCKYBITS+METABIT, |
| 140 | ' ', BUCKYBITS+METABIT, |
| 141 | HOLE, HOLE, HOLE, ERROR, IDLE, |
| 142 | /* END CSTYLED */ |
| 143 | }; |
| 144 | |
| 145 | /* Controlled keyboard table for Type 3 keyboard */ |
| 146 | |
| 147 | static struct keymap keytab_s3_ct = { |
| 148 | /* BEGIN CSTYLED */ |
| 149 | /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT, |
| 150 | HOLE, LF(2), HOLE, TF(1), TF(2), HOLE, |
| 151 | /* 8 */ TF(3), HOLE, TF(4), HOLE, TF(5), HOLE, TF(6), HOLE, |
| 152 | /* 16 */ TF(7), TF(8), TF(9), SHIFTKEYS+ALT, |
| 153 | HOLE, RF(1), RF(2), RF(3), |
| 154 | /* 24 */ HOLE, LF(3), LF(4), HOLE, HOLE, ESC, '1', c('@'), |
| 155 | /* 32 */ '3', '4', '5', c('^'), '7', '8', '9', '0', |
| 156 | /* 40 */ c('_'), '=', c('^'), '\b', HOLE, RF(4), RF(5), RF(6), |
| 157 | /* 48 */ HOLE, LF(5), HOLE, LF(6), HOLE, '\t', c('q'), c('w'), |
| 158 | /* 56 */ c('e'), c('r'), c('t'), c('y'), c('u'), c('i'), c('o'), c('p'), |
| 159 | /* 64 */ c('['), c(']'), DEL, HOLE, RF(7), STRING+UPARROW, |
| 160 | RF(9), HOLE, |
| 161 | /* 72 */ LF(7), LF(8), HOLE, HOLE, SHIFTKEYS+LEFTCTRL, |
| 162 | c('a'), c('s'), c('d'), |
| 163 | /* 80 */ c('f'), c('g'), c('h'), c('j'), c('k'), c('l'), ';', '\'', |
| 164 | /* 88 */ c('\\'), |
| 165 | '\r', HOLE, STRING+LEFTARROW, |
| 166 | RF(11), STRING+RIGHTARROW, |
| 167 | HOLE, LF(9), |
| 168 | /* 96 */ HOLE, LF(10), HOLE, SHIFTKEYS+LEFTSHIFT, |
| 169 | c('z'), c('x'), c('c'), c('v'), |
| 170 | /*104 */ c('b'), c('n'), c('m'), ',', '.', c('_'), SHIFTKEYS+RIGHTSHIFT, |
| 171 | '\n', |
| 172 | /*112 */ RF(13), STRING+DOWNARROW, |
| 173 | RF(15), HOLE, HOLE, HOLE, HOLE, SHIFTKEYS+CAPSLOCK, |
| 174 | /*120 */ BUCKYBITS+METABIT, |
| 175 | c(' '), BUCKYBITS+METABIT, |
| 176 | HOLE, HOLE, HOLE, ERROR, IDLE, |
| 177 | /* END CSTYLED */ |
| 178 | }; |
| 179 | |
| 180 | /* "Key Up" keyboard table for Type 3 keyboard */ |
| 181 | |
| 182 | static struct keymap keytab_s3_up = { |
| 183 | /* BEGIN CSTYLED */ |
| 184 | /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT, |
| 185 | HOLE, NOP, HOLE, NOP, NOP, HOLE, |
| 186 | /* 8 */ NOP, HOLE, NOP, HOLE, NOP, HOLE, NOP, HOLE, |
| 187 | /* 16 */ NOP, NOP, NOP, SHIFTKEYS+ALT, |
| 188 | HOLE, NOP, NOP, NOP, |
| 189 | /* 24 */ HOLE, NOP, NOP, HOLE, HOLE, NOP, NOP, NOP, |
| 190 | /* 32 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, |
| 191 | /* 40 */ NOP, NOP, NOP, NOP, HOLE, NOP, NOP, NOP, |
| 192 | /* 48 */ HOLE, NOP, HOLE, NOP, HOLE, NOP, NOP, NOP, |
| 193 | /* 56 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, |
| 194 | /* 64 */ NOP, NOP, NOP, HOLE, NOP, NOP, NOP, HOLE, |
| 195 | /* 72 */ NOP, NOP, HOLE, HOLE, SHIFTKEYS+LEFTCTRL, |
| 196 | NOP, NOP, NOP, |
| 197 | /* 80 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, |
| 198 | /* 88 */ NOP, NOP, HOLE, NOP, NOP, NOP, HOLE, NOP, |
| 199 | /* 96 */ HOLE, NOP, HOLE, SHIFTKEYS+LEFTSHIFT, |
| 200 | NOP, NOP, NOP, NOP, |
| 201 | /*104 */ NOP, NOP, NOP, NOP, NOP, NOP, SHIFTKEYS+RIGHTSHIFT, |
| 202 | NOP, |
| 203 | /*112 */ NOP, NOP, NOP, HOLE, HOLE, HOLE, HOLE, NOP, |
| 204 | /*120 */ BUCKYBITS+METABIT, |
| 205 | NOP, BUCKYBITS+METABIT, |
| 206 | HOLE, HOLE, HOLE, HOLE, RESET, |
| 207 | /* END CSTYLED */ |
| 208 | }; |
| 209 | |
| 210 | /* Index to keymaps for Type 3 keyboard */ |
| 211 | static struct keyboard keyindex_s3 = { |
| 212 | &keytab_s3_lc, |
| 213 | &keytab_s3_uc, |
| 214 | &keytab_s3_cl, |
| 215 | 0, /* no Alt Graph key, no Alt Graph table */ |
| 216 | 0, /* no Num Lock key, no Num Lock table */ |
| 217 | &keytab_s3_ct, |
| 218 | &keytab_s3_up, |
| 219 | 0x0000, /* Shift bits which stay on with idle keyboard */ |
| 220 | 0x0000, /* Bucky bits which stay on with idle keyboard */ |
| 221 | 1, 0, 77, /* abort keys */ |
| 222 | CAPSMASK, /* Shift bits which toggle on down event */ |
| 223 | NULL, |
qz150045 | e460330 | 2007-01-26 16:10:27 -0800 | [diff] [blame] | 224 | 99, 110, 21, /* New abort keys */ |
stevel@tonic-gate | 7c478bd | 2005-06-14 00:00:00 -0700 | [diff] [blame] | 225 | }; |
| 226 | |
| 227 | |
| 228 | /* Unshifted keyboard table for Type 4 keyboard */ |
| 229 | |
| 230 | static struct keymap keytab_s4_lc = { |
| 231 | /* BEGIN CSTYLED */ |
| 232 | /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT, |
| 233 | HOLE, LF(2), HOLE, TF(1), TF(2), TF(10), |
| 234 | /* 8 */ TF(3), TF(11), TF(4), TF(12), TF(5), SHIFTKEYS+ALTGRAPH, |
| 235 | TF(6), HOLE, |
| 236 | /* 16 */ TF(7), TF(8), TF(9), SHIFTKEYS+ALT, |
| 237 | HOLE, RF(1), RF(2), RF(3), |
| 238 | /* 24 */ HOLE, LF(3), LF(4), HOLE, HOLE, ESC, '1', '2', |
| 239 | /* 32 */ '3', '4', '5', '6', '7', '8', '9', '0', |
| 240 | /* 40 */ '-', '=', '`', '\b', HOLE, RF(4), RF(5), RF(6), |
| 241 | /* 48 */ BF(13), LF(5), BF(10), LF(6), HOLE, '\t', 'q', 'w', |
| 242 | /* 56 */ 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', |
| 243 | /* 64 */ '[', ']', DEL, COMPOSE, |
| 244 | RF(7), STRING+UPARROW, |
| 245 | RF(9), BF(15), |
| 246 | /* 72 */ LF(7), LF(8), HOLE, HOLE, SHIFTKEYS+LEFTCTRL, |
| 247 | 'a', 's', 'd', |
| 248 | /* 80 */ 'f', 'g', 'h', 'j', 'k', 'l', ';', '\'', |
| 249 | /* 88 */ '\\', '\r', BF(11), STRING+LEFTARROW, |
| 250 | RF(11), STRING+RIGHTARROW, |
| 251 | BF(8), LF(9), |
| 252 | /* 96 */ HOLE, LF(10), SHIFTKEYS+NUMLOCK, |
| 253 | SHIFTKEYS+LEFTSHIFT, |
| 254 | 'z', 'x', 'c', 'v', |
| 255 | /*104 */ 'b', 'n', 'm', ',', '.', '/', SHIFTKEYS+RIGHTSHIFT, |
| 256 | '\n', |
| 257 | /*112 */ RF(13), STRING+DOWNARROW, |
| 258 | RF(15), HOLE, HOLE, HOLE, LF(16), SHIFTKEYS+CAPSLOCK, |
| 259 | /*120 */ BUCKYBITS+METABIT, |
| 260 | ' ', BUCKYBITS+METABIT, |
| 261 | HOLE, HOLE, BF(14), ERROR, IDLE, |
| 262 | /* END CSTYLED */ |
| 263 | }; |
| 264 | |
| 265 | /* Shifted keyboard table for Type 4 keyboard */ |
| 266 | |
| 267 | static struct keymap keytab_s4_uc = { |
| 268 | /* BEGIN CSTYLED */ |
| 269 | /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT, |
| 270 | HOLE, LF(2), HOLE, TF(1), TF(2), TF(10), |
| 271 | /* 8 */ TF(3), TF(11), TF(4), TF(12), TF(5), SHIFTKEYS+ALTGRAPH, |
| 272 | TF(6), HOLE, |
| 273 | /* 16 */ TF(7), TF(8), TF(9), SHIFTKEYS+ALT, |
| 274 | HOLE, RF(1), RF(2), RF(3), |
| 275 | /* 24 */ HOLE, LF(3), LF(4), HOLE, HOLE, ESC, '!', '@', |
| 276 | /* 32 */ '#', '$', '%', '^', '&', '*', '(', ')', |
| 277 | /* 40 */ '_', '+', '~', '\b', HOLE, RF(4), RF(5), RF(6), |
| 278 | /* 48 */ BF(13), LF(5), BF(10), LF(6), HOLE, '\t', 'Q', 'W', |
| 279 | /* 56 */ 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', |
| 280 | /* 64 */ '{', '}', DEL, COMPOSE, |
| 281 | RF(7), STRING+UPARROW, |
| 282 | RF(9), BF(15), |
| 283 | /* 72 */ LF(7), LF(8), HOLE, HOLE, SHIFTKEYS+LEFTCTRL, |
| 284 | 'A', 'S', 'D', |
| 285 | /* 80 */ 'F', 'G', 'H', 'J', 'K', 'L', ':', '"', |
| 286 | /* 88 */ '|', '\r', BF(11), STRING+LEFTARROW, |
| 287 | RF(11), STRING+RIGHTARROW, |
| 288 | BF(8), LF(9), |
| 289 | /* 96 */ HOLE, LF(10), SHIFTKEYS+NUMLOCK, |
| 290 | SHIFTKEYS+LEFTSHIFT, |
| 291 | 'Z', 'X', 'C', 'V', |
| 292 | /*104 */ 'B', 'N', 'M', '<', '>', '?', SHIFTKEYS+RIGHTSHIFT, |
| 293 | '\n', |
| 294 | /*112 */ RF(13), STRING+DOWNARROW, |
| 295 | RF(15), HOLE, HOLE, HOLE, LF(16), SHIFTKEYS+CAPSLOCK, |
| 296 | /*120 */ BUCKYBITS+METABIT, |
| 297 | ' ', BUCKYBITS+METABIT, |
| 298 | HOLE, HOLE, BF(14), ERROR, IDLE, |
| 299 | /* END CSTYLED */ |
| 300 | }; |
| 301 | |
| 302 | /* Caps Locked keyboard table for Type 4 keyboard */ |
| 303 | |
| 304 | static struct keymap keytab_s4_cl = { |
| 305 | /* BEGIN CSTYLED */ |
| 306 | /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT, |
| 307 | HOLE, LF(2), HOLE, TF(1), TF(2), TF(10), |
| 308 | /* 8 */ TF(3), TF(11), TF(4), TF(12), TF(5), SHIFTKEYS+ALTGRAPH, |
| 309 | TF(6), HOLE, |
| 310 | /* 16 */ TF(7), TF(8), TF(9), SHIFTKEYS+ALT, |
| 311 | HOLE, RF(1), RF(2), RF(3), |
| 312 | /* 24 */ HOLE, LF(3), LF(4), HOLE, HOLE, ESC, '1', '2', |
| 313 | /* 32 */ '3', '4', '5', '6', '7', '8', '9', '0', |
| 314 | /* 40 */ '-', '=', '`', '\b', HOLE, RF(4), RF(5), RF(6), |
| 315 | /* 48 */ BF(13), LF(5), BF(10), LF(6), HOLE, '\t', 'Q', 'W', |
| 316 | /* 56 */ 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', |
| 317 | /* 64 */ '[', ']', DEL, COMPOSE, |
| 318 | RF(7), STRING+UPARROW, |
| 319 | RF(9), BF(15), |
| 320 | /* 72 */ LF(7), LF(8), HOLE, HOLE, SHIFTKEYS+LEFTCTRL, |
| 321 | 'A', 'S', 'D', |
| 322 | /* 80 */ 'F', 'G', 'H', 'J', 'K', 'L', ';', '\'', |
| 323 | /* 88 */ '\\', '\r', BF(11), STRING+LEFTARROW, |
| 324 | RF(11), STRING+RIGHTARROW, |
| 325 | BF(8), LF(9), |
| 326 | /* 96 */ HOLE, LF(10), SHIFTKEYS+NUMLOCK, |
| 327 | SHIFTKEYS+LEFTSHIFT, |
| 328 | 'Z', 'X', 'C', 'V', |
| 329 | /*104 */ 'B', 'N', 'M', ',', '.', '/', SHIFTKEYS+RIGHTSHIFT, |
| 330 | '\n', |
| 331 | /*112 */ RF(13), STRING+DOWNARROW, |
| 332 | RF(15), HOLE, HOLE, HOLE, LF(16), SHIFTKEYS+CAPSLOCK, |
| 333 | /*120 */ BUCKYBITS+METABIT, |
| 334 | ' ', BUCKYBITS+METABIT, |
| 335 | HOLE, HOLE, BF(14), ERROR, IDLE, |
| 336 | /* END CSTYLED */ |
| 337 | }; |
| 338 | |
| 339 | /* Alt Graph keyboard table for Type 4 keyboard */ |
| 340 | |
| 341 | static struct keymap keytab_s4_ag = { |
| 342 | /* BEGIN CSTYLED */ |
| 343 | /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT, |
| 344 | HOLE, LF(2), HOLE, TF(1), TF(2), TF(10), |
| 345 | /* 8 */ TF(3), TF(11), TF(4), TF(12), TF(5), SHIFTKEYS+ALTGRAPH, |
| 346 | TF(6), HOLE, |
| 347 | /* 16 */ TF(7), TF(8), TF(9), SHIFTKEYS+ALT, |
| 348 | HOLE, RF(1), RF(2), RF(3), |
| 349 | /* 24 */ HOLE, LF(3), LF(4), HOLE, HOLE, ESC, NOP, NOP, |
| 350 | /* 32 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, |
| 351 | /* 40 */ NOP, NOP, NOP, '\b', HOLE, RF(4), RF(5), RF(6), |
| 352 | /* 48 */ BF(13), LF(5), BF(10), LF(6), HOLE, '\t', NOP, NOP, |
| 353 | /* 56 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, |
| 354 | /* 64 */ NOP, NOP, DEL, COMPOSE, |
| 355 | RF(7), STRING+UPARROW, |
| 356 | RF(9), BF(15), |
| 357 | /* 72 */ LF(7), LF(8), HOLE, HOLE, SHIFTKEYS+LEFTCTRL, |
| 358 | NOP, NOP, NOP, |
| 359 | /* 80 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, |
| 360 | /* 88 */ NOP, '\r', BF(11), STRING+LEFTARROW, |
| 361 | RF(11), STRING+RIGHTARROW, |
| 362 | BF(8), LF(9), |
| 363 | /* 96 */ HOLE, LF(10), SHIFTKEYS+NUMLOCK, |
| 364 | SHIFTKEYS+LEFTSHIFT, |
| 365 | NOP, NOP, NOP, NOP, |
| 366 | /*104 */ NOP, NOP, NOP, NOP, NOP, NOP, SHIFTKEYS+RIGHTSHIFT, |
| 367 | '\n', |
| 368 | /*112 */ RF(13), STRING+DOWNARROW, |
| 369 | RF(15), HOLE, HOLE, HOLE, LF(16), SHIFTKEYS+CAPSLOCK, |
| 370 | /*120 */ BUCKYBITS+METABIT, |
| 371 | ' ', BUCKYBITS+METABIT, |
| 372 | HOLE, HOLE, BF(14), ERROR, IDLE, |
| 373 | /* END CSTYLED */ |
| 374 | }; |
| 375 | |
| 376 | /* Num Locked keyboard table for Type 4 keyboard */ |
| 377 | |
| 378 | static struct keymap keytab_s4_nl = { |
| 379 | /* BEGIN CSTYLED */ |
| 380 | /* 0 */ HOLE, NONL, HOLE, NONL, HOLE, NONL, NONL, NONL, |
| 381 | /* 8 */ NONL, NONL, NONL, NONL, NONL, NONL, NONL, HOLE, |
| 382 | /* 16 */ NONL, NONL, NONL, NONL, HOLE, NONL, NONL, NONL, |
| 383 | /* 24 */ HOLE, NONL, NONL, HOLE, HOLE, NONL, NONL, NONL, |
| 384 | /* 32 */ NONL, NONL, NONL, NONL, NONL, NONL, NONL, NONL, |
| 385 | /* 40 */ NONL, NONL, NONL, NONL, HOLE, PADEQUAL, |
| 386 | PADSLASH, |
| 387 | PADSTAR, |
| 388 | /* 48 */ NONL, NONL, PADDOT, NONL, HOLE, NONL, NONL, NONL, |
| 389 | /* 56 */ NONL, NONL, NONL, NONL, NONL, NONL, NONL, NONL, |
| 390 | /* 64 */ NONL, NONL, NONL, NONL, |
| 391 | PAD7, PAD8, PAD9, PADMINUS, |
| 392 | /* 72 */ NONL, NONL, HOLE, HOLE, NONL, NONL, NONL, NONL, |
| 393 | /* 80 */ NONL, NONL, NONL, NONL, NONL, NONL, NONL, NONL, |
| 394 | /* 88 */ NONL, NONL, PADENTER, |
| 395 | PAD4, PAD5, PAD6, PAD0, NONL, |
| 396 | /* 96 */ HOLE, NONL, NONL, NONL, NONL, NONL, NONL, NONL, |
| 397 | /*104 */ NONL, NONL, NONL, NONL, NONL, NONL, NONL, |
| 398 | NONL, |
| 399 | /*112 */ PAD1, PAD2, PAD3, HOLE, HOLE, HOLE, NONL, NONL, |
| 400 | /*120 */ NONL, NONL, NONL, HOLE, HOLE, PADPLUS, |
| 401 | ERROR, IDLE, |
| 402 | /* END CSTYLED */ |
| 403 | }; |
| 404 | |
| 405 | /* Controlled keyboard table for Type 4 keyboard */ |
| 406 | |
| 407 | static struct keymap keytab_s4_ct = { |
| 408 | /* BEGIN CSTYLED */ |
| 409 | /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT, |
| 410 | HOLE, LF(2), HOLE, TF(1), TF(2), TF(10), |
| 411 | /* 8 */ TF(3), TF(11), TF(4), TF(12), TF(5), SHIFTKEYS+ALTGRAPH, |
| 412 | TF(6), HOLE, |
| 413 | /* 16 */ TF(7), TF(8), TF(9), SHIFTKEYS+ALT, |
| 414 | HOLE, RF(1), RF(2), RF(3), |
| 415 | /* 24 */ HOLE, LF(3), LF(4), HOLE, HOLE, ESC, '1', c('@'), |
| 416 | /* 32 */ '3', '4', '5', c('^'), '7', '8', '9', '0', |
| 417 | /* 40 */ c('_'), '=', c('^'), '\b', HOLE, RF(4), RF(5), RF(6), |
| 418 | /* 48 */ BF(13), LF(5), BF(10), LF(6), HOLE, '\t', c('q'), c('w'), |
| 419 | /* 56 */ c('e'), c('r'), c('t'), c('y'), c('u'), c('i'), c('o'), c('p'), |
| 420 | /* 64 */ c('['), c(']'), DEL, COMPOSE, |
| 421 | RF(7), STRING+UPARROW, |
| 422 | RF(9), BF(15), |
| 423 | /* 72 */ LF(7), LF(8), HOLE, HOLE, SHIFTKEYS+LEFTCTRL, |
| 424 | c('a'), c('s'), c('d'), |
| 425 | /* 80 */ c('f'), c('g'), c('h'), c('j'), c('k'), c('l'), ';', '\'', |
| 426 | /* 88 */ c('\\'), |
| 427 | '\r', BF(11), STRING+LEFTARROW, |
| 428 | RF(11), STRING+RIGHTARROW, |
| 429 | BF(8), LF(9), |
| 430 | /* 96 */ HOLE, LF(10), SHIFTKEYS+NUMLOCK, |
| 431 | SHIFTKEYS+LEFTSHIFT, |
| 432 | c('z'), c('x'), c('c'), c('v'), |
| 433 | /*104 */ c('b'), c('n'), c('m'), ',', '.', c('_'), SHIFTKEYS+RIGHTSHIFT, |
| 434 | '\n', |
| 435 | /*112 */ RF(13), STRING+DOWNARROW, |
| 436 | RF(15), HOLE, HOLE, HOLE, LF(16), SHIFTKEYS+CAPSLOCK, |
| 437 | /*120 */ BUCKYBITS+METABIT, |
| 438 | c(' '), BUCKYBITS+METABIT, |
| 439 | HOLE, HOLE, BF(14), ERROR, IDLE, |
| 440 | /* END CSTYLED */ |
| 441 | }; |
| 442 | |
| 443 | /* "Key Up" keyboard table for Type 4 keyboard */ |
| 444 | |
| 445 | static struct keymap keytab_s4_up = { |
| 446 | /* BEGIN CSTYLED */ |
| 447 | /* 0 */ HOLE, BUCKYBITS+SYSTEMBIT, |
| 448 | HOLE, NOP, HOLE, NOP, NOP, NOP, |
| 449 | /* 8 */ NOP, NOP, NOP, NOP, NOP, SHIFTKEYS+ALTGRAPH, |
| 450 | NOP, HOLE, |
| 451 | /* 16 */ NOP, NOP, NOP, SHIFTKEYS+ALT, |
| 452 | HOLE, NOP, NOP, NOP, |
| 453 | /* 24 */ HOLE, NOP, NOP, HOLE, HOLE, NOP, NOP, NOP, |
| 454 | /* 32 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, |
| 455 | /* 40 */ NOP, NOP, NOP, NOP, HOLE, NOP, NOP, NOP, |
| 456 | /* 48 */ NOP, NOP, NOP, NOP, HOLE, NOP, NOP, NOP, |
| 457 | /* 56 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, |
| 458 | /* 64 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, |
| 459 | /* 72 */ NOP, NOP, HOLE, HOLE, SHIFTKEYS+LEFTCTRL, |
| 460 | NOP, NOP, NOP, |
| 461 | /* 80 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, |
| 462 | /* 88 */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, |
| 463 | /* 96 */ HOLE, NOP, NOP, |
| 464 | SHIFTKEYS+LEFTSHIFT, |
| 465 | NOP, NOP, NOP, NOP, |
| 466 | /*104 */ NOP, NOP, NOP, NOP, NOP, NOP, SHIFTKEYS+RIGHTSHIFT, |
| 467 | NOP, |
| 468 | /*112 */ NOP, NOP, NOP, HOLE, HOLE, HOLE, NOP, NOP, |
| 469 | /*120 */ BUCKYBITS+METABIT, |
| 470 | NOP, BUCKYBITS+METABIT, |
| 471 | HOLE, HOLE, NOP, HOLE, RESET, |
| 472 | /* END CSTYLED */ |
| 473 | }; |
| 474 | |
| 475 | /* Index to keymaps for Type 4 keyboard */ |
| 476 | static struct keyboard keyindex_s4 = { |
| 477 | &keytab_s4_lc, |
| 478 | &keytab_s4_uc, |
| 479 | &keytab_s4_cl, |
| 480 | &keytab_s4_ag, |
| 481 | &keytab_s4_nl, |
| 482 | &keytab_s4_ct, |
| 483 | &keytab_s4_up, |
| 484 | 0x0000, /* Shift bits which stay on with idle keyboard */ |
| 485 | 0x0000, /* Bucky bits which stay on with idle keyboard */ |
| 486 | 1, 0, 77, /* abort keys */ |
| 487 | CAPSMASK|NUMLOCKMASK, /* Shift bits which toggle on down event */ |
| 488 | NULL, |
qz150045 | e460330 | 2007-01-26 16:10:27 -0800 | [diff] [blame] | 489 | 99, 110, 21, /* New abort keys */ |
stevel@tonic-gate | 7c478bd | 2005-06-14 00:00:00 -0700 | [diff] [blame] | 490 | }; |
| 491 | |
| 492 | |
| 493 | /* |
| 494 | * Index table for the whole shebang |
| 495 | * The first entry is used as the default if the id isn't recognized. |
| 496 | */ |
| 497 | struct keyboards keytables[] = { |
| 498 | KB_SUN3, &keyindex_s3, |
| 499 | KB_SUN4, &keyindex_s4, |
| 500 | 0, NULL, |
| 501 | }; |
| 502 | |
| 503 | /* |
| 504 | * Keyboard String Table |
| 505 | * |
| 506 | * This defines the strings sent by various keys (as selected in the |
| 507 | * tables above). |
| 508 | * The first byte of each string is its length, the rest is data. |
| 509 | */ |
| 510 | |
| 511 | #ifdef __STDC__ |
| 512 | /* |
| 513 | * XXX This is here to silence compiler warnings. The non-ansi-c form |
| 514 | * is retained if somebody can figure out how to replicate it in |
| 515 | * ansi-c. |
| 516 | */ |
| 517 | char keystringtab[16][KTAB_STRLEN] = { |
| 518 | { '\033', '[', 'H', '\0' }, /* home */ |
| 519 | { '\033', '[', 'A', '\0' }, /* up */ |
| 520 | { '\033', '[', 'B', '\0' }, /* down */ |
| 521 | { '\033', '[', 'D', '\0' }, /* left */ |
| 522 | { '\033', '[', 'C', '\0' }, /* right */ |
| 523 | }; |
| 524 | #else /* __STDC__ */ |
| 525 | #define kstescinit(c) {'\033', '[', 'c', '\0'} |
| 526 | char keystringtab[16][KTAB_STRLEN] = { |
| 527 | kstescinit(H) /* home */, |
| 528 | kstescinit(A) /* up */, |
| 529 | kstescinit(B) /* down */, |
| 530 | kstescinit(D) /* left */, |
| 531 | kstescinit(C) /* right */, |
| 532 | }; |
| 533 | #endif /* __STDC__ */ |
| 534 | |
| 535 | |
| 536 | /* |
| 537 | * Compose Key Sequence Table |
| 538 | * |
| 539 | * Taken from Suncompose.h of openwindows. |
| 540 | * |
| 541 | * The idea here is to create a simple index into a table of |
| 542 | * compose key sequences. The purpose is to provide a fast |
| 543 | * lookup mechanism using as little space as possible (while |
| 544 | * still using a table of triplets). |
| 545 | * |
| 546 | * For reference, here is the set of all composable characters: |
| 547 | * SP !\"\'*+,-./01234:<>?ACDEHILNOPRSTUXY\\^_`acdehilnoprstuxy|~ |
| 548 | * |
| 549 | * if ascii_char[i] is not composable, |
| 550 | * kb_compose_map[i] is -1 |
| 551 | * else |
| 552 | * if ascii_char[i] appears as a first char in compose_table, |
| 553 | * kb_compose_map[i] is the index of it's first appearance |
| 554 | * else |
| 555 | * kb_compose_map[i] is 112 (end of table) |
| 556 | */ |
| 557 | |
| 558 | signed char kb_compose_map[ASCII_SET_SIZE] = { |
| 559 | /* BEGIN CSTYLED */ |
| 560 | -1, /* 000 (^@) */ |
| 561 | -1, /* 001 (^A) */ |
| 562 | -1, /* 002 (^B) */ |
| 563 | -1, /* 003 (^C) */ |
| 564 | -1, /* 004 (^D) */ |
| 565 | -1, /* 005 (^E) */ |
| 566 | -1, /* 006 (^F) */ |
| 567 | -1, /* 007 (^G) */ |
| 568 | -1, /* 008 (^H) */ |
| 569 | -1, /* 009 (^I) */ |
| 570 | -1, /* 010 (^J) */ |
| 571 | -1, /* 011 (^K) */ |
| 572 | -1, /* 012 (^L) */ |
| 573 | -1, /* 013 (^M) */ |
| 574 | -1, /* 014 (^N) */ |
| 575 | -1, /* 015 (^O) */ |
| 576 | -1, /* 016 (^P) */ |
| 577 | -1, /* 017 (^Q) */ |
| 578 | -1, /* 018 (^R) */ |
| 579 | -1, /* 019 (^S) */ |
| 580 | -1, /* 020 (^T) */ |
| 581 | -1, /* 021 (^U) */ |
| 582 | -1, /* 022 (^V) */ |
| 583 | -1, /* 023 (^W) */ |
| 584 | -1, /* 024 (^X) */ |
| 585 | -1, /* 025 (^Y) */ |
| 586 | -1, /* 026 (^Z) */ |
| 587 | -1, /* 027 (^[) */ |
| 588 | -1, /* 028 (^\) */ |
| 589 | -1, /* 029 (^]) */ |
| 590 | -1, /* 030 (^^) */ |
| 591 | -1, /* 031 (^_) */ |
| 592 | 0, /* 032 (SP) */ |
| 593 | 1, /* 033 (!) */ |
| 594 | 4, /* 034 (") */ |
| 595 | -1, /* 035 (#) */ |
| 596 | -1, /* 036 ($) */ |
| 597 | -1, /* 037 (%) */ |
| 598 | -1, /* 038 (&) */ |
| 599 | 16, /* 039 (') */ |
| 600 | -1, /* 040 (() */ |
| 601 | -1, /* 041 ()) */ |
| 602 | 28, /* 042 (*) */ |
| 603 | 31, /* 043 (+) */ |
| 604 | 32, /* 044 (,) */ |
| 605 | 36, /* 045 (-) */ |
| 606 | 48, /* 046 (.) */ |
| 607 | 49, /* 047 (/) */ |
| 608 | 54, /* 048 (0) */ |
| 609 | 57, /* 049 (1) */ |
| 610 | 60, /* 050 (2) */ |
| 611 | 61, /* 051 (3) */ |
| 612 | 112, /* 052 (4) */ |
| 613 | -1, /* 053 (5) */ |
| 614 | -1, /* 054 (6) */ |
| 615 | -1, /* 055 (7) */ |
| 616 | -1, /* 056 (8) */ |
| 617 | -1, /* 057 (9) */ |
| 618 | 112, /* 058 (:) */ |
| 619 | -1, /* 059 (;) */ |
| 620 | 63, /* 060 (<) */ |
| 621 | -1, /* 061 (=) */ |
| 622 | 64, /* 062 (>) */ |
| 623 | 65, /* 063 (?) */ |
| 624 | -1, /* 064 (@) */ |
| 625 | 66, /* 065 (A) */ |
| 626 | -1, /* 066 (B) */ |
| 627 | 70, /* 067 (C) */ |
| 628 | 112, /* 068 (D) */ |
| 629 | 71, /* 069 (E) */ |
| 630 | -1, /* 070 (F) */ |
| 631 | -1, /* 071 (G) */ |
| 632 | 73, /* 072 (H) */ |
| 633 | 74, /* 073 (I) */ |
| 634 | -1, /* 074 (J) */ |
| 635 | -1, /* 075 (K) */ |
| 636 | 112, /* 076 (L) */ |
| 637 | -1, /* 077 (M) */ |
| 638 | 76, /* 078 (N) */ |
| 639 | 77, /* 079 (O) */ |
| 640 | 84, /* 080 (P) */ |
| 641 | -1, /* 081 (Q) */ |
| 642 | 112, /* 082 (R) */ |
| 643 | 112, /* 083 (S) */ |
| 644 | 112, /* 084 (T) */ |
| 645 | 85, /* 085 (U) */ |
| 646 | -1, /* 086 (V) */ |
| 647 | -1, /* 087 (W) */ |
| 648 | 112, /* 088 (X) */ |
| 649 | 112, /* 089 (Y) */ |
| 650 | -1, /* 090 (Z) */ |
| 651 | -1, /* 091 ([) */ |
| 652 | 87, /* 092 (\) */ |
| 653 | -1, /* 093 (]) */ |
| 654 | 88, /* 094 (^) */ |
| 655 | 93, /* 095 (_) */ |
| 656 | 94, /* 096 (`) */ |
| 657 | 99, /* 097 (a) */ |
| 658 | -1, /* 098 (b) */ |
| 659 | 101, /* 099 (c) */ |
| 660 | 112, /* 100 (d) */ |
| 661 | 112, /* 101 (e) */ |
| 662 | -1, /* 102 (f) */ |
| 663 | -1, /* 103 (g) */ |
| 664 | 102, /* 104 (h) */ |
| 665 | 112, /* 105 (i) */ |
| 666 | -1, /* 106 (j) */ |
| 667 | -1, /* 107 (k) */ |
| 668 | 112, /* 108 (l) */ |
| 669 | -1, /* 109 (m) */ |
| 670 | 103, /* 110 (n) */ |
| 671 | 104, /* 111 (o) */ |
| 672 | 108, /* 112 (p) */ |
| 673 | -1, /* 113 (q) */ |
| 674 | 112, /* 114 (r) */ |
| 675 | 109, /* 115 (s) */ |
| 676 | 112, /* 116 (t) */ |
| 677 | 112, /* 117 (u) */ |
| 678 | -1, /* 118 (v) */ |
| 679 | -1, /* 119 (w) */ |
| 680 | 110, /* 120 (x) */ |
| 681 | 112, /* 121 (y) */ |
| 682 | -1, /* 122 (z) */ |
| 683 | -1, /* 123 ({) */ |
| 684 | 111, /* 124 (|) */ |
| 685 | -1, /* 125 (}) */ |
| 686 | 112, /* 126 (~) */ |
| 687 | -1, /* 127 (DEL) */ |
| 688 | /* END CSTYLED */ |
| 689 | }; |
| 690 | |
| 691 | /* |
| 692 | * IMPORTANT NOTE: This table MUST be kept in proper sorted order: |
| 693 | * The first and second characters in each entry must be in ASCII |
| 694 | * collating sequence (left to right). |
| 695 | * The table must be in ASCII collating sequence by first character |
| 696 | * (top to bottom). |
| 697 | */ |
| 698 | |
| 699 | /* COMPOSE + first character + second character => ISO character */ |
| 700 | |
| 701 | struct compose_sequence_t kb_compose_table[] = { |
| 702 | |
| 703 | /* BEGIN CSTYLED */ |
| 704 | {' ', ' ', 0xA0}, /* 000 */ /* NBSP (non-breaking space) */ |
| 705 | {'!', '!', 0xA1}, /* 001 */ /* inverted ! */ |
| 706 | {'!', 'P', 0xB6}, /* 002 */ /* paragraph mark */ |
| 707 | {'!', 'p', 0xB6}, /* 003 */ /* paragraph mark */ |
| 708 | {'"', '"', 0xA8}, /* 004 */ /* diaresis */ |
| 709 | {'"', 'A', 0xC4}, /* 005 */ /* A with diaresis */ |
| 710 | {'"', 'E', 0xCB}, /* 006 */ /* E with diaresis */ |
| 711 | {'"', 'I', 0xCF}, /* 007 */ /* I with diaresis */ |
| 712 | {'"', 'O', 0xD6}, /* 008 */ /* O with diaresis */ |
| 713 | {'"', 'U', 0xDC}, /* 009 */ /* U with diaresis */ |
| 714 | {'"', 'a', 0xE4}, /* 010 */ /* a with diaresis */ |
| 715 | {'"', 'e', 0xEB}, /* 011 */ /* e with diaresis */ |
| 716 | {'"', 'i', 0xEF}, /* 012 */ /* i with diaresis */ |
| 717 | {'"', 'o', 0xF6}, /* 013 */ /* o with diaresis */ |
| 718 | {'"', 'u', 0xFC}, /* 014 */ /* u with diaresis */ |
| 719 | {'"', 'y', 0xFF}, /* 015 */ /* y with diaresis */ |
| 720 | {'\'','A', 0xC1}, /* 016 */ /* A with acute accent */ |
| 721 | {'\'','E', 0xC9}, /* 017 */ /* E with acute accent */ |
| 722 | {'\'','I', 0xCD}, /* 018 */ /* I with acute accent */ |
| 723 | {'\'','O', 0xD3}, /* 019 */ /* O with acute accent */ |
| 724 | {'\'','U', 0xDA}, /* 020 */ /* U with acute accent */ |
| 725 | {'\'','Y', 0xDD}, /* 021 */ /* Y with acute accent */ |
| 726 | {'\'','a', 0xE1}, /* 022 */ /* a with acute accent */ |
| 727 | {'\'','e', 0xE9}, /* 023 */ /* e with acute accent */ |
| 728 | {'\'','i', 0xED}, /* 024 */ /* i with acute accent */ |
| 729 | {'\'','o', 0xF3}, /* 025 */ /* o with acute accent */ |
| 730 | {'\'','u', 0xFA}, /* 026 */ /* u with acute accent */ |
| 731 | {'\'','y', 0xFD}, /* 027 */ /* y with acute accent */ |
| 732 | {'*', 'A', 0xC5}, /* 028 */ /* A with ring */ |
| 733 | {'*', '^', 0xB0}, /* 029 */ /* degree */ |
| 734 | {'*', 'a', 0xE5}, /* 030 */ /* a with ring */ |
| 735 | {'+', '-', 0xB1}, /* 031 */ /* plus/minus */ |
| 736 | {',', ',', 0xB8}, /* 032 */ /* cedilla */ |
| 737 | {',', '-', 0xAC}, /* 033 */ /* not sign */ |
| 738 | {',', 'C', 0xC7}, /* 034 */ /* C with cedilla */ |
| 739 | {',', 'c', 0xE7}, /* 035 */ /* c with cedilla */ |
| 740 | {'-', '-', 0xAD}, /* 036 */ /* soft hyphen */ |
| 741 | {'-', ':', 0xF7}, /* 037 */ /* division sign */ |
| 742 | {'-', 'A', 0xAA}, /* 038 */ /* feminine superior numeral */ |
| 743 | {'-', 'D', 0xD0}, /* 039 */ /* Upper-case eth */ |
| 744 | {'-', 'L', 0xA3}, /* 040 */ /* pounds sterling */ |
| 745 | {'-', 'Y', 0xA5}, /* 041 */ /* yen */ |
| 746 | {'-', '^', 0xAF}, /* 042 */ /* macron */ |
| 747 | {'-', 'a', 0xAA}, /* 043 */ /* feminine superior numeral */ |
| 748 | {'-', 'd', 0xF0}, /* 044 */ /* Lower-case eth */ |
| 749 | {'-', 'l', 0xA3}, /* 045 */ /* pounds sterling */ |
| 750 | {'-', 'y', 0xA5}, /* 046 */ /* yen */ |
| 751 | {'-', '|', 0xAC}, /* 047 */ /* not sign */ |
| 752 | {'.', '^', 0xB7}, /* 048 */ /* centered dot */ |
| 753 | {'/', 'C', 0xA2}, /* 049 */ /* cent sign */ |
| 754 | {'/', 'O', 0xD8}, /* 050 */ /* O with slash */ |
| 755 | {'/', 'c', 0xA2}, /* 051 */ /* cent sign */ |
| 756 | {'/', 'o', 0xF8}, /* 052 */ /* o with slash */ |
| 757 | {'/', 'u', 0xB5}, /* 053 */ /* mu */ |
| 758 | {'0', 'X', 0xA4}, /* 054 */ /* currency symbol */ |
| 759 | {'0', '^', 0xB0}, /* 055 */ /* degree */ |
| 760 | {'0', 'x', 0xA4}, /* 056 */ /* currency symbol */ |
| 761 | {'1', '2', 0xBD}, /* 057 */ /* 1/2 */ |
| 762 | {'1', '4', 0xBC}, /* 058 */ /* 1/4 */ |
| 763 | {'1', '^', 0xB9}, /* 059 */ /* superior '1' */ |
| 764 | {'2', '^', 0xB2}, /* 060 */ /* superior '2' */ |
| 765 | {'3', '4', 0xBE}, /* 061 */ /* 3/4 */ |
| 766 | {'3', '^', 0xB3}, /* 062 */ /* superior '3' */ |
| 767 | {'<', '<', 0xAB}, /* 063 */ /* left guillemot */ |
| 768 | {'>', '>', 0xBB}, /* 064 */ /* right guillemot */ |
| 769 | {'?', '?', 0xBF}, /* 065 */ /* inverted ? */ |
| 770 | {'A', 'E', 0xC6}, /* 066 */ /* AE dipthong */ |
| 771 | {'A', '^', 0xC2}, /* 067 */ /* A with circumflex accent */ |
| 772 | {'A', '`', 0xC0}, /* 068 */ /* A with grave accent */ |
| 773 | {'A', '~', 0xC3}, /* 069 */ /* A with tilde */ |
| 774 | {'C', 'O', 0xA9}, /* 060 */ /* copyright */ |
| 775 | {'E', '^', 0xCA}, /* 071 */ /* E with circumflex accent */ |
| 776 | {'E', '`', 0xC8}, /* 072 */ /* E with grave accent */ |
| 777 | {'H', 'T', 0xDE}, /* 073 */ /* Upper-case thorn */ |
| 778 | {'I', '^', 0xCE}, /* 074 */ /* I with circumflex accent */ |
| 779 | {'I', '`', 0xCC}, /* 075 */ /* I with grave accent */ |
| 780 | {'N', '~', 0xD1}, /* 076 */ /* N with tilde */ |
| 781 | {'O', 'R', 0xAE}, /* 077 */ /* registered */ |
| 782 | {'O', 'S', 0xA7}, /* 078 */ /* section mark */ |
| 783 | {'O', 'X', 0xA4}, /* 079 */ /* currency symbol */ |
| 784 | {'O', '^', 0xD4}, /* 080 */ /* O with circumflex accent */ |
| 785 | {'O', '_', 0xBA}, /* 081 */ /* masculine superior numeral */ |
| 786 | {'O', '`', 0xD2}, /* 082 */ /* O with grave accent */ |
| 787 | {'O', '~', 0xD5}, /* 083 */ /* O with tilde */ |
| 788 | {'P', '|', 0xDE}, /* 084 */ /* Upper-case thorn */ |
| 789 | {'U', '^', 0xDB}, /* 085 */ /* U with circumflex accent */ |
| 790 | {'U', '`', 0xD9}, /* 086 */ /* U with grave accent */ |
| 791 | {'\\','\\',0xB4}, /* 087 */ /* acute accent */ |
| 792 | {'^', 'a', 0xE2}, /* 088 */ /* a with circumflex accent */ |
| 793 | {'^', 'e', 0xEA}, /* 089 */ /* e with circumflex accent */ |
| 794 | {'^', 'i', 0xEE}, /* 090 */ /* i with circumflex accent */ |
| 795 | {'^', 'o', 0xF4}, /* 091 */ /* o with circumflex accent */ |
| 796 | {'^', 'u', 0xFB}, /* 092 */ /* u with circumflex accent */ |
| 797 | {'_', 'o', 0xBA}, /* 093 */ /* masculine superior numeral */ |
| 798 | {'`', 'a', 0xE0}, /* 094 */ /* a with grave accent */ |
| 799 | {'`', 'e', 0xE8}, /* 095 */ /* e with grave accent */ |
| 800 | {'`', 'i', 0xEC}, /* 096 */ /* i with grave accent */ |
| 801 | {'`', 'o', 0xF2}, /* 097 */ /* o with grave accent */ |
| 802 | {'`', 'u', 0xF9}, /* 098 */ /* u with grave accent */ |
| 803 | {'a', 'e', 0xE6}, /* 099 */ /* ae dipthong */ |
| 804 | {'a', '~', 0xE3}, /* 100 */ /* a with tilde */ |
| 805 | {'c', 'o', 0xA9}, /* 101 */ /* copyright */ |
| 806 | {'h', 't', 0xFE}, /* 102 */ /* Lower-case thorn */ |
| 807 | {'n', '~', 0xF1}, /* 103 */ /* n with tilde */ |
| 808 | {'o', 'r', 0xAE}, /* 104 */ /* registered */ |
| 809 | {'o', 's', 0xA7}, /* 105 */ /* section mark */ |
| 810 | {'o', 'x', 0xA4}, /* 106 */ /* currency symbol */ |
| 811 | {'o', '~', 0xF5}, /* 107 */ /* o with tilde */ |
| 812 | {'p', '|', 0xFE}, /* 108 */ /* Lower-case thorn */ |
| 813 | {'s', 's', 0xDF}, /* 109 */ /* German double-s */ |
| 814 | {'x', 'x', 0xD7}, /* 110 */ /* multiplication sign */ |
| 815 | {'|', '|', 0xA6}, /* 111 */ /* broken bar */ |
| 816 | |
| 817 | {0, 0, 0}, /* end of table */ |
| 818 | }; |
| 819 | /* END CSTYLED */ |
| 820 | |
| 821 | /* |
| 822 | * Floating Accent Sequence Table |
| 823 | */ |
| 824 | |
| 825 | /* FA + ASCII character => ISO character */ |
| 826 | struct fltaccent_sequence_t kb_fltaccent_table[] = { |
| 827 | |
| 828 | {FA_UMLAUT, 'A', 0xC4}, /* A with umlaut */ |
| 829 | {FA_UMLAUT, 'E', 0xCB}, /* E with umlaut */ |
| 830 | {FA_UMLAUT, 'I', 0xCF}, /* I with umlaut */ |
| 831 | {FA_UMLAUT, 'O', 0xD6}, /* O with umlaut */ |
| 832 | {FA_UMLAUT, 'U', 0xDC}, /* U with umlaut */ |
| 833 | {FA_UMLAUT, 'a', 0xE4}, /* a with umlaut */ |
| 834 | {FA_UMLAUT, 'e', 0xEB}, /* e with umlaut */ |
| 835 | {FA_UMLAUT, 'i', 0xEF}, /* i with umlaut */ |
| 836 | {FA_UMLAUT, 'o', 0xF6}, /* o with umlaut */ |
| 837 | {FA_UMLAUT, 'u', 0xFC}, /* u with umlaut */ |
| 838 | {FA_UMLAUT, 'y', 0xFC}, /* y with umlaut */ |
| 839 | |
| 840 | {FA_CFLEX, 'A', 0xC2}, /* A with circumflex */ |
| 841 | {FA_CFLEX, 'E', 0xCA}, /* E with circumflex */ |
| 842 | {FA_CFLEX, 'I', 0xCE}, /* I with circumflex */ |
| 843 | {FA_CFLEX, 'O', 0xD4}, /* O with circumflex */ |
| 844 | {FA_CFLEX, 'U', 0xDB}, /* U with circumflex */ |
| 845 | {FA_CFLEX, 'a', 0xE2}, /* a with circumflex */ |
| 846 | {FA_CFLEX, 'e', 0xEA}, /* e with circumflex */ |
| 847 | {FA_CFLEX, 'i', 0xEE}, /* i with circumflex */ |
| 848 | {FA_CFLEX, 'o', 0xF4}, /* o with circumflex */ |
| 849 | {FA_CFLEX, 'u', 0xFB}, /* u with circumflex */ |
| 850 | |
| 851 | {FA_TILDE, 'A', 0xC3}, /* A with tilde */ |
| 852 | {FA_TILDE, 'N', 0xD1}, /* N with tilde */ |
| 853 | {FA_TILDE, 'O', 0xD5}, /* O with tilde */ |
| 854 | {FA_TILDE, 'a', 0xE3}, /* a with tilde */ |
| 855 | {FA_TILDE, 'n', 0xF1}, /* n with tilde */ |
| 856 | {FA_TILDE, 'o', 0xF5}, /* o with tilde */ |
| 857 | |
| 858 | {FA_CEDILLA, 'C', 0xC7}, /* C with cedilla */ |
| 859 | {FA_CEDILLA, 'c', 0xE7}, /* c with cedilla */ |
| 860 | |
| 861 | {FA_ACUTE, 'A', 0xC1}, /* A with acute accent */ |
| 862 | {FA_ACUTE, 'E', 0xC9}, /* E with acute accent */ |
| 863 | {FA_ACUTE, 'I', 0xCD}, /* I with acute accent */ |
| 864 | {FA_ACUTE, 'O', 0xD3}, /* O with acute accent */ |
| 865 | {FA_ACUTE, 'U', 0xDA}, /* U with acute accent */ |
| 866 | {FA_ACUTE, 'a', 0xE1}, /* a with acute accent */ |
| 867 | {FA_ACUTE, 'e', 0xE9}, /* e with acute accent */ |
| 868 | {FA_ACUTE, 'i', 0xED}, /* i with acute accent */ |
| 869 | {FA_ACUTE, 'o', 0xF3}, /* o with acute accent */ |
| 870 | {FA_ACUTE, 'u', 0xFA}, /* u with acute accent */ |
| 871 | {FA_ACUTE, 'y', 0xFD}, /* y with acute accent */ |
| 872 | |
| 873 | {FA_GRAVE, 'A', 0xC0}, /* A with grave accent */ |
| 874 | {FA_GRAVE, 'E', 0xC8}, /* E with grave accent */ |
| 875 | {FA_GRAVE, 'I', 0xCC}, /* I with grave accent */ |
| 876 | {FA_GRAVE, 'O', 0xD2}, /* O with grave accent */ |
| 877 | {FA_GRAVE, 'U', 0xD9}, /* U with grave accent */ |
| 878 | {FA_GRAVE, 'a', 0xE0}, /* a with grave accent */ |
| 879 | {FA_GRAVE, 'e', 0xE8}, /* e with grave accent */ |
| 880 | {FA_GRAVE, 'i', 0xEC}, /* i with grave accent */ |
| 881 | {FA_GRAVE, 'o', 0xF2}, /* o with grave accent */ |
| 882 | {FA_GRAVE, 'u', 0xF9}, /* u with grave accent */ |
| 883 | |
| 884 | {0, 0, 0}, /* end of table */ |
| 885 | }; |
| 886 | |
| 887 | /* |
| 888 | * Num Lock Table |
| 889 | */ |
| 890 | |
| 891 | /* Num Lock: pad key entry & 0x1F => ASCII character */ |
| 892 | uchar_t kb_numlock_table[] = { |
| 893 | '=', |
| 894 | '/', |
| 895 | '*', |
| 896 | '-', |
| 897 | ',', |
| 898 | |
| 899 | '7', |
| 900 | '8', |
| 901 | '9', |
| 902 | '+', |
| 903 | |
| 904 | '4', |
| 905 | '5', |
| 906 | '6', |
| 907 | |
| 908 | '1', |
| 909 | '2', |
| 910 | '3', |
| 911 | |
| 912 | '0', |
| 913 | '.', |
| 914 | '\n', /* Enter */ |
| 915 | }; |