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