root/dev/pckbc/wskbdmap_mfii.c

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

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