Home | History | Annotate | Line # | Download | only in dev
dnkbdmap.c revision 1.1
      1  1.1  tsutsui /*	$NetBSD: dnkbdmap.c,v 1.1 2011/02/12 15:49:01 tsutsui Exp $	*/
      2  1.1  tsutsui /*	$OpenBSD: dnkbdmap.c,v 1.2 2005/05/06 22:22:53 miod Exp $	*/
      3  1.1  tsutsui /*
      4  1.1  tsutsui  * Copyright (c) 2005, Miodrag Vallat
      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 #include <sys/types.h>
     29  1.1  tsutsui 
     30  1.1  tsutsui #include <dev/wscons/wsksymdef.h>
     31  1.1  tsutsui #include <dev/wscons/wsksymvar.h>
     32  1.1  tsutsui 
     33  1.1  tsutsui #include <hp300/dev/dnkbdmap.h>
     34  1.1  tsutsui 
     35  1.1  tsutsui #ifdef WSDISPLAY_COMPAT_RAWKBD
     36  1.1  tsutsui 
     37  1.1  tsutsui /*
     38  1.1  tsutsui  * Translate Domain keycodes to US keyboard XT scancodes, for proper
     39  1.1  tsutsui  * X11-over-wsmux operation.
     40  1.1  tsutsui  */
     41  1.1  tsutsui const u_int8_t dnkbd_raw[0x80] = {
     42  1.1  tsutsui     0x00, 0x00, 0x00, 0x00, 0x44, 0x3b, 0x3c, 0x3d,
     43  1.1  tsutsui     0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x00, 0x00,
     44  1.1  tsutsui     0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x01, 0x01,
     45  1.1  tsutsui     0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
     46  1.1  tsutsui     0x0a, 0x0b, 0x0c, 0x0d, 0x29, 0x0e, 0x00, 0x00,
     47  1.1  tsutsui     0x00, 0x00, 0x00, 0x00, 0x0f, 0x10, 0x11, 0x12,
     48  1.1  tsutsui     0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a,
     49  1.1  tsutsui     0x1b, 0x00, 0xd3, 0x00, 0x47, 0x48, 0x49, 0x4e,
     50  1.1  tsutsui     0x00, 0xc8, 0x00, 0x1d, 0x00, 0x00, 0x1e, 0x1f,
     51  1.1  tsutsui     0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
     52  1.1  tsutsui     0x28, 0x00, 0x1c, 0x2b, 0x00, 0x4b, 0x4c, 0x4d,
     53  1.1  tsutsui     0x4a, 0xcb, 0x00, 0xcd, 0x00, 0x00, 0x2a, 0x00,
     54  1.1  tsutsui     0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33,
     55  1.1  tsutsui     0x34, 0x35, 0x36, 0x00, 0x00, 0x00, 0x4f, 0x50,
     56  1.1  tsutsui     0x51, 0x00, 0x00, 0xd0, 0x00, 0x38, 0x39, 0xb8,
     57  1.1  tsutsui     0x00, 0x52, 0x00, 0x53, 0x9c, 0x00, 0x3a, 0x00
     58  1.1  tsutsui };
     59  1.1  tsutsui #endif
     60  1.1  tsutsui 
     61  1.1  tsutsui #define	KC(n)	KS_KEYCODE(n)
     62  1.1  tsutsui 
     63  1.1  tsutsui /*
     64  1.1  tsutsui  * US English
     65  1.1  tsutsui  */
     66  1.1  tsutsui 
     67  1.1  tsutsui static const keysym_t dnkbd_keydesc_us[] = {
     68  1.1  tsutsui /*	pos		command		normal		shifted */
     69  1.1  tsutsui 	/* 01 Ins Mark */
     70  1.1  tsutsui 	/* 02 Line Del */
     71  1.1  tsutsui 	/* 03 Char Del */
     72  1.1  tsutsui 	KC(0x04),			KS_f10,
     73  1.1  tsutsui 	KC(0x05),			KS_f1,
     74  1.1  tsutsui 	KC(0x06),			KS_f2,
     75  1.1  tsutsui 	KC(0x07),			KS_f3,
     76  1.1  tsutsui 	KC(0x08),			KS_f4,
     77  1.1  tsutsui 	KC(0x09),			KS_f5,
     78  1.1  tsutsui 	KC(0x0a),			KS_f6,
     79  1.1  tsutsui 	KC(0x0b),			KS_f7,
     80  1.1  tsutsui 	KC(0x0c),			KS_f8,
     81  1.1  tsutsui 	KC(0x0d),			KS_f9,
     82  1.1  tsutsui 	/* 0e Again */
     83  1.1  tsutsui 	/* 0f Read */
     84  1.1  tsutsui 	/* 10 Save Edit */
     85  1.1  tsutsui 	/* 11 Abort Exit */
     86  1.1  tsutsui 	KC(0x12),			KS_Hold_Screen,
     87  1.1  tsutsui 	/* 13 Cut Copy */
     88  1.1  tsutsui 	/* 14 Undo Paste */
     89  1.1  tsutsui 	/* 15 Move Grow */
     90  1.1  tsutsui 	KC(0x17),  KS_Cmd_Debugger,	KS_Escape,
     91  1.1  tsutsui 	KC(0x18),			KS_1,		KS_exclam,
     92  1.1  tsutsui 	KC(0x19),			KS_2,		KS_at,
     93  1.1  tsutsui 	KC(0x1a),			KS_3,		KS_numbersign,
     94  1.1  tsutsui 	KC(0x1b),			KS_4,		KS_dollar,
     95  1.1  tsutsui 	KC(0x1c),			KS_5,		KS_percent,
     96  1.1  tsutsui 	KC(0x1d),			KS_6,		KS_asciicircum,
     97  1.1  tsutsui 	KC(0x1e),			KS_7,		KS_ampersand,
     98  1.1  tsutsui 	KC(0x1f),			KS_8,		KS_asterisk,
     99  1.1  tsutsui 	KC(0x20),			KS_9,		KS_parenleft,
    100  1.1  tsutsui 	KC(0x21),			KS_0,		KS_parenright,
    101  1.1  tsutsui 	KC(0x22),			KS_minus,	KS_underscore,
    102  1.1  tsutsui 	KC(0x23),			KS_equal,	KS_plus,
    103  1.1  tsutsui 	KC(0x24),			KS_grave,	KS_asciitilde,
    104  1.1  tsutsui 	KC(0x25),  KS_Cmd_ResetEmul,	KS_Delete,	/* backspace */
    105  1.1  tsutsui 	KC(0x27),			KS_Home,
    106  1.1  tsutsui 	/* 28 Shell Cmd */
    107  1.1  tsutsui 	KC(0x29),			KS_End,
    108  1.1  tsutsui 	KC(0x2c),			KS_Tab,
    109  1.1  tsutsui 	KC(0x2d),			KS_q,
    110  1.1  tsutsui 	KC(0x2e),			KS_w,
    111  1.1  tsutsui 	KC(0x2f),			KS_e,
    112  1.1  tsutsui 	KC(0x30),			KS_r,
    113  1.1  tsutsui 	KC(0x31),			KS_t,
    114  1.1  tsutsui 	KC(0x32),			KS_y,
    115  1.1  tsutsui 	KC(0x33),			KS_u,
    116  1.1  tsutsui 	KC(0x34),			KS_i,
    117  1.1  tsutsui 	KC(0x35),			KS_o,
    118  1.1  tsutsui 	KC(0x36),			KS_p,
    119  1.1  tsutsui 	KC(0x37),			KS_bracketleft,	KS_braceleft,
    120  1.1  tsutsui 	KC(0x38),			KS_bracketright,KS_braceright,
    121  1.1  tsutsui 	KC(0x3a),			KS_Delete,
    122  1.1  tsutsui 	KC(0x3c),			KS_KP_7,
    123  1.1  tsutsui 	KC(0x3d),			KS_KP_8,
    124  1.1  tsutsui 	KC(0x3e),			KS_KP_9,
    125  1.1  tsutsui 	KC(0x3f),			KS_KP_Add,
    126  1.1  tsutsui 	/* 40 Left Box */
    127  1.1  tsutsui 	KC(0x41),			KS_Up,
    128  1.1  tsutsui 	/* 42 Right Box */
    129  1.1  tsutsui 	KC(0x43),  KS_Cmd1,		KS_Control_L,
    130  1.1  tsutsui 	KC(0x46),			KS_a,
    131  1.1  tsutsui 	KC(0x47),			KS_s,
    132  1.1  tsutsui 	KC(0x48),			KS_d,
    133  1.1  tsutsui 	KC(0x49),			KS_f,
    134  1.1  tsutsui 	KC(0x4a),			KS_g,
    135  1.1  tsutsui 	KC(0x4b),			KS_h,
    136  1.1  tsutsui 	KC(0x4c),			KS_j,
    137  1.1  tsutsui 	KC(0x4d),			KS_k,
    138  1.1  tsutsui 	KC(0x4e),			KS_l,
    139  1.1  tsutsui 	KC(0x4f),			KS_semicolon,	KS_colon,
    140  1.1  tsutsui 	KC(0x50),			KS_apostrophe,	KS_quotedbl,
    141  1.1  tsutsui 	KC(0x52),			KS_Return,
    142  1.1  tsutsui 	KC(0x53),			KS_backslash,	KS_bar,
    143  1.1  tsutsui 	KC(0x55),			KS_KP_4,
    144  1.1  tsutsui 	KC(0x56),			KS_KP_5,
    145  1.1  tsutsui 	KC(0x57),			KS_KP_6,
    146  1.1  tsutsui 	KC(0x58),			KS_KP_Subtract,
    147  1.1  tsutsui 	KC(0x59),			KS_Left,
    148  1.1  tsutsui 	/* 5a Next Wndw */
    149  1.1  tsutsui 	KC(0x5b),			KS_Right,
    150  1.1  tsutsui 	/* 5d Rept */
    151  1.1  tsutsui 	KC(0x5e),			KS_Shift_L,
    152  1.1  tsutsui 	KC(0x60),			KS_z,
    153  1.1  tsutsui 	KC(0x61),			KS_x,
    154  1.1  tsutsui 	KC(0x62),			KS_c,
    155  1.1  tsutsui 	KC(0x63),			KS_v,
    156  1.1  tsutsui 	KC(0x64),			KS_b,
    157  1.1  tsutsui 	KC(0x65),			KS_n,
    158  1.1  tsutsui 	KC(0x66),			KS_m,
    159  1.1  tsutsui 	KC(0x67),			KS_comma,	KS_less,
    160  1.1  tsutsui 	KC(0x68),			KS_period,	KS_greater,
    161  1.1  tsutsui 	KC(0x69),			KS_slash,	KS_question,
    162  1.1  tsutsui 	KC(0x6a),			KS_Shift_R,
    163  1.1  tsutsui 	/* 6c Pop */
    164  1.1  tsutsui 	KC(0x6e),			KS_KP_1,
    165  1.1  tsutsui 	KC(0x6f),			KS_KP_2,
    166  1.1  tsutsui 	KC(0x70),			KS_KP_3,
    167  1.1  tsutsui 	/* 72 Top Box */
    168  1.1  tsutsui 	KC(0x73),			KS_Down,
    169  1.1  tsutsui 	/* 74 Bottom Box */
    170  1.1  tsutsui 	KC(0x75),  KS_Cmd2,		KS_Alt_L,
    171  1.1  tsutsui 	KC(0x76),			KS_space,
    172  1.1  tsutsui 	KC(0x77),  KS_Cmd2,		KS_Alt_R,	KS_Multi_key,
    173  1.1  tsutsui 	KC(0x79),			KS_KP_0,
    174  1.1  tsutsui 	KC(0x7b),			KS_KP_Separator,
    175  1.1  tsutsui 	KC(0x7c),			KS_KP_Enter,
    176  1.1  tsutsui 	KC(0x7e),			KS_Caps_Lock
    177  1.1  tsutsui };
    178  1.1  tsutsui 
    179  1.1  tsutsui /*
    180  1.1  tsutsui  * German
    181  1.1  tsutsui  */
    182  1.1  tsutsui 
    183  1.1  tsutsui static const keysym_t dnkbd_keydesc_de[] = {
    184  1.1  tsutsui /*	pos		normal		shifted		altgr */
    185  1.1  tsutsui 	KC(0x17),	KS_dead_circumflex, KS_dead_abovering,
    186  1.1  tsutsui 	KC(0x19),	KS_2,		KS_quotedbl,
    187  1.1  tsutsui 	KC(0x1a),	KS_3,		KS_at,		KS_section,
    188  1.1  tsutsui 	KC(0x1d),	KS_6,		KS_ampersand,
    189  1.1  tsutsui 	KC(0x1e),	KS_7,		KS_slash,
    190  1.1  tsutsui 	KC(0x1f),	KS_8,		KS_parenleft,
    191  1.1  tsutsui 	KC(0x20),	KS_9,		KS_parenright,
    192  1.1  tsutsui 	KC(0x21),	KS_0,		KS_equal,
    193  1.1  tsutsui 	KC(0x22),	KS_dead_tilde,	KS_question,	KS_ssharp,
    194  1.1  tsutsui 	KC(0x23),	KS_dead_acute,	KS_dead_grave,
    195  1.1  tsutsui 	KC(0x32),	KS_z,
    196  1.1  tsutsui 	KC(0x37),	KS_braceright,	KS_bracketright,KS_udiaeresis,
    197  1.1  tsutsui 	KC(0x38),	KS_plus,	KS_asterisk,
    198  1.1  tsutsui 	KC(0x4f),	KS_bar,		KS_backslash,	KS_odiaeresis,
    199  1.1  tsutsui 	KC(0x50),	KS_braceleft,	KS_bracketleft,	KS_adiaeresis,
    200  1.1  tsutsui 	KC(0x51),	KS_numbersign,	KS_apostrophe,
    201  1.1  tsutsui 	KC(0x5f),	KS_less,	KS_greater,
    202  1.1  tsutsui 	KC(0x60),	KS_y,
    203  1.1  tsutsui 	KC(0x67),	KS_comma,	KS_semicolon,
    204  1.1  tsutsui 	KC(0x68),	KS_period,	KS_colon,
    205  1.1  tsutsui 	KC(0x69),	KS_minus,	KS_underscore,
    206  1.1  tsutsui 	KC(0x77),	KS_Mode_switch,	KS_Multi_key
    207  1.1  tsutsui };
    208  1.1  tsutsui 
    209  1.1  tsutsui static const keysym_t dnkbd_keydesc_de_nodead[] = {
    210  1.1  tsutsui 	KC(0x17),	KS_asciicircum, KS_degree,
    211  1.1  tsutsui 	KC(0x22),	KS_asciitilde,	KS_question,	KS_ssharp,
    212  1.1  tsutsui 	KC(0x23),	KS_apostrophe,	KS_grave
    213  1.1  tsutsui };
    214  1.1  tsutsui 
    215  1.1  tsutsui /*
    216  1.1  tsutsui  * Norwegian / Danish
    217  1.1  tsutsui  */
    218  1.1  tsutsui 
    219  1.1  tsutsui static const keysym_t dnkbd_keydesc_dk[] = {
    220  1.1  tsutsui /*	pos		normal		shifted		altgr */
    221  1.1  tsutsui 	KC(0x17),	KS_underscore,
    222  1.1  tsutsui 	KC(0x19),	KS_2,		KS_quotedbl,
    223  1.1  tsutsui 	KC(0x1d),	KS_6,		KS_ampersand,
    224  1.1  tsutsui 	KC(0x1e),	KS_7,		KS_slash,
    225  1.1  tsutsui 	KC(0x1f),	KS_8,		KS_parenleft,
    226  1.1  tsutsui 	KC(0x20),	KS_9,		KS_parenright,
    227  1.1  tsutsui 	KC(0x21),	KS_0,		KS_equal,
    228  1.1  tsutsui 	KC(0x22),	KS_plus,	KS_question,
    229  1.1  tsutsui 	KC(0x23),	KS_dead_grave,	KS_at,
    230  1.1  tsutsui 	KC(0x37),	KS_braceright,	KS_bracketright,KS_aring,
    231  1.1  tsutsui 	KC(0x38),	KS_dead_tilde,	KS_dead_circumflex,KS_dead_diaeresis,
    232  1.1  tsutsui 	KC(0x4f),	KS_bar,		KS_backslash,	KS_oslash,
    233  1.1  tsutsui 	KC(0x50),	KS_braceleft,	KS_bracketleft,	KS_ae,
    234  1.1  tsutsui 	KC(0x51),	KS_dead_acute,	KS_asterisk,
    235  1.1  tsutsui 	KC(0x5f),	KS_less,	KS_greater,
    236  1.1  tsutsui 	KC(0x67),	KS_comma,	KS_semicolon,
    237  1.1  tsutsui 	KC(0x68),	KS_period,	KS_colon,
    238  1.1  tsutsui 	KC(0x69),	KS_minus,	KS_underscore,
    239  1.1  tsutsui 	KC(0x77),	KS_Mode_switch,	KS_Multi_key
    240  1.1  tsutsui };
    241  1.1  tsutsui 
    242  1.1  tsutsui static const keysym_t dnkbd_keydesc_dk_nodead[] = {
    243  1.1  tsutsui /*	pos		normal		shifted		altgr */
    244  1.1  tsutsui 	KC(0x23),	KS_grave,	KS_at,
    245  1.1  tsutsui 	KC(0x38),	KS_asciitilde,	KS_asciicircum,	KS_diaeresis,
    246  1.1  tsutsui 	KC(0x51),	KS_apostrophe,	KS_asterisk,
    247  1.1  tsutsui };
    248  1.1  tsutsui 
    249  1.1  tsutsui /*
    250  1.1  tsutsui  * French
    251  1.1  tsutsui  */
    252  1.1  tsutsui 
    253  1.1  tsutsui static const keysym_t dnkbd_keydesc_fr[] = {
    254  1.1  tsutsui /*	pos		normal		shifted		altgr */
    255  1.1  tsutsui 	KC(0x17),	KS_bracketleft,	KS_degree,
    256  1.1  tsutsui 	KC(0x18),	KS_ampersand,	KS_1,
    257  1.1  tsutsui 	KC(0x19),	KS_braceleft,	KS_2,		KS_eacute,
    258  1.1  tsutsui 	KC(0x1a),	KS_quotedbl,	KS_3,
    259  1.1  tsutsui 	KC(0x1b),	KS_apostrophe,	KS_4,
    260  1.1  tsutsui 	KC(0x1c),	KS_parenleft,	KS_5,
    261  1.1  tsutsui 	KC(0x1d),	KS_bracketright,KS_6,		KS_section,
    262  1.1  tsutsui 	KC(0x1e),	KS_braceright,	KS_7,		KS_egrave,
    263  1.1  tsutsui 	KC(0x1f),	KS_exclam,	KS_8,
    264  1.1  tsutsui 	KC(0x20),	KS_backslash,	KS_9,		KS_ccedilla,
    265  1.1  tsutsui 	KC(0x21),	KS_at,		KS_0,		KS_agrave,
    266  1.1  tsutsui 	KC(0x22),	KS_parenright,	KS_degree,
    267  1.1  tsutsui 	KC(0x23),	KS_minus,	KS_underscore,
    268  1.1  tsutsui 	KC(0x2d),	KS_a,
    269  1.1  tsutsui 	KC(0x2e),	KS_z,
    270  1.1  tsutsui 	KC(0x37),	KS_dead_circumflex, KS_asciitilde, KS_dead_diaeresis,
    271  1.1  tsutsui 	KC(0x38),	KS_dollar,	KS_asterisk,
    272  1.1  tsutsui 	KC(0x46),	KS_q,
    273  1.1  tsutsui 	KC(0x4f),	KS_m,
    274  1.1  tsutsui 	KC(0x50),	KS_bar,		KS_percent,	KS_ugrave,
    275  1.1  tsutsui 	KC(0x51),	KS_grave,	KS_numbersign,
    276  1.1  tsutsui 	KC(0x5f),	KS_less,	KS_greater,
    277  1.1  tsutsui 	KC(0x60),	KS_w,
    278  1.1  tsutsui 	KC(0x66),	KS_comma,	KS_question,
    279  1.1  tsutsui 	KC(0x67),	KS_semicolon,	KS_period,
    280  1.1  tsutsui 	KC(0x68),	KS_colon,	KS_slash,
    281  1.1  tsutsui 	KC(0x69),	KS_equal,	KS_plus,
    282  1.1  tsutsui 	KC(0x77),	KS_Mode_switch,	KS_Multi_key
    283  1.1  tsutsui };
    284  1.1  tsutsui 
    285  1.1  tsutsui /*
    286  1.1  tsutsui  * Japanese (and basis for international layouts)
    287  1.1  tsutsui  *
    288  1.1  tsutsui  * Apparently this layout lacks all japanese keys (Zenkaku/Hankaku,
    289  1.1  tsutsui  * Hiragana/Katakana, Henkan and Muhenkan). Makes one wonder about
    290  1.1  tsutsui  * its usefulness.
    291  1.1  tsutsui  */
    292  1.1  tsutsui 
    293  1.1  tsutsui static const keysym_t dnkbd_keydesc_jp[] = {
    294  1.1  tsutsui /*	pos		cmd		normal		shifted */
    295  1.1  tsutsui 	KC(0x16),  KS_Cmd_Debugger,	KS_Escape,
    296  1.1  tsutsui 	KC(0x17),	KS_grave,	KS_asciitilde,
    297  1.1  tsutsui 	KC(0x24),  KS_Cmd_ResetEmul,	KS_Delete,	/* backspace */
    298  1.1  tsutsui 	KC(0x25),			KS_Delete,
    299  1.1  tsutsui 	/* 2b Rept */
    300  1.1  tsutsui 	KC(0x3b),			KS_KP_Add,
    301  1.1  tsutsui 	KC(0x3f),			KS_parenleft,	/* KS_KP_parenleft */
    302  1.1  tsutsui 	KC(0x51),			KS_backslash,	KS_bar,
    303  1.1  tsutsui 	KC(0x54),			KS_KP_Subtract,
    304  1.1  tsutsui 	KC(0x58),			KS_parenright,	/* KS_KP_parenright */
    305  1.1  tsutsui 	KC(0x5f),			KS_less,	KS_greater,
    306  1.1  tsutsui 	KC(0x6d),			KS_KP_Multiply,
    307  1.1  tsutsui 	KC(0x78),			KS_KP_Divide,
    308  1.1  tsutsui };
    309  1.1  tsutsui 
    310  1.1  tsutsui /*
    311  1.1  tsutsui  * Swiss (relative to the German layout)
    312  1.1  tsutsui  */
    313  1.1  tsutsui 
    314  1.1  tsutsui static const keysym_t dnkbd_keydesc_sg[] = {
    315  1.1  tsutsui /*	pos		normal		shifted		altgr */
    316  1.1  tsutsui 	KC(0x17),	KS_at,		KS_exclam,	KS_section,
    317  1.1  tsutsui 	KC(0x18),	KS_1,		KS_plus,
    318  1.1  tsutsui 	KC(0x1a),	KS_3,		KS_asterisk,
    319  1.1  tsutsui 	KC(0x1b),	KS_4,		KS_backslash,	KS_ccedilla,
    320  1.1  tsutsui 	KC(0x22),	KS_apostrophe,	KS_question,
    321  1.1  tsutsui 	KC(0x23),	KS_dead_circumflex,KS_dead_grave,
    322  1.1  tsutsui 	KC(0x37),	KS_braceright,	KS_dead_tilde,	KS_udiaeresis,	KS_egrave,
    323  1.1  tsutsui 	KC(0x38),	KS_dead_diaeresis,KS_dead_acute,
    324  1.1  tsutsui 	KC(0x4f),	KS_bar,		KS_bracketleft,	KS_odiaeresis,	KS_eacute,
    325  1.1  tsutsui 	KC(0x50),	KS_braceleft,	KS_bracketright,KS_adiaeresis,	KS_agrave,
    326  1.1  tsutsui 	KC(0x51),	KS_dollar,	KS_numbersign,	KS_sterling
    327  1.1  tsutsui };
    328  1.1  tsutsui 
    329  1.1  tsutsui static const keysym_t dnkbd_keydesc_sg_nodead[] = {
    330  1.1  tsutsui /*	pos		normal		shifted		altgr */
    331  1.1  tsutsui 	KC(0x23),	KS_asciicircum,	KS_grave,
    332  1.1  tsutsui 	KC(0x37),	KS_braceright,	KS_asciitilde,	KS_udiaeresis,	KS_egrave,
    333  1.1  tsutsui 	KC(0x38),	KS_diaeresis,	KS_apostrophe
    334  1.1  tsutsui };
    335  1.1  tsutsui 
    336  1.1  tsutsui /*
    337  1.1  tsutsui  * Swedish / Finnish (relative to the Norwegian / Danish layout)
    338  1.1  tsutsui  */
    339  1.1  tsutsui 
    340  1.1  tsutsui static const keysym_t dnkbd_keydesc_sv[] = {
    341  1.1  tsutsui /*	pos		normal		shifted		altgr */
    342  1.1  tsutsui 	KC(0x1b),	KS_4,		KS_dollar,	KS_currency,
    343  1.1  tsutsui 	KC(0x23),	KS_dead_grave,	KS_at,		KS_eacute,
    344  1.1  tsutsui 	KC(0x38),	KS_dead_tilde,	KS_dead_circumflex,KS_udiaeresis,
    345  1.1  tsutsui 	KC(0x4f),	KS_bar,		KS_backslash,	KS_odiaeresis,
    346  1.1  tsutsui 	KC(0x50),	KS_braceleft,	KS_bracketleft,	KS_adiaeresis
    347  1.1  tsutsui };
    348  1.1  tsutsui 
    349  1.1  tsutsui static const keysym_t dnkbd_keydesc_sv_nodead[] = {
    350  1.1  tsutsui /*	pos		normal		shifted		altgr */
    351  1.1  tsutsui 	KC(0x23),	KS_grave,	KS_at,		KS_eacute,
    352  1.1  tsutsui 	KC(0x38),	KS_asciitilde,	KS_asciicircum,	KS_udiaeresis,
    353  1.1  tsutsui 	KC(0x51),	KS_apostrophe,	KS_asterisk,
    354  1.1  tsutsui };
    355  1.1  tsutsui 
    356  1.1  tsutsui /*
    357  1.1  tsutsui  * UK English
    358  1.1  tsutsui  */
    359  1.1  tsutsui 
    360  1.1  tsutsui static const keysym_t dnkbd_keydesc_uk[] = {
    361  1.1  tsutsui /*	pos		normal		shifted */
    362  1.1  tsutsui 	KC(0x17),	KS_underscore,
    363  1.1  tsutsui 	KC(0x19),	KS_2,		KS_quotedbl,
    364  1.1  tsutsui 	KC(0x1d),	KS_6,		KS_ampersand,
    365  1.1  tsutsui 	KC(0x1e),	KS_7,		KS_apostrophe,
    366  1.1  tsutsui 	KC(0x1f),	KS_8,		KS_parenleft,
    367  1.1  tsutsui 	KC(0x20),	KS_9,		KS_parenright,
    368  1.1  tsutsui 	KC(0x21),	KS_0,		KS_underscore,
    369  1.1  tsutsui 	KC(0x22),	KS_minus,	KS_equal,
    370  1.1  tsutsui 	KC(0x23),	KS_asciicircum,	KS_asciitilde,
    371  1.1  tsutsui 	KC(0x37),	KS_at,		KS_grave,
    372  1.1  tsutsui 	KC(0x38),	KS_bracketleft,	KS_braceleft,
    373  1.1  tsutsui 	KC(0x4f),	KS_semicolon,	KS_plus,
    374  1.1  tsutsui 	KC(0x50),	KS_colon,	KS_asterisk,
    375  1.1  tsutsui 	KC(0x51),	KS_bracketright,KS_braceright,
    376  1.1  tsutsui 	KC(0x5f),	KS_backslash,	KS_bar
    377  1.1  tsutsui };
    378  1.1  tsutsui 
    379  1.1  tsutsui #define	KBD_MAP(name, base, map) \
    380  1.1  tsutsui 	{ name, base, sizeof(map) / sizeof(keysym_t), map }
    381  1.1  tsutsui 
    382  1.1  tsutsui const struct wscons_keydesc dnkbd_keydesctab[] = {
    383  1.1  tsutsui 	KBD_MAP(KB_US,			0,	dnkbd_keydesc_us),
    384  1.1  tsutsui 	KBD_MAP(KB_DE,			KB_JP,	dnkbd_keydesc_de),
    385  1.1  tsutsui 	KBD_MAP(KB_DE | KB_NODEAD,	KB_DE,	dnkbd_keydesc_de_nodead),
    386  1.1  tsutsui 	KBD_MAP(KB_DK,			KB_JP,	dnkbd_keydesc_dk),
    387  1.1  tsutsui 	KBD_MAP(KB_DK | KB_NODEAD,	KB_DK,	dnkbd_keydesc_dk_nodead),
    388  1.1  tsutsui 	KBD_MAP(KB_FR,			KB_JP,	dnkbd_keydesc_fr),
    389  1.1  tsutsui 	KBD_MAP(KB_JP,			KB_US,	dnkbd_keydesc_jp),
    390  1.1  tsutsui 	KBD_MAP(KB_SG,			KB_DE,	dnkbd_keydesc_sg),
    391  1.1  tsutsui 	KBD_MAP(KB_SG | KB_NODEAD,	KB_SG,	dnkbd_keydesc_sg_nodead),
    392  1.1  tsutsui 	KBD_MAP(KB_SV,			KB_DK,	dnkbd_keydesc_sv),
    393  1.1  tsutsui 	KBD_MAP(KB_SV | KB_NODEAD,	KB_SV,	dnkbd_keydesc_sv_nodead),
    394  1.1  tsutsui 	KBD_MAP(KB_UK,			KB_JP,	dnkbd_keydesc_uk),
    395  1.1  tsutsui 	{ 0, 0, 0, 0 }
    396  1.1  tsutsui };
    397