root/dev/usb/ukbdmap.c

/* [<][>][^][v][top][bottom][index][help] */
    1 /*      $OpenBSD: ukbdmap.c,v 1.27 2007/06/17 07:53:11 mbalmer Exp $    */
    2 
    3 /*
    4  * THIS FILE IS AUTOMAGICALLY GENERATED.  DO NOT EDIT.
    5  *
    6  * generated by:
    7  *      OpenBSD: makemap.awk,v 1.6 2005/05/23 21:33:03 miod Exp 
    8  * generated from:
    9  */
   10 /*      OpenBSD: wskbdmap_mfii.c,v 1.34 2006/12/05 21:27:07 otto Exp  */
   11 /*      $NetBSD: wskbdmap_mfii.c,v 1.15 2000/05/19 16:40:04 drochner Exp $      */
   12 
   13 /*
   14  * PLEASE DO NOT FORGET TO REGEN
   15  *      sys/arch/hppa/gsc/gsckbdmap.c
   16  *      sys/dev/usb/ukbdmap.c
   17  * AFTER ANY CHANGES TO THIS FILE!
   18  */
   19 
   20 /*-
   21  * Copyright (c) 1997 The NetBSD Foundation, Inc.
   22  * All rights reserved.
   23  *
   24  * This code is derived from software contributed to The NetBSD Foundation
   25  * by Juergen Hannken-Illjes.
   26  *
   27  * Redistribution and use in source and binary forms, with or without
   28  * modification, are permitted provided that the following conditions
   29  * are met:
   30  * 1. Redistributions of source code must retain the above copyright
   31  *    notice, this list of conditions and the following disclaimer.
   32  * 2. Redistributions in binary form must reproduce the above copyright
   33  *    notice, this list of conditions and the following disclaimer in the
   34  *    documentation and/or other materials provided with the distribution.
   35  * 3. All advertising materials mentioning features or use of this software
   36  *    must display the following acknowledgement:
   37  *      This product includes software developed by the NetBSD
   38  *      Foundation, Inc. and its contributors.
   39  * 4. Neither the name of The NetBSD Foundation nor the names of its
   40  *    contributors may be used to endorse or promote products derived
   41  *    from this software without specific prior written permission.
   42  *
   43  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
   44  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
   45  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   46  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
   47  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   48  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   49  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   50  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   51  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   52  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   53  * POSSIBILITY OF SUCH DAMAGE.
   54  */
   55 
   56 #include <sys/types.h>
   57 #include <dev/wscons/wsksymdef.h>
   58 #include <dev/wscons/wsksymvar.h>
   59 
   60 #define KC(n) KS_KEYCODE(n)
   61 
   62 static const keysym_t ukbd_keydesc_us[] = {
   63 /*  pos      command            normal          shifted */
   64 /* initially KC(160),   KS_AudioMute,   */
   65 /* initially KC(174),   KS_AudioLower,  */
   66 /* initially KC(176),   KS_AudioRaise,  */
   67     KC(4),      KS_a,
   68     KC(5),      KS_b,
   69     KC(6),      KS_c,
   70     KC(7),      KS_d,
   71     KC(8),      KS_e,
   72     KC(9),      KS_f,
   73     KC(10),     KS_g,
   74     KC(11),     KS_h,
   75     KC(12),     KS_i,
   76     KC(13),     KS_j,
   77     KC(14),     KS_k,
   78     KC(15),     KS_l,
   79     KC(16),     KS_m,
   80     KC(17),     KS_n,
   81     KC(18),     KS_o,
   82     KC(19),     KS_p,
   83     KC(20),     KS_q,
   84     KC(21),     KS_r,
   85     KC(22),     KS_s,
   86     KC(23),     KS_t,
   87     KC(24),     KS_u,
   88     KC(25),     KS_v,
   89     KC(26),     KS_w,
   90     KC(27),     KS_x,
   91     KC(28),     KS_y,
   92     KC(29),     KS_z,
   93     KC(30),     KS_1,           KS_exclam,
   94     KC(31),     KS_2,           KS_at,
   95     KC(32),     KS_3,           KS_numbersign,
   96     KC(33),     KS_4,           KS_dollar,
   97     KC(34),     KS_5,           KS_percent,
   98     KC(35),     KS_6,           KS_asciicircum,
   99     KC(36),     KS_7,           KS_ampersand,
  100     KC(37),     KS_8,           KS_asterisk,
  101     KC(38),     KS_9,           KS_parenleft,
  102     KC(39),     KS_0,           KS_parenright,
  103     KC(40),     KS_Return,
  104     KC(41),     KS_Cmd_Debugger,KS_Escape,
  105     KC(42),     KS_Cmd_ResetEmul,KS_Delete,
  106     KC(43),     KS_Tab,
  107     KC(44),     KS_space,
  108     KC(45),     KS_minus,       KS_underscore,
  109     KC(46),     KS_equal,       KS_plus,
  110     KC(47),     KS_bracketleft, KS_braceleft,
  111     KC(48),     KS_bracketright,KS_braceright,
  112     KC(49),     KS_backslash,   KS_bar,
  113     KC(50),     KS_backslash,   KS_bar,
  114     KC(51),     KS_semicolon,   KS_colon,
  115     KC(52),     KS_apostrophe,  KS_quotedbl,
  116     KC(53),     KS_grave,       KS_asciitilde,
  117     KC(54),     KS_comma,       KS_less,
  118     KC(55),     KS_period,      KS_greater,
  119     KC(56),     KS_slash,       KS_question,
  120     KC(57),     KS_Caps_Lock,
  121     KC(58),     KS_Cmd_Screen0, KS_f1,
  122     KC(59),     KS_Cmd_Screen1, KS_f2,
  123     KC(60),     KS_Cmd_Screen2, KS_f3,
  124     KC(61),     KS_Cmd_Screen3, KS_f4,
  125     KC(62),     KS_Cmd_Screen4, KS_f5,
  126     KC(63),     KS_Cmd_Screen5, KS_f6,
  127     KC(64),     KS_Cmd_Screen6, KS_f7,
  128     KC(65),     KS_Cmd_Screen7, KS_f8,
  129     KC(66),     KS_Cmd_Screen8, KS_f9,
  130     KC(67),     KS_Cmd_Screen9, KS_f10,
  131     KC(68),     KS_Cmd_Screen10,KS_f11,
  132     KC(69),     KS_Cmd_Screen11,KS_f12,
  133     KC(70),     KS_Print_Screen,
  134     KC(71),     KS_Hold_Screen,
  135     KC(72),     KS_Pause,       /*Break*/
  136     KC(73),     KS_Insert,
  137     KC(74),     KS_Home,
  138     KC(75),     KS_Cmd_ScrollBack,KS_Prior,
  139     KC(76),     KS_Cmd_ResetEmul,KS_Delete,
  140     KC(77),     KS_End,
  141     KC(78),     KS_Cmd_ScrollFwd,KS_Next,
  142     KC(79),     KS_Right,
  143     KC(80),     KS_Left,
  144     KC(81),     KS_Down,
  145     KC(82),     KS_Up,
  146     KC(83),     KS_Num_Lock,
  147     KC(84),     KS_KP_Divide,
  148     KC(85),     KS_KP_Multiply,
  149     KC(86),     KS_KP_Subtract,
  150     KC(87),     KS_KP_Add,
  151     KC(88),     KS_KP_Enter,
  152     KC(89),     KS_KP_End,      KS_KP_1,
  153     KC(90),     KS_KP_Down,     KS_KP_2,
  154     KC(91),     KS_KP_Next,     KS_KP_3,
  155     KC(92),     KS_KP_Left,     KS_KP_4,
  156     KC(93),     KS_KP_Begin,    KS_KP_5,
  157     KC(94),     KS_KP_Right,    KS_KP_6,
  158     KC(95),     KS_KP_Home,     KS_KP_7,
  159     KC(96),     KS_KP_Up,       KS_KP_8,
  160     KC(97),     KS_KP_Prior,    KS_KP_9,
  161     KC(98),     KS_KP_Insert,   KS_KP_0,
  162     KC(99),     KS_Cmd_KbdReset,KS_KP_Delete,
  163     KC(101),    KS_Menu,
  164     KC(224),    KS_Cmd1,        KS_Control_L,
  165     KC(225),    KS_Shift_L,
  166     KC(226),    KS_Cmd2,        KS_Alt_L,
  167     KC(227),    KS_Meta_L,
  168     KC(228),    KS_Cmd1,        KS_Control_R,
  169     KC(229),    KS_Shift_R,
  170     KC(230),    KS_Cmd2,        KS_Alt_R,       KS_Multi_key,
  171     KC(231),    KS_Meta_R,
  172 };
  173 
  174 #if !defined(SMALL_KERNEL) || !defined(__alpha__)
  175 
  176 static const keysym_t ukbd_keydesc_de[] = {
  177 /*  pos      normal             shifted         altgr           shift-altgr */
  178     KC(16),     KS_m,           KS_M,           KS_mu,
  179     KC(20),     KS_q,           KS_Q,           KS_at,
  180     KC(28),     KS_z,
  181     KC(29),     KS_y,
  182     KC(31),     KS_2,           KS_quotedbl,    KS_twosuperior,
  183     KC(32),     KS_3,           KS_section,     KS_threesuperior,
  184     KC(35),     KS_6,           KS_ampersand,
  185     KC(36),     KS_7,           KS_slash,       KS_braceleft,
  186     KC(37),     KS_8,           KS_parenleft,   KS_bracketleft,
  187     KC(38),     KS_9,           KS_parenright,  KS_bracketright,
  188     KC(39),     KS_0,           KS_equal,       KS_braceright,
  189     KC(45),     KS_ssharp,      KS_question,    KS_backslash,
  190     KC(46),     KS_dead_acute,  KS_dead_grave,
  191     KC(47),     KS_udiaeresis,
  192     KC(48),     KS_plus,        KS_asterisk,    KS_dead_tilde,
  193     KC(49),     KS_numbersign,  KS_apostrophe,
  194     KC(50),     KS_numbersign,  KS_apostrophe,
  195     KC(51),     KS_odiaeresis,
  196     KC(52),     KS_adiaeresis,
  197     KC(53),     KS_dead_circumflex,KS_dead_abovering,
  198     KC(54),     KS_comma,       KS_semicolon,
  199     KC(55),     KS_period,      KS_colon,
  200     KC(56),     KS_minus,       KS_underscore,
  201     KC(100),    KS_less,        KS_greater,     KS_bar,         KS_brokenbar,
  202     KC(230),    KS_Mode_switch, KS_Multi_key,
  203 };
  204 
  205 static const keysym_t ukbd_keydesc_de_nodead[] = {
  206 /*  pos      normal             shifted         altgr           shift-altgr */
  207     KC(46),     KS_apostrophe,  KS_grave,
  208     KC(48),     KS_plus,        KS_asterisk,    KS_asciitilde,
  209     KC(53),     KS_asciicircum, KS_degree,
  210 };
  211 
  212 static const keysym_t ukbd_keydesc_dk[] = {
  213 /*  pos      normal             shifted         altgr           shift-altgr */
  214     KC(31),     KS_2,           KS_quotedbl,    KS_at,
  215     KC(32),     KS_3,           KS_numbersign,  KS_sterling,
  216     KC(33),     KS_4,           KS_currency,    KS_dollar,
  217     KC(35),     KS_6,           KS_ampersand,
  218     KC(36),     KS_7,           KS_slash,       KS_braceleft,
  219     KC(37),     KS_8,           KS_parenleft,   KS_bracketleft,
  220     KC(38),     KS_9,           KS_parenright,  KS_bracketright,
  221     KC(39),     KS_0,           KS_equal,       KS_braceright,
  222     KC(45),     KS_plus,        KS_question,
  223     KC(46),     KS_dead_acute,  KS_dead_grave,  KS_bar,
  224     KC(47),     KS_aring,
  225     KC(48),     KS_dead_diaeresis,KS_dead_circumflex,KS_dead_tilde,
  226     KC(49),     KS_apostrophe,  KS_asterisk,
  227     KC(50),     KS_apostrophe,  KS_asterisk,
  228     KC(51),     KS_ae,
  229     KC(52),     KS_oslash,
  230     KC(53),     KS_onehalf,     KS_paragraph,
  231     KC(54),     KS_comma,       KS_semicolon,
  232     KC(55),     KS_period,      KS_colon,
  233     KC(56),     KS_minus,       KS_underscore,
  234     KC(100),    KS_less,        KS_greater,     KS_backslash,
  235     KC(230),    KS_Mode_switch, KS_Multi_key,
  236 };
  237 
  238 static const keysym_t ukbd_keydesc_dk_nodead[] = {
  239 /*  pos      normal             shifted         altgr           shift-altgr */
  240     KC(46),     KS_apostrophe,  KS_grave,       KS_bar,
  241     KC(48),     KS_diaeresis,   KS_asciicircum, KS_asciitilde,
  242 };
  243 
  244 static const keysym_t ukbd_keydesc_sv[] = {
  245 /*  pos      normal             shifted         altgr           shift-altgr */
  246     KC(45),     KS_plus,        KS_question,    KS_backslash,
  247     KC(48),     KS_dead_diaeresis,KS_dead_circumflex,KS_dead_tilde,
  248     KC(51),     KS_odiaeresis,
  249     KC(52),     KS_adiaeresis,
  250     KC(53),     KS_section,     KS_onehalf,
  251     KC(100),    KS_less,        KS_greater,     KS_bar,
  252     KC(230),    KS_Mode_switch, KS_Multi_key,
  253 };
  254 
  255 static const keysym_t ukbd_keydesc_sv_nodead[] = {
  256 /*  pos      normal             shifted         altgr           shift-altgr */
  257     KC(46),     KS_apostrophe,  KS_grave,       KS_bar,
  258     KC(48),     KS_diaeresis,   KS_asciicircum, KS_asciitilde,
  259 };
  260 
  261 static const keysym_t ukbd_keydesc_no[] = {
  262 /*  pos      normal             shifted         altgr           shift-altgr */
  263     KC(46),     KS_backslash,   KS_dead_grave,  KS_dead_acute,
  264     KC(48),     KS_dead_diaeresis,KS_dead_circumflex,KS_dead_tilde,
  265     KC(51),     KS_oslash,
  266     KC(52),     KS_ae,
  267     KC(53),     KS_bar,         KS_paragraph,
  268     KC(100),    KS_less,        KS_greater,
  269 };
  270 
  271 static const keysym_t ukbd_keydesc_no_nodead[] = {
  272 /*  pos      normal             shifted         altgr           shift-altgr */
  273     KC(46),     KS_backslash,   KS_grave,       KS_acute,
  274     KC(48),     KS_diaeresis,   KS_asciicircum, KS_asciitilde,
  275 };
  276 
  277 static const keysym_t ukbd_keydesc_fr[] = {
  278 /*  pos      normal             shifted         altgr           shift-altgr */
  279     KC(4),      KS_q,
  280     KC(16),     KS_comma,       KS_question,
  281     KC(20),     KS_a,
  282     KC(26),     KS_z,
  283     KC(29),     KS_w,
  284     KC(30),     KS_ampersand,   KS_1,
  285     KC(31),     KS_eacute,      KS_2,           KS_asciitilde,
  286     KC(32),     KS_quotedbl,    KS_3,           KS_numbersign,
  287     KC(33),     KS_apostrophe,  KS_4,           KS_braceleft,
  288     KC(34),     KS_parenleft,   KS_5,           KS_bracketleft,
  289     KC(35),     KS_minus,       KS_6,           KS_bar,
  290     KC(36),     KS_egrave,      KS_7,           KS_grave,
  291     KC(37),     KS_underscore,  KS_8,           KS_backslash,
  292     KC(38),     KS_ccedilla,    KS_9,           KS_asciicircum,
  293     KC(39),     KS_agrave,      KS_0,           KS_at,
  294     KC(45),     KS_parenright,  KS_degree,      KS_bracketright,
  295     KC(46),     KS_equal,       KS_plus,        KS_braceright,
  296     KC(47),     KS_dead_circumflex,KS_dead_diaeresis,
  297     KC(48),     KS_dollar,      KS_sterling,    KS_currency,
  298     KC(49),     KS_asterisk,    KS_mu,
  299     KC(50),     KS_asterisk,    KS_mu,
  300     KC(51),     KS_m,
  301     KC(52),     KS_ugrave,      KS_percent,
  302     KC(53),     KS_twosuperior,
  303     KC(54),     KS_semicolon,   KS_period,
  304     KC(55),     KS_colon,       KS_slash,
  305     KC(56),     KS_exclam,      KS_section,
  306     KC(100),    KS_less,        KS_greater,
  307     KC(230),    KS_Mode_switch, KS_Multi_key,
  308 };
  309 
  310 static const keysym_t ukbd_keydesc_fr_apple[] = {
  311     KC(5),      KS_b,           KS_B,           KS_ssharp,
  312     KC(8),      KS_e,           KS_E,           KS_ecircumflex, KS_Ecircumflex,
  313     KC(11),     KS_h,           KS_H,           KS_Igrave,      KS_Icircumflex,
  314     KC(12),     KS_i,           KS_I,           KS_icircumflex, KS_idiaeresis,
  315     KC(13),     KS_j,           KS_J,           KS_Idiaeresis,  KS_Iacute,
  316     KC(14),     KS_k,           KS_K,           KS_Egrave,      KS_Ediaeresis,
  317     KC(15),     KS_l,           KS_L,           KS_voidSymbol,  KS_bar,
  318     KC(16),     KS_comma,       KS_question,    KS_voidSymbol,  KS_questiondown,
  319     KC(17),     KS_n,           KS_N,           KS_asciitilde,
  320     KC(20),     KS_a,           KS_A,           KS_ae,          KS_AE,
  321     KC(21),     KS_r,           KS_R,           KS_registered,  KS_comma,
  322     KC(22),     KS_s,           KS_S,           KS_Ograve,
  323     KC(26),     KS_z,           KS_Z,           KS_Acircumflex, KS_Aring,
  324     KC(28),     KS_y,           KS_Y,           KS_Uacute,
  325     KC(31),     KS_eacute,      KS_2,           KS_ediaeresis,
  326     KC(32),     KS_quotedbl,    KS_3,
  327     KC(33),     KS_apostrophe,  KS_4,
  328     KC(34),     KS_parenleft,   KS_5,           KS_braceleft,   KS_bracketleft,
  329     KC(35),     KS_section,     KS_6,
  330     KC(36),     KS_egrave,      KS_7,           KS_guillemotleft,
  331                                                 KS_guillemotright,
  332     KC(37),     KS_exclam,      KS_8,
  333     KC(38),     KS_ccedilla,    KS_9,           KS_Ccedilla,    KS_Aacute,
  334     KC(37),     KS_exclam,      KS_8,           KS_exclamdown,  KS_Ucircumflex,
  335     KC(39),     KS_agrave,      KS_0,           KS_oslash,      KS_Ooblique,
  336     KC(45),     KS_parenright,  KS_degree,      KS_braceright,  KS_bracketright,
  337     KC(46),     KS_minus,       KS_underscore,
  338     KC(47),     KS_dead_circumflex, KS_dead_diaeresis,
  339                                                 KS_ocircumflex, KS_Ocircumflex,
  340     KC(48),     KS_dollar,      KS_asterisk,    KS_cent,        KS_yen,
  341     KC(50),     KS_grave,       KS_sterling,    KS_at,          KS_numbersign,
  342     KC(51),     KS_m,           KS_M,           KS_mu,          KS_Oacute,
  343     KC(52),     KS_ugrave,      KS_percent,     KS_Ugrave,
  344     KC(53),     KS_at,          KS_numbersign,
  345     KC(55),     KS_colon,       KS_slash,       KS_voidSymbol,  KS_backslash,
  346     KC(56),     KS_equal,       KS_plus,
  347     KC(103),    KS_KP_Equal,
  348     KC(231),    KS_Mode_switch, KS_Multi_key,
  349 };
  350 
  351 static const keysym_t ukbd_keydesc_it[] = {
  352 /*  pos      normal             shifted         altgr           shift-altgr */
  353     KC(31),     KS_2,           KS_quotedbl,    KS_twosuperior,
  354     KC(32),     KS_3,           KS_sterling,    KS_threesuperior,
  355     KC(34),     KS_5,           KS_percent,
  356     KC(35),     KS_6,           KS_ampersand,
  357     KC(36),     KS_7,           KS_slash,
  358     KC(37),     KS_8,           KS_parenleft,
  359     KC(38),     KS_9,           KS_parenright,
  360     KC(39),     KS_0,           KS_equal,
  361     KC(45),     KS_apostrophe,  KS_question,
  362     KC(46),     KS_igrave,      KS_asciicircum,
  363     KC(47),     KS_egrave,      KS_eacute,      KS_braceleft,   KS_bracketleft,
  364     KC(48),     KS_plus,        KS_asterisk,    KS_braceright,  KS_bracketright,
  365     KC(49),     KS_ugrave,      KS_section,
  366     KC(50),     KS_ugrave,      KS_section,
  367     KC(51),     KS_ograve,      KS_Ccedilla,    KS_at,
  368     KC(52),     KS_agrave,      KS_degree,      KS_numbersign,
  369     KC(53),     KS_backslash,   KS_bar,
  370     KC(54),     KS_comma,       KS_semicolon,
  371     KC(55),     KS_period,      KS_colon,
  372     KC(56),     KS_minus,       KS_underscore,
  373     KC(100),    KS_less,        KS_greater,
  374     KC(230),    KS_Mode_switch, KS_Multi_key,
  375 };
  376 
  377 static const keysym_t ukbd_keydesc_uk[] = {
  378 /*  pos      normal             shifted         altgr           shift-altgr */
  379     KC(30),     KS_1,           KS_exclam,      KS_plusminus,   KS_exclamdown,
  380     KC(31),     KS_2,           KS_quotedbl,    KS_twosuperior, KS_cent,
  381     KC(32),     KS_3,           KS_sterling,    KS_threesuperior,
  382     KC(33),     KS_4,           KS_dollar,      KS_acute,       KS_currency,
  383     KC(34),     KS_5,           KS_percent,     KS_mu,          KS_yen,
  384     KC(35),     KS_6,           KS_asciicircum, KS_paragraph,
  385     KC(36),     KS_7,           KS_ampersand,   KS_periodcentered,KS_brokenbar,
  386     KC(37),     KS_8,           KS_asterisk,    KS_cedilla,     KS_ordfeminine,
  387     KC(38),     KS_9,           KS_parenleft,   KS_onesuperior, KS_diaeresis,
  388     KC(39),     KS_0,           KS_parenright,  KS_masculine,   KS_copyright,
  389     KC(45),     KS_minus,       KS_underscore,  KS_hyphen,      KS_ssharp,
  390     KC(46),     KS_equal,       KS_plus,        KS_onehalf,     KS_guillemotleft,
  391     KC(49),     KS_numbersign,  KS_asciitilde,  KS_sterling,    KS_thorn,
  392     KC(50),     KS_numbersign,  KS_asciitilde,  KS_sterling,    KS_thorn,
  393     KC(52),     KS_apostrophe,  KS_at,          KS_section,     KS_Agrave,
  394     KC(53),     KS_grave,       KS_grave,       KS_agrave,      KS_agrave,
  395     KC(100),    KS_backslash,   KS_bar,         KS_Udiaeresis,
  396 };
  397 
  398 static const keysym_t ukbd_keydesc_jp[] = {
  399 /*  pos      normal             shifted         altgr           shift-altgr */
  400     KC(31),     KS_2,           KS_quotedbl,
  401     KC(35),     KS_6,           KS_ampersand,
  402     KC(36),     KS_7,           KS_apostrophe,
  403     KC(37),     KS_8,           KS_parenleft,
  404     KC(38),     KS_9,           KS_parenright,
  405     KC(39),     KS_0,
  406     KC(45),     KS_minus,       KS_equal,
  407     KC(46),     KS_asciicircum, KS_asciitilde,
  408     KC(47),     KS_at,          KS_grave,
  409     KC(48),     KS_bracketleft, KS_braceleft,
  410     KC(49),     KS_bracketright,KS_braceright,
  411     KC(50),     KS_bracketright,KS_braceright,
  412     KC(51),     KS_semicolon,   KS_plus,
  413     KC(52),     KS_colon,       KS_asterisk,
  414     KC(53),     KS_Zenkaku_Hankaku,/*replacegrave/tilde*/
  415     KC(135),    KS_Hiragana_Katakana,
  416     KC(136),    KS_backslash,   KS_underscore,
  417     KC(137),    KS_Henkan,
  418     KC(138),    KS_Muhenkan,
  419     KC(139),    KS_backslash,   KS_bar,
  420 };
  421 
  422 static const keysym_t ukbd_keydesc_es[] = {
  423 /*  pos      normal             shifted         altgr           shift-altgr */
  424     KC(30),     KS_1,           KS_exclam,      KS_bar,
  425     KC(31),     KS_2,           KS_quotedbl,    KS_at,
  426     KC(32),     KS_3,           KS_periodcentered,KS_numbersign,
  427     KC(33),     KS_4,           KS_dollar,      KS_asciitilde,
  428     KC(35),     KS_6,           KS_ampersand,
  429     KC(36),     KS_7,           KS_slash,
  430     KC(37),     KS_8,           KS_parenleft,
  431     KC(38),     KS_9,           KS_parenright,
  432     KC(39),     KS_0,           KS_equal,
  433     KC(45),     KS_apostrophe,  KS_question,
  434     KC(46),     KS_exclamdown,  KS_questiondown,
  435     KC(47),     KS_dead_grave,  KS_dead_circumflex,KS_bracketleft,
  436     KC(48),     KS_plus,        KS_asterisk,    KS_bracketright,
  437     KC(49),     KS_ccedilla,    KS_Ccedilla,    KS_braceright,
  438     KC(50),     KS_ccedilla,    KS_Ccedilla,    KS_braceright,
  439     KC(51),     KS_ntilde,
  440     KC(52),     KS_dead_acute,  KS_dead_diaeresis,KS_braceleft,
  441     KC(53),     KS_degree,      KS_ordfeminine, KS_backslash,
  442     KC(54),     KS_comma,       KS_semicolon,
  443     KC(55),     KS_period,      KS_colon,
  444     KC(56),     KS_minus,       KS_underscore,
  445     KC(100),    KS_less,        KS_greater,
  446     KC(230),    KS_Mode_switch, KS_Multi_key,
  447 };
  448 
  449 static const keysym_t ukbd_keydesc_lt[] = {
  450 /*  pos      normal             shifted         altgr           shift-altgr */
  451     KC(8),      KS_e,           KS_E,           KS_currency,
  452     KC(9),      KS_L7_scaron,   KS_L7_Scaron,
  453     KC(20),     KS_L7_aogonek,  KS_L7_Aogonek,
  454     KC(26),     KS_L7_zcaron,   KS_L7_Zcaron,
  455     KC(27),     KS_L7_umacron,  KS_L7_Umacron,
  456     KC(30),     KS_exclam,      KS_1,           KS_at,
  457     KC(31),     KS_minus,       KS_2,           KS_underscore,
  458     KC(32),     KS_slash,       KS_3,           KS_numbersign,
  459     KC(33),     KS_semicolon,   KS_4,           KS_dollar,
  460     KC(34),     KS_colon,       KS_5,           KS_paragraph,
  461     KC(35),     KS_comma,       KS_6,           KS_asciicircum,
  462     KC(36),     KS_period,      KS_7,           KS_ampersand,
  463     KC(37),     KS_equal,       KS_8,           KS_asterisk,
  464     KC(38),     KS_bracketleft, KS_9,           KS_parenleft,
  465     KC(39),     KS_bracketright,KS_0,           KS_parenright,
  466     KC(44),     KS_space,       KS_space,       KS_nobreakspace,
  467     KC(45),     KS_question,    KS_plus,        KS_apostrophe,
  468     KC(46),     KS_x,           KS_X,           KS_percent,
  469     KC(47),     KS_L7_iogonek,  KS_L7_Iogonek,  KS_braceleft,
  470     KC(48),     KS_w,           KS_W,           KS_braceright,
  471     KC(49),     KS_q,           KS_Q,           KS_bar,
  472     KC(50),     KS_q,           KS_Q,           KS_bar,
  473     KC(51),     KS_L7_uogonek,  KS_L7_Uogonek,
  474     KC(52),     KS_L7_edot,     KS_L7_Edot,     KS_quotedbl,
  475     KC(53),     KS_grave,       KS_asciitilde,
  476     KC(54),     KS_L7_ccaron,   KS_L7_Ccaron,   KS_L7_dbllow9quot,
  477     KC(55),     KS_f,           KS_F,           KS_L7_leftdblquot,
  478     KC(56),     KS_L7_eogonek,  KS_L7_Eogonek,  KS_backslash,
  479     KC(230),    KS_Mode_switch, KS_Multi_key,
  480 };
  481 
  482 static const keysym_t ukbd_keydesc_be[] = {
  483 /*  pos      normal             shifted         altgr           shift-altgr */
  484     KC(4),      KS_q,
  485     KC(16),     KS_comma,       KS_question,
  486     KC(20),     KS_a,
  487     KC(26),     KS_z,
  488     KC(29),     KS_w,
  489     KC(30),     KS_ampersand,   KS_1,           KS_bar,
  490     KC(31),     KS_eacute,      KS_2,           KS_at,
  491     KC(32),     KS_quotedbl,    KS_3,           KS_numbersign,
  492     KC(33),     KS_apostrophe,  KS_4,
  493     KC(34),     KS_parenleft,   KS_5,
  494     KC(35),     KS_section,     KS_6,           KS_asciicircum,
  495     KC(36),     KS_egrave,      KS_7,
  496     KC(37),     KS_exclam,      KS_8,
  497     KC(38),     KS_ccedilla,    KS_9,           KS_braceleft,
  498     KC(39),     KS_agrave,      KS_0,           KS_braceright,
  499     KC(45),     KS_parenright,  KS_degree,
  500     KC(46),     KS_minus,       KS_underscore,
  501     KC(47),     KS_dead_circumflex,KS_dead_diaeresis,KS_bracketleft,
  502     KC(48),     KS_dollar,      KS_asterisk,    KS_bracketright,
  503     KC(49),     KS_mu,          KS_sterling,    KS_grave,
  504     KC(50),     KS_mu,          KS_sterling,    KS_grave,
  505     KC(51),     KS_m,
  506     KC(52),     KS_ugrave,      KS_percent,     KS_acute,
  507     KC(53),     KS_twosuperior, KS_threesuperior,
  508     KC(54),     KS_semicolon,   KS_period,
  509     KC(55),     KS_colon,       KS_slash,
  510     KC(56),     KS_equal,       KS_plus,        KS_asciitilde,
  511     KC(100),    KS_less,        KS_greater,     KS_backslash,
  512     KC(230),    KS_Mode_switch, KS_Multi_key,
  513 };
  514 
  515 
  516 static const keysym_t ukbd_keydesc_us_dvorak[] = {
  517 /*  pos      command            normal          shifted */
  518     KC(5),      KS_x,
  519     KC(6),      KS_j,
  520     KC(7),      KS_e,
  521     KC(8),      KS_period,      KS_greater,
  522     KC(9),      KS_u,
  523     KC(10),     KS_i,
  524     KC(11),     KS_d,
  525     KC(12),     KS_c,
  526     KC(13),     KS_h,
  527     KC(14),     KS_t,
  528     KC(15),     KS_n,
  529     KC(17),     KS_b,
  530     KC(18),     KS_r,
  531     KC(19),     KS_l,
  532     KC(20),     KS_apostrophe,  KS_quotedbl,
  533     KC(21),     KS_p,
  534     KC(22),     KS_o,
  535     KC(23),     KS_y,
  536     KC(24),     KS_g,
  537     KC(25),     KS_k,
  538     KC(26),     KS_comma,       KS_less,
  539     KC(27),     KS_q,
  540     KC(28),     KS_f,
  541     KC(29),     KS_semicolon,   KS_colon,
  542     KC(45),     KS_bracketleft, KS_braceleft,
  543     KC(46),     KS_bracketright,KS_braceright,
  544     KC(47),     KS_slash,       KS_question,
  545     KC(48),     KS_equal,       KS_plus,
  546     KC(51),     KS_s,
  547     KC(52),     KS_minus,       KS_underscore,
  548     KC(54),     KS_w,
  549     KC(55),     KS_v,
  550     KC(56),     KS_z,
  551 };
  552 
  553 static const keysym_t ukbd_keydesc_swapctrlcaps[] = {
  554 /*  pos      command            normal          shifted */
  555     KC(57),     KS_Cmd1,        KS_Control_L,
  556     KC(224),    KS_Caps_Lock,
  557 };
  558 
  559 static const keysym_t ukbd_keydesc_iopener[] = {
  560 /*  pos      command            normal          shifted */
  561     KC(58),     KS_Cmd_Debugger,KS_Escape,
  562     KC(59),     KS_Cmd_Screen0, KS_f1,
  563     KC(60),     KS_Cmd_Screen1, KS_f2,
  564     KC(61),     KS_Cmd_Screen2, KS_f3,
  565     KC(62),     KS_Cmd_Screen3, KS_f4,
  566     KC(63),     KS_Cmd_Screen4, KS_f5,
  567     KC(64),     KS_Cmd_Screen5, KS_f6,
  568     KC(65),     KS_Cmd_Screen6, KS_f7,
  569     KC(66),     KS_Cmd_Screen7, KS_f8,
  570     KC(67),     KS_Cmd_Screen8, KS_f9,
  571     KC(68),     KS_Cmd_Screen9, KS_f10,
  572     KC(69),     KS_f11,
  573 };
  574 
  575 static const keysym_t ukbd_keydesc_ru[] = {
  576 /*  pos      normal             shifted         altgr                   shift-altgr */
  577     KC(4),      KS_a,           KS_A,           KS_Cyrillic_ef, KS_Cyrillic_EF,
  578     KC(5),      KS_b,           KS_B,           KS_Cyrillic_i,  KS_Cyrillic_I,
  579     KC(6),      KS_c,           KS_C,           KS_Cyrillic_es, KS_Cyrillic_ES,
  580     KC(7),      KS_d,           KS_D,           KS_Cyrillic_ve, KS_Cyrillic_VE,
  581     KC(8),      KS_e,           KS_E,           KS_Cyrillic_u,  KS_Cyrillic_U,
  582     KC(9),      KS_f,           KS_F,           KS_Cyrillic_a,  KS_Cyrillic_A,
  583     KC(10),     KS_g,           KS_G,           KS_Cyrillic_pe, KS_Cyrillic_PE,
  584     KC(11),     KS_h,           KS_H,           KS_Cyrillic_er, KS_Cyrillic_ER,
  585     KC(12),     KS_i,           KS_I,           KS_Cyrillic_sha,KS_Cyrillic_SHA,
  586     KC(13),     KS_j,           KS_J,           KS_Cyrillic_o,  KS_Cyrillic_O,
  587     KC(14),     KS_k,           KS_K,           KS_Cyrillic_el, KS_Cyrillic_EL,
  588     KC(15),     KS_l,           KS_L,           KS_Cyrillic_de, KS_Cyrillic_DE,
  589     KC(16),     KS_m,           KS_M,           KS_Cyrillic_ssighn,KS_Cyrillic_SSIGHN,
  590     KC(17),     KS_n,           KS_N,           KS_Cyrillic_te, KS_Cyrillic_TE,
  591     KC(18),     KS_o,           KS_O,           KS_Cyrillic_scha,KS_Cyrillic_SCHA,
  592     KC(19),     KS_p,           KS_P,           KS_Cyrillic_ze, KS_Cyrillic_ZE,
  593     KC(20),     KS_q,           KS_Q,           KS_Cyrillic_ishort,KS_Cyrillic_ISHORT,
  594     KC(21),     KS_r,           KS_R,           KS_Cyrillic_ka, KS_Cyrillic_KA,
  595     KC(22),     KS_s,           KS_S,           KS_Cyrillic_yeru,KS_Cyrillic_YERU,
  596     KC(23),     KS_t,           KS_T,           KS_Cyrillic_ie, KS_Cyrillic_IE,
  597     KC(24),     KS_u,           KS_U,           KS_Cyrillic_ge, KS_Cyrillic_GE,
  598     KC(25),     KS_v,           KS_V,           KS_Cyrillic_em, KS_Cyrillic_EM,
  599     KC(26),     KS_w,           KS_W,           KS_Cyrillic_tse,KS_Cyrillic_TSE,
  600     KC(27),     KS_x,           KS_X,           KS_Cyrillic_che,KS_Cyrillic_CHE,
  601     KC(28),     KS_y,           KS_Y,           KS_Cyrillic_en, KS_Cyrillic_EN,
  602     KC(29),     KS_z,           KS_Z,           KS_Cyrillic_ya, KS_Cyrillic_YA,
  603     KC(35),     KS_6,           KS_asciicircum, KS_6,           KS_comma,
  604     KC(36),     KS_7,           KS_ampersand,   KS_7,           KS_period,
  605     KC(47),     KS_bracketleft, KS_braceleft,   KS_Cyrillic_ha, KS_Cyrillic_HA,
  606     KC(48),     KS_bracketright,KS_braceright,  KS_Cyrillic_hsighn,KS_Cyrillic_HSIGHN,
  607     KC(51),     KS_semicolon,   KS_colon,       KS_Cyrillic_zhe,KS_Cyrillic_ZHE,
  608     KC(52),     KS_apostrophe,  KS_quotedbl,    KS_Cyrillic_e,  KS_Cyrillic_E,
  609     KC(54),     KS_comma,       KS_less,        KS_Cyrillic_be, KS_Cyrillic_BE,
  610     KC(55),     KS_period,      KS_greater,     KS_Cyrillic_yu, KS_Cyrillic_YU,
  611     KC(56),     KS_slash,       KS_question,    KS_Cyrillic_yo, KS_Cyrillic_YO,
  612     KC(230),    KS_Mode_switch, KS_Multi_key,
  613 };
  614 
  615 static const keysym_t ukbd_keydesc_ua[] = {
  616 /*  pos      normal             shifted         altgr                   shift-altgr */
  617     KC(4),      KS_a,           KS_A,           KS_Cyrillic_ef, KS_Cyrillic_EF,
  618     KC(5),      KS_b,           KS_B,           KS_Cyrillic_i,  KS_Cyrillic_I,
  619     KC(6),      KS_c,           KS_C,           KS_Cyrillic_es, KS_Cyrillic_ES,
  620     KC(7),      KS_d,           KS_D,           KS_Cyrillic_ve, KS_Cyrillic_VE,
  621     KC(8),      KS_e,           KS_E,           KS_Cyrillic_u,  KS_Cyrillic_U,
  622     KC(9),      KS_f,           KS_F,           KS_Cyrillic_a,  KS_Cyrillic_A,
  623     KC(10),     KS_g,           KS_G,           KS_Cyrillic_pe, KS_Cyrillic_PE,
  624     KC(11),     KS_h,           KS_H,           KS_Cyrillic_er, KS_Cyrillic_ER,
  625     KC(12),     KS_i,           KS_I,           KS_Cyrillic_sha,KS_Cyrillic_SHA,
  626     KC(13),     KS_j,           KS_J,           KS_Cyrillic_o,  KS_Cyrillic_O,
  627     KC(14),     KS_k,           KS_K,           KS_Cyrillic_el, KS_Cyrillic_EL,
  628     KC(15),     KS_l,           KS_L,           KS_Cyrillic_de, KS_Cyrillic_DE,
  629     KC(16),     KS_m,           KS_M,           KS_Cyrillic_ssighn,KS_Cyrillic_SSIGHN,
  630     KC(17),     KS_n,           KS_N,           KS_Cyrillic_te, KS_Cyrillic_TE,
  631     KC(18),     KS_o,           KS_O,           KS_Cyrillic_scha,KS_Cyrillic_SCHA,
  632     KC(19),     KS_p,           KS_P,           KS_Cyrillic_ze, KS_Cyrillic_ZE,
  633     KC(20),     KS_q,           KS_Q,           KS_Cyrillic_ishort,KS_Cyrillic_ISHORT,
  634     KC(21),     KS_r,           KS_R,           KS_Cyrillic_ka, KS_Cyrillic_KA,
  635     KC(22),     KS_s,           KS_S,           KS_Cyrillic_yeru,KS_Cyrillic_YERU,
  636     KC(23),     KS_t,           KS_T,           KS_Cyrillic_ie, KS_Cyrillic_IE,
  637     KC(24),     KS_u,           KS_U,           KS_Cyrillic_ge, KS_Cyrillic_GE,
  638     KC(25),     KS_v,           KS_V,           KS_Cyrillic_em, KS_Cyrillic_EM,
  639     KC(26),     KS_w,           KS_W,           KS_Cyrillic_tse,KS_Cyrillic_TSE,
  640     KC(27),     KS_x,           KS_X,           KS_Cyrillic_che,KS_Cyrillic_CHE,
  641     KC(28),     KS_y,           KS_Y,           KS_Cyrillic_en, KS_Cyrillic_EN,
  642     KC(29),     KS_z,           KS_Z,           KS_Cyrillic_ya, KS_Cyrillic_YA,
  643     KC(35),     KS_6,           KS_asciicircum, KS_6,           KS_comma,
  644     KC(36),     KS_7,           KS_ampersand,   KS_7,           KS_period,
  645     KC(45),     KS_minus,       KS_underscore,  KS_Cyrillic_iukr,KS_Cyrillic_IUKR,
  646     KC(46),     KS_equal,       KS_plus,        KS_Cyrillic_yeukr,KS_Cyrillic_YEUKR,
  647     KC(47),     KS_bracketleft, KS_braceleft,   KS_Cyrillic_ha, KS_Cyrillic_HA,
  648     KC(48),     KS_bracketright,KS_braceright,  KS_Cyrillic_hsighn,KS_Cyrillic_HSIGHN,
  649     KC(49),     KS_backslash,   KS_bar,         KS_Cyrillic_yi, KS_Cyrillic_YI,
  650     KC(50),     KS_backslash,   KS_bar,         KS_Cyrillic_yi, KS_Cyrillic_YI,
  651     KC(51),     KS_semicolon,   KS_colon,       KS_Cyrillic_zhe,KS_Cyrillic_ZHE,
  652     KC(52),     KS_apostrophe,  KS_quotedbl,    KS_Cyrillic_e,  KS_Cyrillic_E,
  653     KC(53),     KS_grave,       KS_asciitilde,  KS_Cyrillic_gheukr,KS_Cyrillic_GHEUKR,
  654     KC(54),     KS_comma,       KS_less,        KS_Cyrillic_be, KS_Cyrillic_BE,
  655     KC(55),     KS_period,      KS_greater,     KS_Cyrillic_yu, KS_Cyrillic_YU,
  656     KC(56),     KS_slash,       KS_question,    KS_Cyrillic_yo, KS_Cyrillic_YO,
  657     KC(230),    KS_Mode_switch, KS_Multi_key,
  658 };
  659 
  660 static const keysym_t ukbd_keydesc_sg[] = {
  661 /*  pos      normal             shifted         altgr           shift-altgr */
  662     KC(8),      KS_e,           KS_E,           KS_currency,
  663     KC(28),     KS_z,
  664     KC(29),     KS_y,
  665     KC(30),     KS_1,           KS_plus,        KS_bar,
  666     KC(31),     KS_2,           KS_quotedbl,    KS_at,
  667     KC(32),     KS_3,           KS_asterisk,    KS_numbersign,
  668     KC(33),     KS_4,           KS_ccedilla,
  669     KC(35),     KS_6,           KS_ampersand,   KS_notsign,
  670     KC(36),     KS_7,           KS_slash,       KS_brokenbar,
  671     KC(37),     KS_8,           KS_parenleft,   KS_cent,
  672     KC(38),     KS_9,           KS_parenright,
  673     KC(39),     KS_0,           KS_equal,
  674     KC(45),     KS_apostrophe,  KS_question,    KS_dead_acute,
  675     KC(46),     KS_dead_circumflex,KS_dead_grave,KS_dead_tilde,
  676     KC(47),     KS_udiaeresis,  KS_egrave,      KS_bracketleft,
  677     KC(48),     KS_dead_diaeresis,KS_exclam,    KS_bracketright,
  678     KC(49),     KS_dollar,      KS_sterling,    KS_braceright,
  679     KC(50),     KS_dollar,      KS_sterling,    KS_braceright,
  680     KC(51),     KS_odiaeresis,  KS_eacute,
  681     KC(52),     KS_adiaeresis,  KS_agrave,      KS_braceleft,
  682     KC(53),     KS_section,     KS_degree,      KS_dead_abovering,
  683     KC(54),     KS_comma,       KS_semicolon,
  684     KC(55),     KS_period,      KS_colon,
  685     KC(56),     KS_minus,       KS_underscore,
  686     KC(100),    KS_less,        KS_greater,     KS_backslash,
  687     KC(230),    KS_Mode_switch, KS_Multi_key,
  688 };
  689 
  690 static const keysym_t ukbd_keydesc_sg_nodead[] = {
  691 /*  pos      normal             shifted         altgr           shift-altgr */
  692     KC(45),     KS_apostrophe,  KS_question,    KS_acute,
  693     KC(46),     KS_asciicircum, KS_grave,       KS_asciitilde,
  694     KC(48),     KS_diaeresis,   KS_exclam,      KS_bracketright,
  695 };
  696 
  697 static const keysym_t ukbd_keydesc_sf[] = {
  698 /*  pos      normal             shifted         altgr           shift-altgr */
  699     KC(47),     KS_egrave,      KS_udiaeresis,  KS_bracketleft,
  700     KC(51),     KS_eacute,      KS_odiaeresis,
  701     KC(52),     KS_agrave,      KS_adiaeresis,  KS_braceleft,
  702 };
  703 
  704 static const keysym_t ukbd_keydesc_pt[] = {
  705 /*  pos      normal             shifted         altgr           shift-altgr */
  706     KC(31),     KS_2,           KS_quotedbl,    KS_at,
  707     KC(32),     KS_3,           KS_numbersign,  KS_sterling,
  708     KC(35),     KS_6,           KS_ampersand,
  709     KC(36),     KS_7,           KS_slash,       KS_braceleft,
  710     KC(37),     KS_8,           KS_parenleft,   KS_bracketleft,
  711     KC(38),     KS_9,           KS_parenright,  KS_bracketright,
  712     KC(39),     KS_0,           KS_equal,       KS_braceright,
  713     KC(45),     KS_apostrophe,  KS_question,
  714     KC(46),     KS_less,        KS_greater,
  715     KC(47),     KS_plus,        KS_asterisk,
  716     KC(48),     KS_dead_acute,  KS_dead_grave,
  717     KC(49),     KS_dead_tilde,  KS_dead_circumflex,
  718     KC(50),     KS_dead_tilde,  KS_dead_circumflex,
  719     KC(51),     KS_ccedilla,    KS_Ccedilla,
  720     KC(52),     KS_masculine,   KS_ordfeminine,
  721     KC(53),     KS_backslash,   KS_bar,
  722     KC(54),     KS_comma,       KS_semicolon,
  723     KC(55),     KS_period,      KS_colon,
  724     KC(56),     KS_minus,       KS_underscore,
  725     KC(100),    KS_less,        KS_greater,
  726     KC(230),    KS_Mode_switch, KS_Multi_key,
  727 };
  728 
  729 static const keysym_t ukbd_keydesc_pt_apple[] = {
  730 /*  pos         normal          shifted */
  731     KC(46),     KS_plus,        KS_asterisk,
  732     KC(47),     KS_masculine,   KS_ordfeminine,
  733     KC(50),     KS_backslash,   KS_bar,
  734     KC(52),     KS_dead_tilde,  KS_dead_circumflex
  735 };
  736 
  737 static const keysym_t ukbd_keydesc_la[] = {
  738 /*  pos      normal             shifted         altgr           shift-altgr */
  739     KC(20),     KS_q,           KS_Q,           KS_at,
  740     KC(30),     KS_1,           KS_exclam,
  741     KC(31),     KS_2,           KS_quotedbl,
  742     KC(32),     KS_3,           KS_numbersign,
  743     KC(35),     KS_6,           KS_ampersand,
  744     KC(36),     KS_7,           KS_slash,
  745     KC(37),     KS_8,           KS_parenleft,
  746     KC(38),     KS_9,           KS_parenright,
  747     KC(39),     KS_0,           KS_equal,
  748     KC(45),     KS_apostrophe,  KS_question,    KS_backslash,
  749     KC(46),     KS_questiondown,KS_exclamdown,
  750     KC(47),     KS_dead_acute,  KS_dead_diaeresis,
  751     KC(48),     KS_plus,        KS_asterisk,    KS_asciitilde,
  752     KC(49),     KS_braceright,  KS_bracketright,KS_dead_grave,
  753     KC(50),     KS_braceright,  KS_bracketright,KS_dead_grave,
  754     KC(51),     KS_ntilde,
  755     KC(52),     KS_braceleft,   KS_bracketleft, KS_dead_circumflex,
  756     KC(53),     KS_bar,         KS_degree,      KS_notsign,
  757     KC(54),     KS_comma,       KS_semicolon,
  758     KC(55),     KS_period,      KS_colon,
  759     KC(56),     KS_minus,       KS_underscore,
  760     KC(100),    KS_less,        KS_greater,
  761     KC(230),    KS_Mode_switch, KS_Multi_key,
  762 };
  763 
  764 static const keysym_t ukbd_keydesc_br[] = {
  765 /*  pos      normal             shifted         altgr           shift-altgr */
  766     KC(30),     KS_1,           KS_exclam,      KS_onesuperior,
  767     KC(31),     KS_2,           KS_at,          KS_twosuperior,
  768     KC(32),     KS_3,           KS_numbersign,  KS_threesuperior,
  769     KC(33),     KS_4,           KS_dollar,      KS_sterling,
  770     KC(34),     KS_5,           KS_percent,     KS_cent,
  771     KC(35),     KS_6,           KS_dead_diaeresis,KS_notsign,
  772     KC(46),     KS_equal,       KS_plus,        KS_section,
  773     KC(47),     KS_dead_acute,  KS_dead_grave,
  774     KC(48),     KS_bracketleft, KS_braceleft,   KS_ordfeminine,
  775     KC(49),     KS_bracketright,KS_braceright,  KS_masculine,
  776     KC(50),     KS_bracketright,KS_braceright,  KS_masculine,
  777     KC(51),     KS_ccedilla,    KS_Ccedilla,
  778     KC(52),     KS_dead_tilde,  KS_dead_circumflex,
  779     KC(53),     KS_apostrophe,  KS_quotedbl,
  780     KC(56),     KS_semicolon,   KS_colon,
  781     KC(99),     KS_KP_Delete,   KS_KP_Decimal,
  782     KC(100),    KS_backslash,   KS_bar,
  783     KC(136),    KS_slash,       KS_question,    KS_degree,
  784 };
  785 
  786 static const keysym_t ukbd_keydesc_tr[] = {
  787 /*  pos      normal             shifted         altgr           shift-altgr */
  788     KC(12),     KS_L5_idotless, KS_I,
  789     KC(20),     KS_q,           KS_Q,           KS_at,
  790     KC(31),     KS_2,           KS_apostrophe,  KS_sterling,
  791     KC(32),     KS_3,           KS_asciicircum, KS_numbersign,
  792     KC(33),     KS_4,           KS_plus,        KS_dollar,
  793     KC(34),     KS_5,           KS_percent,     KS_onehalf,
  794     KC(35),     KS_6,           KS_ampersand,
  795     KC(36),     KS_7,           KS_slash,       KS_braceleft,
  796     KC(37),     KS_8,           KS_parenleft,   KS_bracketleft,
  797     KC(38),     KS_9,           KS_parenright,  KS_bracketright,
  798     KC(39),     KS_0,           KS_equal,       KS_braceright,
  799     KC(45),     KS_asterisk,    KS_question,    KS_backslash,
  800     KC(46),     KS_minus,       KS_underscore,
  801     KC(47),     KS_L5_gbreve,   KS_L5_Gbreve,   KS_dead_diaeresis,
  802     KC(48),     KS_udiaeresis,  KS_Udiaeresis,  KS_asciitilde,
  803     KC(49),     KS_comma,       KS_semicolon,   KS_dead_grave,
  804     KC(50),     KS_comma,       KS_semicolon,   KS_dead_grave,
  805     KC(51),     KS_L5_scedilla, KS_L5_Scedilla, KS_dead_acute,
  806     KC(52),     KS_i,           KS_L5_Idotabove,
  807     KC(53),     KS_quotedbl,    KS_eacute,
  808     KC(54),     KS_odiaeresis,  KS_Odiaeresis,
  809     KC(55),     KS_ccedilla,    KS_Ccedilla,
  810     KC(56),     KS_period,      KS_colon,
  811     KC(100),    KS_less,        KS_greater,     KS_bar,
  812     KC(230),    KS_Mode_switch, KS_Multi_key,
  813 };
  814 
  815 static const keysym_t ukbd_keydesc_tr_nodead[] = {
  816 /*  pos      normal             shifted         altgr           shift-altgr */
  817     KC(47),     KS_L5_gbreve,   KS_L5_Gbreve,
  818     KC(49),     KS_comma,       KS_semicolon,   KS_grave,
  819     KC(50),     KS_comma,       KS_semicolon,   KS_grave,
  820     KC(51),     KS_L5_scedilla, KS_L5_Scedilla, KS_apostrophe,
  821 };
  822 
  823 static const keysym_t ukbd_keydesc_pl[] = {
  824 /*  pos      normal             shifted         altgr           shift-altgr */
  825     KC(4),      KS_a,           KS_A,           KS_L2_aogonek,  KS_L2_Aogonek,
  826     KC(6),      KS_c,           KS_C,           KS_L2_cacute,   KS_L2_Cacute,
  827     KC(8),      KS_e,           KS_E,           KS_L2_eogonek,  KS_L2_Eogonek,
  828     KC(15),     KS_l,           KS_L,           KS_L2_lstroke,  KS_L2_Lstroke,
  829     KC(17),     KS_n,           KS_N,           KS_L2_nacute,   KS_L2_Nacute,
  830     KC(18),     KS_o,           KS_O,           KS_oacute,      KS_Oacute,
  831     KC(22),     KS_s,           KS_S,           KS_L2_sacute,   KS_L2_Sacute,
  832     KC(27),     KS_x,           KS_X,           KS_L2_zacute,   KS_L2_Zacute,
  833     KC(29),     KS_z,           KS_Z,           KS_L2_zdotabove,KS_L2_Zdotabove,
  834     KC(230),    KS_Mode_switch, KS_Multi_key,
  835 };
  836 
  837 static const keysym_t ukbd_keydesc_hu[] = {
  838 /*  pos      normal             shifted         altgr           shift-altgr */
  839     KC(5),      KS_b,           KS_B,           KS_braceleft,
  840     KC(6),      KS_c,           KS_C,           KS_ampersand,
  841     KC(9),      KS_f,           KS_F,           KS_bracketleft,
  842     KC(10),     KS_g,           KS_G,           KS_bracketright,
  843     KC(12),     KS_i,           KS_I,           KS_iacute,
  844     KC(13),     KS_j,           KS_J,           KS_iacute,
  845     KC(17),     KS_n,           KS_N,           KS_braceright,
  846     KC(20),     KS_q,           KS_Q,           KS_backslash,
  847     KC(25),     KS_v,           KS_V,           KS_at,
  848     KC(26),     KS_w,           KS_W,KS_bar,
  849     KC(27),     KS_x,           KS_X,           KS_numbersign,
  850     KC(28),     KS_z,           KS_Z,
  851     KC(29),     KS_y,           KS_Y,           KS_greater,
  852     KC(30),     KS_1,           KS_apostrophe,  KS_asciitilde,
  853     KC(31),     KS_2,           KS_quotedbl,
  854     KC(32),     KS_3,           KS_plus,        KS_asciicircum,
  855     KC(33),     KS_4,           KS_exclam,
  856     KC(34),     KS_5,           KS_percent,
  857     KC(35),     KS_6,           KS_slash,
  858     KC(36),     KS_7,           KS_equal,KS_grave,
  859     KC(37),     KS_8,           KS_parenleft,
  860     KC(38),     KS_9,           KS_parenright,  KS_acute,
  861     KC(39),     KS_odiaeresis,  KS_Odiaeresis,
  862     KC(45),     KS_udiaeresis,  KS_Udiaeresis,
  863     KC(46),     KS_oacute,      KS_Oacute,
  864     KC(47),     KS_odoubleacute,KS_Odoubleacute,KS_division,
  865     KC(48),     KS_uacute,      KS_Uacute,      KS_multiply,
  866     KC(49),     KS_udoubleacute,KS_Udoubleacute,KS_currency,
  867     KC(50),     KS_udoubleacute,KS_Udoubleacute,KS_currency,
  868     KC(51),     KS_eacute,      KS_Eacute,      KS_dollar,
  869     KC(52),     KS_aacute,      KS_Aacute,      KS_ssharp,
  870     KC(53),     KS_0,           KS_section,
  871     KC(54),     KS_comma,       KS_question,    KS_semicolon,
  872     KC(55),     KS_period,      KS_colon,
  873     KC(56),     KS_minus,       KS_underscore,  KS_asterisk,
  874     KC(100),    KS_iacute,      KS_Iacute,      KS_less,
  875     KC(230),    KS_Mode_switch, KS_Multi_key,
  876 };
  877 
  878 static const keysym_t ukbd_keydesc_si[]=
  879 {
  880 /*  pos      normal             shifted         altgr           shift-altgr */
  881     KC(5),      KS_b,           KS_B,           KS_braceleft,
  882     KC(9),      KS_f,           KS_F,           KS_bracketleft,
  883     KC(10),     KS_g,           KS_G,           KS_bracketright,
  884     KC(14),     KS_k,           KS_K,           KS_L2_lstroke,
  885     KC(15),     KS_l,           KS_L,           KS_L2_Lstroke,
  886     KC(16),     KS_m,           KS_M,           KS_section,
  887     KC(17),     KS_n,           KS_N,           KS_braceright,
  888     KC(20),     KS_q,           KS_Q,           KS_backslash,
  889     KC(25),     KS_v,           KS_V,           KS_at,
  890     KC(26),     KS_w,           KS_W,           KS_bar,
  891     KC(28),     KS_z,           KS_Z,
  892     KC(29),     KS_y,           KS_Y,
  893     KC(30),     KS_1,           KS_exclam,      KS_asciitilde,
  894     KC(31),     KS_2,           KS_quotedbl,    KS_L2_caron,
  895     KC(32),     KS_3,           KS_numbersign,  KS_asciicircum,
  896     KC(33),     KS_4,           KS_dollar,      KS_L2_breve,
  897     KC(34),     KS_5,           KS_percent,     KS_degree,
  898     KC(35),     KS_6,           KS_ampersand,   KS_L2_ogonek,
  899     KC(36),     KS_7,           KS_slash,       KS_grave,
  900     KC(37),     KS_8,           KS_parenleft,   KS_L2_dotabove,
  901     KC(38),     KS_9,           KS_parenright,  KS_acute,
  902     KC(39),     KS_0,           KS_equal,       KS_L2_dblacute,
  903     KC(45),     KS_apostrophe,  KS_question,    KS_diaeresis,
  904     KC(46),     KS_plus,        KS_asterisk,    KS_cedilla,
  905     KC(47),     KS_L2_scaron,   KS_L2_Scaron,   KS_division,
  906     KC(48),     KS_L2_dstroke,  KS_L2_Dstroke,  KS_multiply,
  907     KC(49),     KS_L2_zcaron,   KS_L2_Zcaron,   KS_currency,
  908     KC(50),     KS_L2_zcaron,   KS_L2_Zcaron,   KS_currency,
  909     KC(51),     KS_L2_ccaron,   KS_L2_Ccaron,
  910     KC(52),     KS_L2_cacute,   KS_L2_Cacute,   KS_ssharp,
  911     KC(53),     KS_cedilla,     KS_diaeresis,
  912     KC(54),     KS_comma,       KS_semicolon,
  913     KC(55),     KS_period,      KS_colon,
  914     KC(56),     KS_minus,       KS_underscore,
  915     KC(100),    KS_less,        KS_greater,
  916     KC(230),    KS_Mode_switch, KS_Multi_key,
  917 };
  918 
  919 static const keysym_t ukbd_keydesc_cf[] = {
  920 /*  pos      normal             shifted         altgr           shift-altgr */
  921     KC(16),     KS_m,           KS_M,           KS_mu,
  922     KC(18),     KS_o,           KS_O,           KS_section,
  923     KC(19),     KS_p,           KS_P,           KS_paragraph,
  924     KC(30),     KS_1,           KS_exclam,      KS_plusminus,
  925     KC(31),     KS_2,           KS_quotedbl,    KS_at,
  926     KC(32),     KS_3,           KS_slash,       KS_sterling,
  927     KC(33),     KS_4,           KS_dollar,      KS_cent,
  928     KC(34),     KS_5,           KS_percent,     KS_diaeresis,
  929     KC(35),     KS_6,           KS_question,    KS_macron,
  930     KC(36),     KS_7,           KS_ampersand,   KS_brokenbar,
  931     KC(37),     KS_8,           KS_asterisk,    KS_twosuperior,
  932     KC(38),     KS_9,           KS_parenleft,   KS_threesuperior,
  933     KC(39),     KS_0,           KS_parenright,  KS_onequarter,
  934     KC(45),     KS_minus,       KS_underscore,  KS_onehalf,
  935     KC(46),     KS_equal,       KS_plus,        KS_threequarters,
  936     KC(47),     KS_dead_circumflex,KS_dead_circumflex,KS_bracketleft,
  937     KC(48),     KS_dead_cedilla,KS_dead_diaeresis,KS_bracketright,
  938     KC(49),     KS_less,        KS_greater,     KS_braceright,
  939     KC(50),     KS_less,        KS_greater,     KS_braceright,
  940     KC(51),     KS_semicolon,   KS_colon,       KS_asciitilde,
  941     KC(52),     KS_dead_grave,  KS_dead_grave,  KS_braceleft,
  942     KC(53),     KS_numbersign,  KS_bar,         KS_backslash,
  943     KC(54),     KS_comma,       KS_apostrophe,  KS_hyphen,
  944     KC(55),     KS_period,      KS_period,
  945     KC(56),     KS_eacute,      KS_Eacute,      KS_dead_acute,
  946     KC(100),    KS_guillemotleft,KS_guillemotright,KS_degree,
  947     KC(230),    KS_Mode_switch,KS_Multi_key,
  948 };
  949 
  950 static const keysym_t ukbd_keydesc_cf_nodead[] = {
  951 /*  pos      normal             shifted         altgr           shift-altgr */
  952     KC(47),     KS_asciicircum,KS_asciicircum,KS_bracketleft,
  953     KC(48),     KS_cedilla,     KS_diaeresis,   KS_bracketright,
  954     KC(52),     KS_grave,       KS_grave,       KS_braceleft,
  955     KC(56),     KS_eacute,      KS_Eacute,      KS_acute,
  956 };
  957 
  958 static const keysym_t ukbd_keydesc_lv[] = {
  959 /*  pos      normal             shifted         altgr           shift-altgr */
  960     KC(4),      KS_a,           KS_A,           KS_L7_amacron,  KS_L7_Amacron,
  961     KC(6),      KS_c,           KS_C,           KS_L7_ccaron,   KS_L7_Ccaron,
  962     KC(8),      KS_e,           KS_E,           KS_L7_emacron,  KS_L7_Emacron,
  963     KC(10),     KS_g,           KS_G,           KS_L7_gcedilla, KS_L7_Gcedilla,
  964     KC(12),     KS_i,           KS_I,           KS_L7_imacron,  KS_L7_Imacron,
  965     KC(14),     KS_k,           KS_K,           KS_L7_kcedilla, KS_L7_Kcedilla,
  966     KC(15),     KS_l,           KS_L,           KS_L7_lcedilla, KS_L7_Lcedilla,
  967     KC(17),     KS_n,           KS_N,           KS_L7_ncedilla, KS_L7_Ncedilla,
  968     KC(18),     KS_o,           KS_O,           KS_L7_omacron,  KS_L7_Omacron,
  969     KC(22),     KS_s,           KS_S,           KS_L7_scaron,   KS_L7_Scaron,
  970     KC(24),     KS_u,           KS_U,           KS_L7_umacron,  KS_L7_Umacron,
  971     KC(29),     KS_z,           KS_Z,           KS_L7_zcaron,   KS_L7_Zcaron,
  972     KC(230),    KS_Mode_switch, KS_Multi_key,
  973 };
  974 
  975 static const keysym_t ukbd_keydesc_nl[] = {
  976 /*  pos      normal             shifted         altgr           shift-altgr */
  977     KC(6),      KS_c,           KS_C,           KS_cent,
  978     KC(16),     KS_m,           KS_M,           KS_mu,
  979     KC(21),     KS_r,           KS_R,           KS_paragraph,
  980     KC(22),     KS_s,           KS_S,           KS_ssharp,
  981     KC(27),     KS_x,           KS_X,           KS_guillemotright,
  982     KC(29),     KS_z,           KS_Z,           KS_guillemotleft,
  983     KC(30),     KS_1,           KS_exclam,      KS_onesuperior,
  984     KC(31),     KS_2,           KS_quotedbl,    KS_twosuperior,
  985     KC(32),     KS_3,           KS_numbersign,  KS_threesuperior,
  986     KC(33),     KS_4,           KS_dollar,      KS_onequarter,
  987     KC(34),     KS_5,           KS_percent,     KS_onehalf,
  988     KC(35),     KS_6,           KS_ampersand,   KS_threequarters,
  989     KC(36),     KS_7,           KS_underscore,  KS_sterling,
  990     KC(37),     KS_8,           KS_parenleft,   KS_braceleft,
  991     KC(38),     KS_9,           KS_parenright,  KS_braceright,
  992     KC(39),     KS_0,           KS_apostrophe,
  993     KC(45),     KS_slash,       KS_question,    KS_backslash,
  994     KC(46),     KS_degree,      KS_dead_tilde,  KS_dead_cedilla,
  995     KC(47),     KS_dead_diaeresis,KS_dead_circumflex,
  996     KC(48),     KS_asterisk,    KS_bar,
  997     KC(49),     KS_less,        KS_greater,
  998     KC(50),     KS_less,        KS_greater,
  999     KC(51),     KS_plus,        KS_plusminus,
 1000     KC(52),     KS_dead_acute,  KS_dead_grave,
 1001     KC(53),     KS_at,          KS_section,     KS_notsign,
 1002     KC(54),     KS_comma,       KS_semicolon,
 1003     KC(55),     KS_period,      KS_colon,       KS_periodcentered,
 1004     KC(56),     KS_minus,       KS_equal,
 1005     KC(100),    KS_bracketright,KS_bracketleft, KS_brokenbar,
 1006     KC(230),    KS_Mode_switch, KS_Multi_key,
 1007 };
 1008 
 1009 static const keysym_t ukbd_keydesc_nl_nodead[] = {
 1010 /*  pos      normal             shifted         altgr           shift-altgr */
 1011     KC(46),     KS_degree,      KS_asciitilde,  KS_cedilla,
 1012     KC(47),     KS_quotedbl,    KS_asciicircum,
 1013     KC(52),     KS_apostrophe,  KS_grave,
 1014 };
 1015 
 1016 #endif  /* SMALL_KERNEL */
 1017 
 1018 #define KBD_MAP(name, base, map) \
 1019                         { name, base, sizeof(map)/sizeof(keysym_t), map }
 1020 
 1021 const struct wscons_keydesc ukbd_keydesctab[] = {
 1022         KBD_MAP(KB_US,                  0,      ukbd_keydesc_us),
 1023 #if !defined(SMALL_KERNEL) || !defined(__alpha__)
 1024         KBD_MAP(KB_DE,                  KB_US,  ukbd_keydesc_de),
 1025         KBD_MAP(KB_DE | KB_NODEAD,      KB_DE,  ukbd_keydesc_de_nodead),
 1026         KBD_MAP(KB_FR,                  KB_US,  ukbd_keydesc_fr),
 1027         KBD_MAP(KB_FR | KB_APPLE,       KB_FR,  ukbd_keydesc_fr_apple),
 1028         KBD_MAP(KB_DK,                  KB_US,  ukbd_keydesc_dk),
 1029         KBD_MAP(KB_DK | KB_NODEAD,      KB_DK,  ukbd_keydesc_dk_nodead),
 1030         KBD_MAP(KB_IT,                  KB_US,  ukbd_keydesc_it),
 1031         KBD_MAP(KB_UK,                  KB_US,  ukbd_keydesc_uk),
 1032         KBD_MAP(KB_JP,                  KB_US,  ukbd_keydesc_jp),
 1033         KBD_MAP(KB_SV,                  KB_DK,  ukbd_keydesc_sv),
 1034         KBD_MAP(KB_SV | KB_NODEAD,      KB_SV,  ukbd_keydesc_sv_nodead),
 1035         KBD_MAP(KB_NO,                  KB_DK,  ukbd_keydesc_no),
 1036         KBD_MAP(KB_NO | KB_NODEAD,      KB_NO,  ukbd_keydesc_no_nodead),
 1037         KBD_MAP(KB_US | KB_DVORAK,      KB_US,  ukbd_keydesc_us_dvorak),
 1038         KBD_MAP(KB_US | KB_SWAPCTRLCAPS, KB_US, ukbd_keydesc_swapctrlcaps),
 1039         KBD_MAP(KB_US | KB_IOPENER,     KB_US,  ukbd_keydesc_iopener),
 1040         KBD_MAP(KB_JP | KB_SWAPCTRLCAPS, KB_JP, ukbd_keydesc_swapctrlcaps),
 1041         KBD_MAP(KB_FR | KB_SWAPCTRLCAPS, KB_FR, ukbd_keydesc_swapctrlcaps),
 1042         KBD_MAP(KB_FR | KB_APPLE | KB_SWAPCTRLCAPS,     KB_FR | KB_APPLE,
 1043                 ukbd_keydesc_swapctrlcaps),
 1044         KBD_MAP(KB_BE | KB_SWAPCTRLCAPS, KB_BE, ukbd_keydesc_swapctrlcaps),
 1045         KBD_MAP(KB_US | KB_DVORAK | KB_SWAPCTRLCAPS,    KB_US | KB_DVORAK,
 1046                 ukbd_keydesc_swapctrlcaps),
 1047         KBD_MAP(KB_US | KB_IOPENER | KB_SWAPCTRLCAPS,   KB_US | KB_IOPENER,
 1048                 ukbd_keydesc_swapctrlcaps),
 1049         KBD_MAP(KB_ES,                  KB_US,  ukbd_keydesc_es),
 1050         KBD_MAP(KB_BE,                  KB_US,  ukbd_keydesc_be),
 1051         KBD_MAP(KB_RU,                  KB_US,  ukbd_keydesc_ru),
 1052         KBD_MAP(KB_UA,                  KB_US,  ukbd_keydesc_ua),
 1053         KBD_MAP(KB_SG,                  KB_US,  ukbd_keydesc_sg),
 1054         KBD_MAP(KB_SG | KB_NODEAD,      KB_SG,  ukbd_keydesc_sg_nodead),
 1055         KBD_MAP(KB_SF,                  KB_SG,  ukbd_keydesc_sf),
 1056         KBD_MAP(KB_SF | KB_NODEAD,      KB_SF,  ukbd_keydesc_sg_nodead),
 1057         KBD_MAP(KB_PT,                  KB_US,  ukbd_keydesc_pt),
 1058         KBD_MAP(KB_PT | KB_APPLE,       KB_PT,  ukbd_keydesc_pt_apple),
 1059         KBD_MAP(KB_LT,                  KB_US,  ukbd_keydesc_lt),
 1060         KBD_MAP(KB_LA,                  KB_US,  ukbd_keydesc_la),
 1061         KBD_MAP(KB_BR,                  KB_US,  ukbd_keydesc_br),
 1062         KBD_MAP(KB_TR,                  KB_US,  ukbd_keydesc_tr),
 1063         KBD_MAP(KB_TR | KB_NODEAD,      KB_TR,  ukbd_keydesc_tr_nodead),
 1064         KBD_MAP(KB_PL,                  KB_US,  ukbd_keydesc_pl),
 1065         KBD_MAP(KB_HU,                  KB_US,  ukbd_keydesc_hu),
 1066         KBD_MAP(KB_SI,                  KB_US,  ukbd_keydesc_si),
 1067         KBD_MAP(KB_CF,                  KB_US,  ukbd_keydesc_cf),
 1068         KBD_MAP(KB_CF | KB_NODEAD,      KB_CF,  ukbd_keydesc_cf_nodead),
 1069         KBD_MAP(KB_LV,                  KB_US,  ukbd_keydesc_lv),
 1070         KBD_MAP(KB_NL,                  KB_US,  ukbd_keydesc_nl),
 1071         KBD_MAP(KB_NL | KB_NODEAD,      KB_NL,  ukbd_keydesc_nl_nodead),
 1072 #endif  /* SMALL_KERNEL */
 1073         {0, 0, 0, 0}
 1074 };
 1075 
 1076 #undef KBD_MAP
 1077 #undef KC

/* [<][>][^][v][top][bottom][index][help] */