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