Home | History | Annotate | Line # | Download | only in hil
      1  1.4  gutterid /*	$NetBSD: hilkbdmap.c,v 1.4 2022/08/11 23:38:45 gutteridge Exp $	*/
      2  1.1   tsutsui /*	$OpenBSD: hilkbdmap.c,v 1.7 2005/05/07 22:42:30 miod Exp $	*/
      3  1.1   tsutsui /*
      4  1.1   tsutsui  * Copyright (c) 2003, Miodrag Vallat.
      5  1.1   tsutsui  * All rights reserved.
      6  1.1   tsutsui  *
      7  1.1   tsutsui  * Redistribution and use in source and binary forms, with or without
      8  1.1   tsutsui  * modification, are permitted provided that the following conditions
      9  1.1   tsutsui  * are met:
     10  1.1   tsutsui  * 1. Redistributions of source code must retain the above copyright
     11  1.1   tsutsui  *    notice, this list of conditions and the following disclaimer.
     12  1.1   tsutsui  * 2. Redistributions in binary form must reproduce the above copyright
     13  1.1   tsutsui  *    notice, this list of conditions and the following disclaimer in the
     14  1.1   tsutsui  *    documentation and/or other materials provided with the distribution.
     15  1.1   tsutsui  *
     16  1.1   tsutsui  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     17  1.1   tsutsui  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     18  1.1   tsutsui  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     19  1.1   tsutsui  * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
     20  1.1   tsutsui  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     21  1.1   tsutsui  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
     22  1.1   tsutsui  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     23  1.1   tsutsui  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     24  1.1   tsutsui  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
     25  1.1   tsutsui  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     26  1.1   tsutsui  * POSSIBILITY OF SUCH DAMAGE.
     27  1.1   tsutsui  *
     28  1.1   tsutsui  */
     29  1.1   tsutsui 
     30  1.1   tsutsui #include "opt_wsdisplay_compat.h"
     31  1.1   tsutsui 
     32  1.1   tsutsui #include <sys/types.h>
     33  1.1   tsutsui #include <dev/wscons/wsksymdef.h>
     34  1.1   tsutsui #include <dev/wscons/wsksymvar.h>
     35  1.1   tsutsui #include <dev/hil/hilkbdmap.h>
     36  1.1   tsutsui 
     37  1.1   tsutsui #ifdef WSDISPLAY_COMPAT_RAWKBD
     38  1.1   tsutsui 
     39  1.1   tsutsui /*
     40  1.1   tsutsui  * Translate HIL keycodes to US keyboard XT scancodes, for proper
     41  1.1   tsutsui  * X11-over-wsmux operation.
     42  1.1   tsutsui  *
     43  1.1   tsutsui  * XXX: Needs re-think how we should treat RAWKBD code on NetBSD.
     44  1.1   tsutsui  */
     45  1.2   tsutsui const uint8_t hilkbd_raw[0x80] = {
     46  1.1   tsutsui 	0x9d, 0x00, 0xb8, 0x38, 0x36, 0x2a, 0x1d, 0x6a,
     47  1.1   tsutsui 	0x4b, 0x48, 0x4c, 0x49, 0x4d, 0x47, 0x53, 0x9c,
     48  1.1   tsutsui 	0x4f, 0xb5, 0x50, 0x4e, 0x51, 0x37, 0x52, 0x4a,
     49  1.1   tsutsui 	0x30, 0x2f, 0x2e, 0x2d, 0x2c, 0x00, 0x00, 0x01,
     50  1.1   tsutsui 	0x00, 0x44, 0x00, 0x57, 0x53, 0x43, 0x0f, 0x58,
     51  1.1   tsutsui 	0x23, 0x22, 0x21, 0x20, 0x1f, 0x1e, 0x00, 0x3a,
     52  1.1   tsutsui 	0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x0f,
     53  1.1   tsutsui 	0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x29,
     54  1.1   tsutsui 	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     55  1.1   tsutsui 	0x67, 0x3e, 0x3d, 0x3c, 0x3b, 0x00, 0x46, 0x1c,
     56  1.1   tsutsui 	0x45, 0x3f, 0x40, 0x41, 0x42, 0x00, 0x00, 0x00,
     57  1.1   tsutsui 	0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x00, 0x00,
     58  1.1   tsutsui 	0x17, 0x18, 0x19, 0x1a, 0x1b, 0x2b, 0xd2, 0xd3,
     59  1.1   tsutsui 	0x24, 0x25, 0x26, 0x27, 0x28, 0x1c, 0xc7, 0xc9,
     60  1.1   tsutsui 	0x32, 0x33, 0x34, 0x35, 0x00, 0xcf, 0x00, 0xd1,
     61  1.1   tsutsui 	0x31, 0x39, 0x00, 0x00, 0xcb, 0xd0, 0xc8, 0xcd
     62  1.1   tsutsui };
     63  1.1   tsutsui #endif
     64  1.1   tsutsui 
     65  1.1   tsutsui #define KC(n) KS_KEYCODE(n)
     66  1.1   tsutsui 
     67  1.1   tsutsui /*
     68  1.1   tsutsui  * 1f. US ASCII
     69  1.1   tsutsui  *
     70  1.1   tsutsui  * We use the same table for PS/2 and old HIL keyboards, as the only
     71  1.1   tsutsui  * differences are a few keys which are only present in one of both layouts,
     72  1.1   tsutsui  * and the one-function-only keypad in the old HIL flavour (hilkbd.c knows
     73  1.1   tsutsui  * about this and does The Right Thing).
     74  1.1   tsutsui  */
     75  1.1   tsutsui 
     76  1.1   tsutsui static const keysym_t hilkbd_keydesc_us[] = {
     77  1.1   tsutsui /*  pos      command		normal		shifted */
     78  1.1   tsutsui     KC(0),   KS_Cmd1,		KS_Control_R,
     79  1.1   tsutsui     KC(2),   KS_Cmd2,		KS_Mode_switch,	KS_Multi_key,
     80  1.1   tsutsui     KC(3),   KS_Cmd2,		KS_Alt_L,
     81  1.1   tsutsui     KC(4),   KS_Cmd,		KS_Shift_R,
     82  1.1   tsutsui     KC(5),   KS_Cmd,		KS_Shift_L,
     83  1.1   tsutsui     KC(6),   KS_Cmd1,		KS_Control_L,
     84  1.1   tsutsui     KC(7),   KS_Cmd_Debugger,			/* Break/Reset */
     85  1.1   tsutsui     KC(8),			KS_KP_Left,	KS_KP_4,
     86  1.1   tsutsui     KC(9),			KS_KP_Up,	KS_KP_8,
     87  1.1   tsutsui     KC(10),			KS_KP_Begin,	KS_KP_5,
     88  1.1   tsutsui     KC(11),			KS_KP_Prior,	KS_KP_9,
     89  1.1   tsutsui     KC(12),			KS_KP_Right,	KS_KP_6,
     90  1.1   tsutsui     KC(13),			KS_KP_Home,	KS_KP_7,
     91  1.1   tsutsui     KC(14),			KS_KP_Separator,
     92  1.1   tsutsui     KC(15),			KS_KP_Enter,
     93  1.1   tsutsui     KC(16),			KS_KP_End,	KS_KP_1,
     94  1.1   tsutsui     KC(17),			KS_KP_Divide,
     95  1.1   tsutsui     KC(18),			KS_KP_Down,	KS_KP_2,
     96  1.1   tsutsui     KC(19),			KS_KP_Add,
     97  1.1   tsutsui     KC(20),			KS_KP_Next,	KS_KP_3,
     98  1.1   tsutsui     KC(21),			KS_KP_Multiply,
     99  1.1   tsutsui     KC(22),			KS_KP_Insert,	KS_KP_0,
    100  1.1   tsutsui     KC(23),			KS_KP_Subtract,
    101  1.1   tsutsui     KC(24),			KS_b,
    102  1.1   tsutsui     KC(25),			KS_v,		KS_V,		KS_section,
    103  1.1   tsutsui     KC(26),			KS_c,		KS_C,		KS_ccedilla,
    104  1.1   tsutsui     KC(27),			KS_x,		KS_X,
    105  1.1   tsutsui     KC(28),			KS_z,		KS_Z,		KS_paragraph,
    106  1.1   tsutsui     /* 29 Kanji Left */
    107  1.1   tsutsui 
    108  1.1   tsutsui     KC(31), KS_Cmd_Debugger,	KS_Escape,	KS_Delete,
    109  1.1   tsutsui     KC(33), KS_Cmd_Screen9,	KS_f10,		/* also KS_KP_F2 */
    110  1.1   tsutsui     KC(35),			KS_f11,		/* also KS_KP_F3 */
    111  1.1   tsutsui     KC(36),			KS_KP_Delete,	KS_KP_Decimal,
    112  1.1   tsutsui     KC(37), KS_Cmd_Screen8,	KS_f9,		/* also KS_KP_F1 */
    113  1.1   tsutsui     KC(38),			KS_Tab,		/* numeric pad */
    114  1.1   tsutsui     KC(39),			KS_f12,		/* also KS_KP_F4 */
    115  1.1   tsutsui     KC(40),			KS_h,		KS_H,		KS_yen,
    116  1.1   tsutsui     KC(41),			KS_g,		KS_G,		KS_currency,
    117  1.1   tsutsui     KC(42),			KS_f,
    118  1.1   tsutsui     KC(43),			KS_d,		KS_D,		KS_eth,
    119  1.1   tsutsui     KC(44),			KS_s,		KS_S,		KS_ssharp,
    120  1.1   tsutsui     KC(45),			KS_a,		KS_A,		KS_aring,
    121  1.1   tsutsui     /* 46 Mode_Switch ??? */
    122  1.1   tsutsui     KC(47),			KS_Caps_Lock,
    123  1.1   tsutsui     KC(48),			KS_u,		KS_U,		KS_dead_diaeresis,
    124  1.1   tsutsui     KC(49),			KS_y,		KS_Y,		KS_dead_circumflex,
    125  1.1   tsutsui     KC(50),			KS_t,		KS_T,		KS_dead_grave,
    126  1.1   tsutsui     KC(51),			KS_r,		KS_R,		KS_dead_acute,
    127  1.1   tsutsui     KC(52),			KS_e,		KS_E,		KS_ae,
    128  1.1   tsutsui     KC(53),			KS_w,		KS_W,		KS_asciitilde,
    129  1.1   tsutsui     KC(54),			KS_q,		KS_Q,		KS_periodcentered,
    130  1.1   tsutsui     KC(55),			KS_Tab,
    131  1.1   tsutsui     KC(56),			KS_7,		KS_ampersand,	KS_backslash,
    132  1.1   tsutsui     KC(57),			KS_6,		KS_asciicircum,	KS_asciicircum,
    133  1.1   tsutsui     KC(58),			KS_5,		KS_percent,	KS_onehalf,
    134  1.1   tsutsui     KC(59),			KS_4,		KS_dollar,
    135  1.1   tsutsui 				KS_onequarter,	KS_threequarters,
    136  1.1   tsutsui     KC(60),			KS_3,		KS_numbersign,	KS_numbersign,
    137  1.1   tsutsui     KC(61),			KS_2,		KS_at,		KS_at,
    138  1.1   tsutsui     KC(62),			KS_1,		KS_exclam,	KS_exclamdown,
    139  1.1   tsutsui     KC(63),			KS_grave,	KS_asciitilde,
    140  1.1   tsutsui 				KS_guillemotleft,KS_guillemotright,
    141  1.1   tsutsui 
    142  1.1   tsutsui     KC(72),			KS_Print_Screen, /* Menu */
    143  1.1   tsutsui     KC(73),  KS_Cmd_Screen3,	KS_f4,
    144  1.1   tsutsui     KC(74),  KS_Cmd_Screen2,	KS_f3,
    145  1.1   tsutsui     KC(75),  KS_Cmd_Screen1,	KS_f2,
    146  1.1   tsutsui     KC(76),  KS_Cmd_Screen0,	KS_f1,
    147  1.1   tsutsui 
    148  1.1   tsutsui     KC(78),			KS_Hold_Screen,
    149  1.1   tsutsui     KC(79),			KS_Return,	KS_Print_Screen,
    150  1.1   tsutsui     KC(80),			KS_Num_Lock,	/* System/User */
    151  1.1   tsutsui     KC(81),  KS_Cmd_Screen4,	KS_f5,
    152  1.1   tsutsui     KC(82),  KS_Cmd_Screen5,	KS_f6,
    153  1.1   tsutsui     KC(83),  KS_Cmd_Screen6,	KS_f7,
    154  1.1   tsutsui     KC(84),  KS_Cmd_Screen7,	KS_f8,
    155  1.1   tsutsui 
    156  1.1   tsutsui     /* 86 Clear line */
    157  1.1   tsutsui     KC(87),			KS_Clear,
    158  1.1   tsutsui     KC(88),			KS_8,		KS_asterisk,
    159  1.1   tsutsui 				KS_bracketleft,	KS_braceleft,
    160  1.1   tsutsui     KC(89),			KS_9,		KS_parenleft,
    161  1.1   tsutsui 				KS_bracketright,KS_braceright,
    162  1.1   tsutsui     KC(90),			KS_0,		KS_parenright,	KS_questiondown,
    163  1.1   tsutsui     KC(91),			KS_minus,	KS_underscore,	KS_macron,
    164  1.1   tsutsui     KC(92),			KS_equal,	KS_plus,	KS_plusminus,
    165  1.1   tsutsui     KC(93),  KS_Cmd_ResetEmul,	KS_Delete,	/* Backspace */
    166  1.1   tsutsui     /* 94 Insert line */
    167  1.1   tsutsui     /* 95 Delete line */
    168  1.1   tsutsui     KC(96),			KS_i,		KS_I,		KS_dead_tilde,
    169  1.1   tsutsui     KC(97),			KS_o,		KS_O,		KS_oslash,
    170  1.1   tsutsui     KC(98),			KS_p,		KS_P,		KS_thorn,
    171  1.1   tsutsui     KC(99),			KS_bracketleft,	KS_braceleft,	KS_degree,
    172  1.1   tsutsui     KC(100),			KS_bracketright,KS_braceright,
    173  1.1   tsutsui 				KS_bar,		KS_brokenbar,
    174  1.1   tsutsui     KC(101),			KS_backslash,	KS_bar,		KS_mu,
    175  1.1   tsutsui     KC(102),			KS_Insert,
    176  1.1   tsutsui     KC(103),			KS_Delete,
    177  1.1   tsutsui     KC(104),			KS_j,		KS_J,		KS_dollar,
    178  1.1   tsutsui     KC(105),			KS_k,		KS_K,		KS_cent,
    179  1.1   tsutsui     KC(106),			KS_l,		KS_L,		KS_sterling,
    180  1.1   tsutsui     KC(107),			KS_semicolon,	KS_colon,
    181  1.1   tsutsui     KC(108),			KS_apostrophe,	KS_quotedbl,
    182  1.1   tsutsui 				KS_grave,	KS_apostrophe,
    183  1.1   tsutsui     KC(109),			KS_Return,
    184  1.1   tsutsui     KC(110),			KS_Home,
    185  1.1   tsutsui     KC(111),			KS_Prior,
    186  1.1   tsutsui     KC(112),			KS_m,		KS_M,		KS_masculine,
    187  1.1   tsutsui     KC(113),			KS_comma,	KS_less,	KS_less,
    188  1.1   tsutsui     KC(114),			KS_period,	KS_greater,	KS_greater,
    189  1.1   tsutsui     KC(115),			KS_slash,	KS_question,	KS_underscore,
    190  1.1   tsutsui 
    191  1.1   tsutsui     KC(117),			KS_End,		/* Select */
    192  1.1   tsutsui 
    193  1.1   tsutsui     KC(119),			KS_Next,
    194  1.1   tsutsui     KC(120),			KS_n,		KS_N,		KS_ordfeminine,
    195  1.1   tsutsui     KC(121),			KS_space,
    196  1.1   tsutsui 
    197  1.1   tsutsui     /* 123 Kanji Right */
    198  1.1   tsutsui     KC(124),			KS_Left,
    199  1.1   tsutsui     KC(125),			KS_Down,
    200  1.1   tsutsui     KC(126),			KS_Up,
    201  1.1   tsutsui     KC(127),			KS_Right,
    202  1.1   tsutsui };
    203  1.1   tsutsui 
    204  1.1   tsutsui /*
    205  1.1   tsutsui  * 0e. Swedish
    206  1.1   tsutsui  */
    207  1.1   tsutsui 
    208  1.1   tsutsui static const keysym_t hilkbd_keydesc_sv[] = {
    209  1.1   tsutsui     KC(56),	KS_7,		KS_slash,	KS_backslash,
    210  1.1   tsutsui     KC(57),	KS_6,		KS_ampersand,	KS_asciicircum,
    211  1.1   tsutsui     KC(61),	KS_2,		KS_quotedbl,	KS_at,
    212  1.1   tsutsui     KC(63),	KS_less,	KS_greater,
    213  1.1   tsutsui 		KS_guillemotleft,KS_guillemotright,
    214  1.1   tsutsui     KC(88),	KS_8,		KS_parenleft,	KS_bracketleft,	KS_braceleft,
    215  1.1   tsutsui     KC(89),	KS_9,		KS_parenright,	KS_bracketright,KS_braceright,
    216  1.1   tsutsui     KC(90),	KS_0,		KS_equal,	KS_exclamdown,
    217  1.1   tsutsui     KC(91),	KS_plus,	KS_question,	KS_macron,
    218  1.1   tsutsui     KC(92),	KS_eacute,	KS_Eacute,	KS_plusminus,
    219  1.3   tsutsui     KC(99),	KS_aring,	KS_Aring,	KS_degree,
    220  1.3   tsutsui     KC(100),	KS_udiaeresis,	KS_Udiaeresis,	KS_bar,		KS_brokenbar,
    221  1.3   tsutsui     KC(101),	KS_apostrophe,	KS_asterisk,	KS_mu,
    222  1.1   tsutsui     KC(107),	KS_odiaeresis,
    223  1.1   tsutsui     KC(108),	KS_adiaeresis,	KS_Adiaeresis,	KS_grave,	KS_apostrophe,
    224  1.1   tsutsui     KC(113),	KS_comma,	KS_semicolon,	KS_less,
    225  1.1   tsutsui     KC(114),	KS_period,	KS_colon,	KS_greater,
    226  1.1   tsutsui     KC(115),	KS_minus,	KS_underscore,	KS_underscore
    227  1.1   tsutsui };
    228  1.1   tsutsui 
    229  1.1   tsutsui static const keysym_t hilkbd_keydesc_sv_nodead[] = {
    230  1.1   tsutsui     KC(48),	KS_u,		KS_U,		KS_diaeresis,
    231  1.1   tsutsui     KC(49),	KS_y,		KS_Y,		KS_asciicircum,
    232  1.1   tsutsui     KC(50),	KS_t,		KS_T,		KS_grave,
    233  1.1   tsutsui     KC(51),	KS_r,		KS_R,		KS_apostrophe,
    234  1.1   tsutsui     KC(96),	KS_i,		KS_I,		KS_asciitilde,
    235  1.1   tsutsui };
    236  1.1   tsutsui 
    237  1.1   tsutsui static const keysym_t hilkbd_keydesc_sv_ps2[] = {
    238  1.1   tsutsui     KC(24),	KS_b,
    239  1.1   tsutsui     KC(25),	KS_v,
    240  1.1   tsutsui     KC(26),	KS_c,
    241  1.1   tsutsui     KC(27),	KS_x,
    242  1.1   tsutsui     KC(28),	KS_z,
    243  1.1   tsutsui     KC(36),	KS_KP_Separator,KS_KP_Delete,
    244  1.1   tsutsui     KC(40),	KS_h,
    245  1.1   tsutsui     KC(41),	KS_g,
    246  1.1   tsutsui     KC(42),	KS_f,
    247  1.1   tsutsui     KC(43),	KS_d,
    248  1.1   tsutsui     KC(44),	KS_s,
    249  1.1   tsutsui     KC(45),	KS_a,
    250  1.1   tsutsui     KC(48),	KS_u,
    251  1.1   tsutsui     KC(49),	KS_y,
    252  1.1   tsutsui     KC(50),	KS_t,
    253  1.1   tsutsui     KC(51),	KS_r,
    254  1.1   tsutsui     KC(52),	KS_e,
    255  1.1   tsutsui     KC(53),	KS_w,
    256  1.1   tsutsui     KC(54),	KS_q,
    257  1.1   tsutsui     KC(56),	KS_7,		KS_slash,	KS_braceleft,
    258  1.1   tsutsui     KC(57),	KS_6,		KS_ampersand,
    259  1.1   tsutsui     KC(58),	KS_5,		KS_percent,
    260  1.1   tsutsui     KC(59),	KS_4,		KS_currency,	KS_dollar,
    261  1.1   tsutsui     KC(60),	KS_3,		KS_numbersign,	KS_sterling,
    262  1.1   tsutsui     KC(61),	KS_2,		KS_quotedbl,	KS_at,
    263  1.1   tsutsui     KC(62),	KS_1,		KS_exclam,
    264  1.1   tsutsui     KC(63),	KS_section,	KS_onehalf,
    265  1.1   tsutsui     KC(88),	KS_8,		KS_parenleft,	KS_bracketleft,
    266  1.1   tsutsui     KC(89),	KS_9,		KS_parenright,	KS_bracketright,
    267  1.1   tsutsui     KC(90),	KS_0,		KS_equal,	KS_braceright,
    268  1.1   tsutsui     KC(91),	KS_minus,	KS_question,	KS_backslash,
    269  1.1   tsutsui     KC(92),	KS_dead_acute,	KS_dead_grave,
    270  1.1   tsutsui     KC(96),	KS_i,
    271  1.1   tsutsui     KC(97),	KS_o,
    272  1.1   tsutsui     KC(98),	KS_p,
    273  1.1   tsutsui     KC(99),	KS_aring,
    274  1.1   tsutsui     KC(100),	KS_dead_diaeresis,KS_dead_circumflex,KS_dead_tilde,
    275  1.1   tsutsui     KC(104),	KS_j,
    276  1.1   tsutsui     KC(105),	KS_k,
    277  1.1   tsutsui     KC(106),	KS_l,
    278  1.1   tsutsui     KC(107),	KS_odiaeresis,
    279  1.1   tsutsui     KC(108),	KS_adiaeresis,
    280  1.1   tsutsui     KC(112),	KS_m,
    281  1.1   tsutsui     KC(113),	KS_comma,	KS_semicolon,
    282  1.1   tsutsui     KC(114),	KS_period,	KS_colon,
    283  1.1   tsutsui     KC(115),	KS_minus,	KS_underscore,
    284  1.1   tsutsui     KC(116),	KS_apostrophe,	KS_asterisk,
    285  1.1   tsutsui     KC(118),	KS_less,	KS_greater,	KS_bar,
    286  1.1   tsutsui     KC(120),	KS_n
    287  1.1   tsutsui };
    288  1.1   tsutsui 
    289  1.1   tsutsui static const keysym_t hilkbd_keydesc_sv_ps2_nodead[] = {
    290  1.1   tsutsui     KC(92),	KS_apostrophe,	KS_grave,
    291  1.1   tsutsui     KC(100),	KS_diaeresis,	KS_asciicircum,	KS_asciitilde,
    292  1.1   tsutsui };
    293  1.1   tsutsui 
    294  1.1   tsutsui /*
    295  1.1   tsutsui  * 0f. German
    296  1.1   tsutsui  */
    297  1.1   tsutsui 
    298  1.1   tsutsui static const keysym_t hilkbd_keydesc_de[] = {
    299  1.1   tsutsui     KC(28),	KS_y,		KS_Y,		KS_paragraph,
    300  1.1   tsutsui     KC(49),	KS_z,		KS_Z,		KS_dead_circumflex,
    301  1.1   tsutsui     KC(56),	KS_7,		KS_slash,	KS_backslash,
    302  1.1   tsutsui     KC(57),	KS_6,		KS_ampersand,	KS_asciicircum,
    303  1.1   tsutsui     KC(60),	KS_3,		KS_section,	KS_numbersign,
    304  1.1   tsutsui     KC(61),	KS_2,		KS_quotedbl,	KS_at,
    305  1.1   tsutsui     KC(63),	KS_less,	KS_greater,
    306  1.1   tsutsui 		KS_guillemotleft,KS_guillemotright,
    307  1.1   tsutsui     KC(88),	KS_8,		KS_parenleft,
    308  1.1   tsutsui 		KS_bracketleft,	KS_braceleft,
    309  1.1   tsutsui     KC(89),	KS_9,		KS_parenright,
    310  1.1   tsutsui 		KS_bracketright,KS_braceright,
    311  1.1   tsutsui     KC(90),	KS_0,		KS_equal,	KS_exclamdown,
    312  1.1   tsutsui     KC(91),	KS_ssharp,	KS_question,	KS_macron,
    313  1.1   tsutsui     KC(92),	KS_dead_acute,	KS_dead_grave,	KS_plusminus,
    314  1.1   tsutsui     KC(99),	KS_udiaeresis,	KS_Udiaeresis,	KS_dead_abovering,
    315  1.1   tsutsui     KC(100),	KS_plus,	KS_asterisk,	KS_bar,		KS_brokenbar,
    316  1.1   tsutsui     KC(101),	KS_sterling,	KS_dead_circumflex,KS_mu,
    317  1.1   tsutsui     KC(107),	KS_odiaeresis,
    318  1.1   tsutsui     KC(108),	KS_adiaeresis,	KS_Adiaeresis,	KS_grave,	KS_apostrophe,
    319  1.1   tsutsui     KC(113),	KS_comma,	KS_semicolon,	KS_less,
    320  1.1   tsutsui     KC(114),	KS_period,	KS_colon,	KS_greater,
    321  1.1   tsutsui     KC(115),	KS_minus,	KS_underscore,	KS_underscore
    322  1.1   tsutsui };
    323  1.1   tsutsui 
    324  1.1   tsutsui static const keysym_t hilkbd_keydesc_de_nodead[] = {
    325  1.1   tsutsui     KC(48),	KS_u,		KS_U,		KS_diaeresis,
    326  1.1   tsutsui     KC(49),	KS_z,		KS_Z,		KS_asciicircum,
    327  1.1   tsutsui     KC(50),	KS_t,		KS_T,		KS_grave,
    328  1.1   tsutsui     KC(51),	KS_r,		KS_R,		KS_apostrophe,
    329  1.1   tsutsui     KC(92),	KS_apostrophe,	KS_grave,	KS_plusminus,
    330  1.1   tsutsui     KC(99),	KS_udiaeresis,	KS_Udiaeresis,	KS_degree,
    331  1.1   tsutsui     KC(101),	KS_sterling,	KS_asciicircum,	KS_mu,
    332  1.1   tsutsui     KC(96),	KS_i,		KS_I,		KS_asciitilde
    333  1.1   tsutsui };
    334  1.1   tsutsui 
    335  1.1   tsutsui static const keysym_t hilkbd_keydesc_de_ps2[] = {
    336  1.1   tsutsui     KC(24),	KS_b,
    337  1.1   tsutsui     KC(25),	KS_v,
    338  1.1   tsutsui     KC(26),	KS_c,
    339  1.1   tsutsui     KC(27),	KS_x,
    340  1.1   tsutsui     KC(28),	KS_y,
    341  1.1   tsutsui     KC(36),	KS_KP_Separator,KS_KP_Delete,
    342  1.1   tsutsui     KC(40),	KS_h,
    343  1.1   tsutsui     KC(41),	KS_g,
    344  1.1   tsutsui     KC(42),	KS_f,
    345  1.1   tsutsui     KC(43),	KS_d,
    346  1.1   tsutsui     KC(44),	KS_s,
    347  1.1   tsutsui     KC(45),	KS_a,
    348  1.1   tsutsui     KC(48),	KS_u,
    349  1.1   tsutsui     KC(49),	KS_z,		KS_Z,		KS_dead_circumflex,
    350  1.1   tsutsui     KC(50),	KS_t,
    351  1.1   tsutsui     KC(51),	KS_r,
    352  1.1   tsutsui     KC(52),	KS_e,
    353  1.1   tsutsui     KC(53),	KS_w,
    354  1.1   tsutsui     KC(54),	KS_q,		KS_Q,		KS_at,
    355  1.1   tsutsui     KC(56),	KS_7,		KS_slash,	KS_braceleft,
    356  1.1   tsutsui     KC(57),	KS_6,		KS_ampersand,
    357  1.1   tsutsui     KC(58),	KS_5,		KS_percent,
    358  1.1   tsutsui     KC(59),	KS_4,		KS_dollar,
    359  1.1   tsutsui     KC(60),	KS_3,		KS_section,	KS_threesuperior,
    360  1.1   tsutsui     KC(61),	KS_2,		KS_quotedbl,	KS_twosuperior,
    361  1.1   tsutsui     KC(62),	KS_1,		KS_exclam,
    362  1.1   tsutsui     KC(63),	KS_dead_circumflex,	KS_dead_abovering,
    363  1.1   tsutsui     KC(88),	KS_8,		KS_parenleft,	KS_bracketleft,
    364  1.1   tsutsui     KC(89),	KS_9,		KS_parenright,	KS_bracketright,
    365  1.1   tsutsui     KC(90),	KS_0,		KS_equal,	KS_braceright,
    366  1.1   tsutsui     KC(91),	KS_ssharp,	KS_question,	KS_backslash,
    367  1.1   tsutsui     KC(92),	KS_dead_acute,	KS_dead_grave,
    368  1.1   tsutsui     KC(96),	KS_i,
    369  1.1   tsutsui     KC(97),	KS_o,
    370  1.1   tsutsui     KC(98),	KS_p,
    371  1.1   tsutsui     KC(99),	KS_udiaeresis,
    372  1.1   tsutsui     KC(100),	KS_plus,	KS_asterisk,	KS_dead_tilde,
    373  1.1   tsutsui     KC(104),	KS_j,
    374  1.1   tsutsui     KC(105),	KS_k,
    375  1.1   tsutsui     KC(106),	KS_l,
    376  1.1   tsutsui     KC(107),	KS_odiaeresis,
    377  1.1   tsutsui     KC(108),	KS_adiaeresis,
    378  1.1   tsutsui     KC(112),	KS_m,		KS_M,		KS_mu,
    379  1.1   tsutsui     KC(113),	KS_comma,	KS_semicolon,
    380  1.1   tsutsui     KC(114),	KS_period,	KS_colon,
    381  1.1   tsutsui     KC(115),	KS_minus,	KS_underscore,
    382  1.1   tsutsui     KC(116),	KS_numbersign,	KS_apostrophe,
    383  1.1   tsutsui     KC(118),	KS_less,	KS_greater, 	KS_bar,
    384  1.1   tsutsui     KC(120),	KS_n
    385  1.1   tsutsui };
    386  1.1   tsutsui 
    387  1.1   tsutsui static const keysym_t hilkbd_keydesc_de_ps2_nodead[] = {
    388  1.1   tsutsui     KC(49),	KS_z,		KS_Z,		KS_asciicircum,
    389  1.1   tsutsui     KC(63),	KS_asciicircum,	KS_degree,
    390  1.1   tsutsui     KC(92),	KS_apostrophe,	KS_grave,
    391  1.1   tsutsui     KC(100),	KS_plus,	KS_asterisk,	KS_asciitilde
    392  1.1   tsutsui };
    393  1.1   tsutsui 
    394  1.1   tsutsui /*
    395  1.1   tsutsui  * 17. English
    396  1.1   tsutsui  */
    397  1.1   tsutsui 
    398  1.1   tsutsui static const keysym_t hilkbd_keydesc_uk[] = {
    399  1.1   tsutsui     KC(56),	KS_7,		KS_asciicircum,	KS_backslash,
    400  1.1   tsutsui     KC(57),	KS_6,		KS_ampersand,	KS_asciicircum,
    401  1.1   tsutsui     KC(60),	KS_3,		KS_sterling,	KS_numbersign,
    402  1.1   tsutsui     KC(61),	KS_2,		KS_quotedbl,	KS_at,
    403  1.1   tsutsui     KC(88),	KS_8,		KS_parenleft,	KS_bracketleft,	KS_braceleft,
    404  1.1   tsutsui     KC(89),	KS_9,		KS_parenright,	KS_bracketright,KS_braceright,
    405  1.1   tsutsui     KC(90),	KS_0,		KS_equal,	KS_questiondown,
    406  1.1   tsutsui     KC(91),	KS_plus,	KS_question,	KS_macron,
    407  1.1   tsutsui     KC(92),	KS_apostrophe,	KS_slash,	KS_plusminus,
    408  1.1   tsutsui     KC(101),	KS_less,	KS_greater,	KS_mu,
    409  1.1   tsutsui     KC(107),	KS_asterisk,	KS_at,
    410  1.1   tsutsui     KC(108),	KS_backslash,	KS_bar,		KS_grave,	KS_apostrophe,
    411  1.1   tsutsui     KC(113),	KS_comma,	KS_semicolon,	KS_less,
    412  1.1   tsutsui     KC(114),	KS_period,	KS_colon,	KS_greater,
    413  1.1   tsutsui     KC(115),	KS_minus,	KS_underscore,	KS_underscore
    414  1.1   tsutsui };
    415  1.1   tsutsui 
    416  1.1   tsutsui static const keysym_t hilkbd_keydesc_uk_ps2[] = {
    417  1.1   tsutsui     KC(24),	KS_b,
    418  1.1   tsutsui     KC(25),	KS_v,
    419  1.1   tsutsui     KC(26),	KS_c,
    420  1.1   tsutsui     KC(27),	KS_x,
    421  1.1   tsutsui     KC(28),	KS_z,
    422  1.1   tsutsui     KC(40),	KS_h,
    423  1.1   tsutsui     KC(41),	KS_g,
    424  1.1   tsutsui     KC(42),	KS_f,
    425  1.1   tsutsui     KC(43),	KS_d,
    426  1.1   tsutsui     KC(44),	KS_s,
    427  1.1   tsutsui     KC(45),	KS_a,
    428  1.1   tsutsui     KC(48),	KS_u,
    429  1.1   tsutsui     KC(49),	KS_y,
    430  1.1   tsutsui     KC(50),	KS_t,
    431  1.1   tsutsui     KC(51),	KS_r,
    432  1.1   tsutsui     KC(52),	KS_e,
    433  1.1   tsutsui     KC(53),	KS_w,
    434  1.1   tsutsui     KC(54),	KS_q,
    435  1.1   tsutsui     KC(56),	KS_7,		KS_ampersand,
    436  1.1   tsutsui     KC(57),	KS_6,		KS_asciicircum,
    437  1.1   tsutsui     KC(58),	KS_5,		KS_percent,
    438  1.1   tsutsui     KC(59),	KS_4,		KS_dollar,
    439  1.1   tsutsui     KC(60),	KS_3,		KS_sterling,
    440  1.1   tsutsui     KC(61),	KS_2,		KS_quotedbl,
    441  1.1   tsutsui     KC(62),	KS_1,		KS_exclam,
    442  1.1   tsutsui     KC(63),	KS_grave,	KS_notsign,	KS_bar,
    443  1.1   tsutsui     KC(88),	KS_8,		KS_asterisk,
    444  1.1   tsutsui     KC(89),	KS_9,		KS_parenleft,
    445  1.1   tsutsui     KC(90),	KS_0,		KS_parenright,
    446  1.1   tsutsui     KC(91),	KS_minus,	KS_underscore,
    447  1.1   tsutsui     KC(92),	KS_equal,	KS_plus,
    448  1.1   tsutsui     KC(96),	KS_i,
    449  1.1   tsutsui     KC(97),	KS_o,
    450  1.1   tsutsui     KC(98),	KS_p,
    451  1.1   tsutsui     KC(99),	KS_bracketleft,	KS_braceleft,
    452  1.1   tsutsui     KC(100),	KS_bracketright,KS_braceright,
    453  1.1   tsutsui     KC(104),	KS_j,
    454  1.1   tsutsui     KC(105),	KS_k,
    455  1.1   tsutsui     KC(106),	KS_l,
    456  1.1   tsutsui     KC(107),	KS_semicolon,	KS_colon,
    457  1.1   tsutsui     KC(108),	KS_apostrophe,	KS_at,
    458  1.1   tsutsui     KC(112),	KS_m,
    459  1.1   tsutsui     KC(113),	KS_comma,	KS_less,
    460  1.1   tsutsui     KC(114),	KS_period,	KS_greater,
    461  1.1   tsutsui     KC(115),	KS_slash,	KS_question,
    462  1.1   tsutsui     KC(116),	KS_numbersign,	KS_asciitilde,
    463  1.1   tsutsui     KC(118),	KS_backslash,	KS_brokenbar,
    464  1.1   tsutsui     KC(120),	KS_n
    465  1.1   tsutsui };
    466  1.1   tsutsui 
    467  1.1   tsutsui /*
    468  1.1   tsutsui  * 1b. French
    469  1.1   tsutsui  */
    470  1.1   tsutsui 
    471  1.1   tsutsui static const keysym_t hilkbd_keydesc_fr[] = {
    472  1.1   tsutsui     KC(28),	KS_w,		KS_W,		KS_paragraph,
    473  1.1   tsutsui     KC(45),	KS_q,		KS_Q,		KS_aring,
    474  1.1   tsutsui     KC(53),	KS_z,		KS_Z,		KS_asciitilde,
    475  1.1   tsutsui     KC(54),	KS_a,		KS_A,		KS_periodcentered,
    476  1.1   tsutsui     KC(56),	KS_egrave,	KS_7,		KS_backslash,
    477  1.1   tsutsui     KC(57),	KS_section,	KS_6,		KS_asciicircum,
    478  1.1   tsutsui     KC(58),	KS_parenleft,	KS_5,		KS_onehalf,
    479  1.1   tsutsui     KC(59),	KS_apostrophe,	KS_4,		KS_onequarter,	KS_threequarters,
    480  1.1   tsutsui     KC(60),	KS_quotedbl,	KS_3,		KS_numbersign,
    481  1.1   tsutsui     KC(61),	KS_eacute,	KS_2,		KS_at,
    482  1.1   tsutsui     KC(62),	KS_ampersand,	KS_1,		KS_exclamdown,
    483  1.1   tsutsui     KC(63),	KS_dollar,	KS_sterling,
    484  1.1   tsutsui 		KS_guillemotleft,KS_guillemotright,
    485  1.1   tsutsui     KC(88),	KS_exclam,	KS_8,		KS_bracketleft,	KS_braceleft,
    486  1.1   tsutsui     KC(89),	KS_ccedilla,	KS_9,		KS_bracketright,KS_braceright,
    487  1.1   tsutsui     KC(90),	KS_agrave,	KS_0,		KS_questiondown,
    488  1.1   tsutsui     KC(91),	KS_parenright,	KS_degree,	KS_macron,
    489  1.1   tsutsui     KC(92),	KS_minus,	KS_underscore,	KS_plusminus,
    490  1.1   tsutsui     KC(99),	KS_dead_circumflex, KS_dead_diaeresis,	KS_dead_abovering,
    491  1.1   tsutsui     KC(100),	KS_grave,	KS_asterisk,	KS_bar,		KS_brokenbar,
    492  1.1   tsutsui     KC(101),	KS_less,	KS_greater,	KS_mu,
    493  1.1   tsutsui     KC(107),	KS_m,
    494  1.1   tsutsui     KC(108),	KS_ugrave,	KS_percent,	KS_grave,	KS_apostrophe,
    495  1.1   tsutsui     KC(112),	KS_comma,	KS_question,	KS_masculine,
    496  1.1   tsutsui     KC(113),	KS_semicolon,	KS_period,	KS_less,
    497  1.1   tsutsui     KC(114),	KS_colon,	KS_slash,	KS_greater,
    498  1.1   tsutsui     KC(115),	KS_equal,	KS_plus,	KS_underscore
    499  1.1   tsutsui };
    500  1.1   tsutsui 
    501  1.1   tsutsui static const keysym_t hilkbd_keydesc_fr_ps2[] = {
    502  1.1   tsutsui     KC(24),	KS_b,
    503  1.1   tsutsui     KC(25),	KS_v,
    504  1.1   tsutsui     KC(26),	KS_c,
    505  1.1   tsutsui     KC(27),	KS_x,
    506  1.1   tsutsui     KC(28),	KS_w,
    507  1.1   tsutsui     KC(40),	KS_h,
    508  1.1   tsutsui     KC(41),	KS_g,
    509  1.1   tsutsui     KC(42),	KS_f,
    510  1.1   tsutsui     KC(43),	KS_d,
    511  1.1   tsutsui     KC(44),	KS_s,
    512  1.1   tsutsui     KC(45),	KS_q,
    513  1.1   tsutsui     KC(48),	KS_u,
    514  1.1   tsutsui     KC(49),	KS_y,
    515  1.1   tsutsui     KC(50),	KS_t,
    516  1.1   tsutsui     KC(51),	KS_r,
    517  1.1   tsutsui     KC(52),	KS_e,
    518  1.1   tsutsui     KC(53),	KS_z,
    519  1.1   tsutsui     KC(54),	KS_a,
    520  1.1   tsutsui     KC(56),	KS_egrave,	KS_7,		KS_grave,
    521  1.1   tsutsui     KC(57),	KS_minus,	KS_6,		KS_bar,
    522  1.1   tsutsui     KC(58),	KS_parenleft,	KS_5,		KS_bracketleft,
    523  1.1   tsutsui     KC(59),	KS_apostrophe,	KS_4,		KS_braceleft,
    524  1.1   tsutsui     KC(60),	KS_quotedbl,	KS_3,		KS_numbersign,
    525  1.1   tsutsui     KC(61),	KS_eacute,	KS_2,		KS_asciitilde,
    526  1.1   tsutsui     KC(62),	KS_ampersand,	KS_1,
    527  1.1   tsutsui     KC(63),	KS_twosuperior,
    528  1.1   tsutsui     KC(88),	KS_underscore,	KS_8,		KS_backslash,
    529  1.1   tsutsui     KC(89),	KS_ccedilla,	KS_9,		KS_asciicircum,
    530  1.1   tsutsui     KC(90),	KS_agrave,	KS_0,		KS_at,
    531  1.1   tsutsui     KC(91),	KS_parenright,	KS_degree,	KS_bracketright,
    532  1.1   tsutsui     KC(92),	KS_equal,	KS_plus,	KS_braceright,
    533  1.1   tsutsui     KC(96),	KS_i,
    534  1.1   tsutsui     KC(97),	KS_o,
    535  1.1   tsutsui     KC(98),	KS_p,
    536  1.1   tsutsui     KC(99),	KS_dead_circumflex,KS_dead_diaeresis,
    537  1.1   tsutsui     KC(100),	KS_dollar,	KS_sterling,	KS_currency,
    538  1.1   tsutsui     KC(104),	KS_j,
    539  1.1   tsutsui     KC(105),	KS_k,
    540  1.1   tsutsui     KC(106),	KS_l,
    541  1.1   tsutsui     KC(107),	KS_m,
    542  1.1   tsutsui     KC(108),	KS_ugrave,	KS_percent,
    543  1.1   tsutsui     KC(112),	KS_comma,	KS_question,
    544  1.1   tsutsui     KC(113),	KS_semicolon,	KS_period,
    545  1.1   tsutsui     KC(114),	KS_colon,	KS_slash,
    546  1.1   tsutsui     KC(115),	KS_exclam,	KS_section,
    547  1.1   tsutsui     KC(116),	KS_asterisk,	KS_mu,
    548  1.1   tsutsui     KC(118),	KS_less,	KS_greater,
    549  1.1   tsutsui 		KS_guillemotleft,KS_guillemotright,
    550  1.1   tsutsui     KC(120),	KS_n
    551  1.1   tsutsui };
    552  1.1   tsutsui 
    553  1.1   tsutsui #define KBD_MAP(name, base, map) \
    554  1.1   tsutsui 			{ name, base, sizeof(map)/sizeof(keysym_t), map }
    555  1.1   tsutsui 
    556  1.1   tsutsui const struct wscons_keydesc hilkbd_keydesctab[] = {
    557  1.1   tsutsui 	KBD_MAP(KB_US,			0,	hilkbd_keydesc_us),
    558  1.1   tsutsui 	KBD_MAP(KB_DE,			KB_US,	hilkbd_keydesc_de),
    559  1.1   tsutsui 	KBD_MAP(KB_DE | KB_NODEAD,	KB_DE,	hilkbd_keydesc_de_nodead),
    560  1.1   tsutsui 	KBD_MAP(KB_FR,			KB_US,	hilkbd_keydesc_fr),
    561  1.1   tsutsui 	KBD_MAP(KB_UK,			KB_US,	hilkbd_keydesc_uk),
    562  1.1   tsutsui 	KBD_MAP(KB_SV,			KB_US,	hilkbd_keydesc_sv),
    563  1.1   tsutsui 	KBD_MAP(KB_SV | KB_NODEAD,	KB_SV,	hilkbd_keydesc_sv_nodead),
    564  1.1   tsutsui 	{0, 0, 0, 0},
    565  1.1   tsutsui };
    566  1.1   tsutsui 
    567  1.1   tsutsui const struct wscons_keydesc hilkbd_keydesctab_ps2[] = {
    568  1.1   tsutsui 	KBD_MAP(KB_US,			0,	hilkbd_keydesc_us),
    569  1.1   tsutsui 	KBD_MAP(KB_DE,			KB_US,	hilkbd_keydesc_de_ps2),
    570  1.1   tsutsui 	KBD_MAP(KB_DE | KB_NODEAD,	KB_DE,	hilkbd_keydesc_de_ps2_nodead),
    571  1.1   tsutsui 	KBD_MAP(KB_FR,			KB_US,	hilkbd_keydesc_fr_ps2),
    572  1.1   tsutsui 	KBD_MAP(KB_UK,			KB_US,	hilkbd_keydesc_uk_ps2),
    573  1.1   tsutsui 	KBD_MAP(KB_SV,			KB_US,	hilkbd_keydesc_sv_ps2),
    574  1.1   tsutsui 	KBD_MAP(KB_SV | KB_NODEAD,	KB_SV,	hilkbd_keydesc_sv_ps2_nodead),
    575  1.1   tsutsui 	{0, 0, 0, 0},
    576  1.1   tsutsui };
    577  1.1   tsutsui 
    578  1.1   tsutsui /*
    579  1.1   tsutsui  * Keyboard ID to layout table
    580  1.1   tsutsui  */
    581  1.1   tsutsui const kbd_t hilkbd_layouts[MAXHILKBDLAYOUT] = {
    582  1.1   tsutsui 	-1,	/* 00 Undefined or custom layout */
    583  1.1   tsutsui 	-1,	/* 01 Undefined */
    584  1.1   tsutsui 	-1,	/* 02 Japanese */
    585  1.4  gutterid 	-1,	/* 03 Swiss French */
    586  1.1   tsutsui 	-1,	/* 04 Portuguese */
    587  1.1   tsutsui 	-1,	/* 05 Arabic */
    588  1.1   tsutsui 	-1,	/* 06 Hebrew */
    589  1.1   tsutsui 	-1,	/* 07 Canadian English */
    590  1.1   tsutsui 	-1,	/* 08 Turkish */
    591  1.1   tsutsui 	-1,	/* 09 Greek */
    592  1.1   tsutsui 	-1,	/* 0a Thai */
    593  1.1   tsutsui 	-1,	/* 0b Italian */
    594  1.1   tsutsui 	-1,	/* 0c Korean */
    595  1.1   tsutsui 	-1,	/* 0d Dutch */
    596  1.1   tsutsui 	KB_SV,	/* 0e Swedish */
    597  1.1   tsutsui 	KB_DE,	/* 0f German */
    598  1.1   tsutsui 	-1,	/* 10 Simplified Chinese */
    599  1.1   tsutsui 	-1,	/* 11 Traditional Chinese */
    600  1.1   tsutsui 	-1,	/* 12 Swiss French 2 */
    601  1.1   tsutsui 	-1,	/* 13 Euro Spanish */
    602  1.1   tsutsui 	-1,	/* 14 Swiss German 2 */
    603  1.1   tsutsui 	-1,	/* 15 Belgian */
    604  1.1   tsutsui 	-1,	/* 16 Finnish */
    605  1.1   tsutsui 	KB_UK,	/* 17 UK English */
    606  1.1   tsutsui 	-1,	/* 18 Canadian French */
    607  1.1   tsutsui 	-1,	/* 19 Swiss German */
    608  1.1   tsutsui 	-1,	/* 1a Norwegian */
    609  1.1   tsutsui 	KB_FR,	/* 1b French */
    610  1.1   tsutsui 	-1,	/* 1c Danish */
    611  1.1   tsutsui 	-1,	/* 1d Katakana */
    612  1.1   tsutsui 	-1,	/* 1e Latin Spanish */
    613  1.1   tsutsui 	KB_US,	/* 1f US ASCII */
    614  1.1   tsutsui };
    615