Gmane
From: Rui Paulo <rpaulo <at> NetBSD.org>
Subject: Keymap import from OpenBSD
Newsgroups: gmane.os.netbsd.devel.kernel
Date: 2005-07-01 00:45:03 GMT (4 years, 4 days, 21 hours and 14 minutes ago)
Hi
I'm trying to add more keymaps to NetBSD by importing them from OpenBSD.
The following patch adds the keymaps present in OpenBSD but not already
in NetBSD, although I need people with the actual keyboards to test it.

Also, the OpenBSD team developed an awk script to convert PS/2 keymaps
into USB keymaps. I don't know how good it is, but I guess we should do
something similar, no?

I'm not including wscons.conf and wsconsctl(8) man page diffs.

Index: dev/wscons/wsksymdef.h
===================================================================
RCS file: /cvsroot/src/sys/dev/wscons/wsksymdef.h,v
retrieving revision 1.54
diff -u -r1.54 wsksymdef.h
--- dev/wscons/wsksymdef.h	8 Jun 2005 09:11:09 -0000	1.54
+++ dev/wscons/wsksymdef.h	1 Jul 2005 00:42:13 -0000
@@ -276,6 +276,191 @@
 #define	KS_dead_cedilla 	0x0327

 /*
+ * Group Cyrillic (koi8-r)
+ */
+
+#define KS_Cyrillic_A		0xe1
+#define KS_Cyrillic_BE		0xe2
+#define KS_Cyrillic_VE		0xf7
+#define KS_Cyrillic_GE		0xe7
+#define KS_Cyrillic_DE		0xe4
+#define KS_Cyrillic_IE		0xe5
+#define KS_Cyrillic_YO		0xb3
+#define KS_Cyrillic_ZHE		0xf6
+#define KS_Cyrillic_ZE		0xfa
+#define KS_Cyrillic_I		0xe9
+#define KS_Cyrillic_ISHORT	0xea
+#define KS_Cyrillic_IUKR	0xb6
+#define KS_Cyrillic_YI		0xb7
+#define KS_Cyrillic_KA		0xeb
+#define KS_Cyrillic_EL		0xec
+#define KS_Cyrillic_EM		0xed
+#define KS_Cyrillic_EN		0xee
+#define KS_Cyrillic_O		0xef
+#define KS_Cyrillic_PE		0xf0
+#define KS_Cyrillic_ER		0xf2
+#define KS_Cyrillic_ES		0xf3
+#define KS_Cyrillic_TE		0xf4
+#define KS_Cyrillic_U		0xf5
+#define KS_Cyrillic_EF		0xe6
+#define KS_Cyrillic_HA		0xe8
+#define KS_Cyrillic_TSE		0xe3
+#define KS_Cyrillic_CHE		0xfe
+#define KS_Cyrillic_SHA		0xfb
+#define KS_Cyrillic_SCHA	0xfd
+#define KS_Cyrillic_HSIGHN	0xff
+#define KS_Cyrillic_YERU	0xf9
+#define KS_Cyrillic_SSIGHN	0xf8
+#define KS_Cyrillic_E		0xfc
+#define KS_Cyrillic_YU		0xe0
+#define KS_Cyrillic_YA		0xf1
+#define KS_Cyrillic_a		0xc1
+#define KS_Cyrillic_be		0xc2
+#define KS_Cyrillic_ve		0xd7
+#define KS_Cyrillic_ge		0xc7
+#define KS_Cyrillic_de		0xc4
+#define KS_Cyrillic_ie		0xc5
+#define KS_Cyrillic_yo		0xa3
+#define KS_Cyrillic_zhe		0xd6
+#define KS_Cyrillic_ze		0xda
+#define KS_Cyrillic_i		0xc9
+#define KS_Cyrillic_ishort	0xca
+#define KS_Cyrillic_iukr	0xa6
+#define KS_Cyrillic_yi		0xa7
+#define KS_Cyrillic_ka		0xcb
+#define KS_Cyrillic_el		0xcc
+#define KS_Cyrillic_em		0xcd
+#define KS_Cyrillic_en		0xce
+#define KS_Cyrillic_o		0xcf
+#define KS_Cyrillic_pe		0xd0
+#define KS_Cyrillic_er		0xd2
+#define KS_Cyrillic_es		0xd3
+#define KS_Cyrillic_te		0xd4
+#define KS_Cyrillic_u		0xd5
+#define KS_Cyrillic_ef		0xc6
+#define KS_Cyrillic_ha		0xc8
+#define KS_Cyrillic_tse		0xc3
+#define KS_Cyrillic_che		0xde
+#define KS_Cyrillic_sha		0xdb
+#define KS_Cyrillic_scha	0xdd
+#define KS_Cyrillic_hsighn	0xdf
+#define KS_Cyrillic_yeru	0xd9
+#define KS_Cyrillic_ssighn	0xd8
+#define KS_Cyrillic_e		0xdc
+#define KS_Cyrillic_yu		0xc0
+#define KS_Cyrillic_ya		0xd1
+#define KS_Cyrillic_gheukr	0xad
+#define KS_Cyrillic_GHEUKR	0xbd
+#define KS_Cyrillic_yeukr	0xa4
+#define KS_Cyrillic_YEUKR	0xb4
+
+/*
+ * Group Latin-2 (iso8859-2)
+ */
+
+#define KS_L2_Aogonek		0xa1
+#define KS_L2_breve		0xa2
+#define KS_L2_Lstroke		0xa3
+#define KS_L2_Sacute		0xa6
+#define KS_L2_Scaron		0xa9
+#define KS_L2_Zacute		0xac
+#define KS_L2_Zcaron		0xae
+#define KS_L2_Zdotabove		0xaf
+#define KS_L2_aogonek		0xb1
+#define KS_L2_ogonek		0xb2
+#define KS_L2_lstroke		0xb3
+#define KS_L2_sacute		0xb6
+#define KS_L2_caron		0xb7
+#define KS_L2_scaron		0xb9
+#define KS_L2_zacute		0xbc
+#define KS_L2_dblacute		0xbd
+#define KS_L2_zcaron		0xbe
+#define KS_L2_zdotabove		0xbf
+#define KS_L2_Cacute		0xc6
+#define KS_L2_Ccaron		0xc8
+#define KS_L2_Eogonek		0xca
+#define KS_L2_Dstroke		0xd0
+#define KS_L2_Nacute		0xd1
+#define KS_L2_cacute		0xe6
+#define KS_L2_ccaron		0xe8
+#define KS_L2_eogonek		0xea
+#define KS_L2_dstroke		0xf0
+#define KS_L2_nacute		0xf1
+#define KS_L2_dotabove		0xff
+
+/*
+ * Group Latin-5 (iso8859-9)
+ */
+
+#define KS_L5_Gbreve		0xd0
+#define KS_L5_Idotabove		0xdd
+#define KS_L5_Scedilla		0xde
+#define KS_L5_gbreve		0xf0
+#define KS_L5_idotless		0xfd
+#define KS_L5_scedilla		0xfe
+
+/*
+ * Group Latin-7 (iso8859-13)
+ */
+
+#define KS_L7_rightdblquot	0xa1
+#define KS_L7_dbllow9quot	0xa5
+#define KS_L7_Ostroke		0xa8
+#define KS_L7_Rcedilla		0xaa
+#define KS_L7_AE		0xaf
+#define KS_L7_leftdblquot	0xb4
+#define KS_L7_ostroke		0xb8
+#define KS_L7_rcedilla		0xba
+#define KS_L7_ae		0xbf
+#define KS_L7_Aogonek		0xc0
+#define KS_L7_Iogonek		0xc1
+#define KS_L7_Amacron		0xc2
+#define KS_L7_Cacute		0xc3
+#define KS_L7_Eogonek		0xc6
+#define KS_L7_Emacron		0xc7
+#define KS_L7_Ccaron		0xc8
+#define KS_L7_Zacute		0xca
+#define KS_L7_Edot		0xcb
+#define KS_L7_Gcedilla		0xcc
+#define KS_L7_Kcedilla		0xcd
+#define KS_L7_Imacron		0xce
+#define KS_L7_Lcedilla		0xcf
+#define KS_L7_Scaron		0xd0
+#define KS_L7_Nacute		0xd1
+#define KS_L7_Ncedilla		0xd2
+#define KS_L7_Omacron		0xd4
+#define KS_L7_Uogonek		0xd8
+#define KS_L7_Lstroke		0xd9
+#define KS_L7_Sacute		0xda
+#define KS_L7_Umacron		0xdb
+#define KS_L7_Zdot		0xdd
+#define KS_L7_Zcaron		0xde
+#define KS_L7_aogonek		0xe0
+#define KS_L7_iogonek		0xe1
+#define KS_L7_amacron		0xe2
+#define KS_L7_cacute		0xe3
+#define KS_L7_eogonek		0xe6
+#define KS_L7_emacron		0xe7
+#define KS_L7_ccaron		0xe8
+#define KS_L7_zacute		0xea
+#define KS_L7_edot		0xeb
+#define KS_L7_gcedilla		0xec
+#define KS_L7_kcedilla		0xed
+#define KS_L7_imacron		0xee
+#define KS_L7_lcedilla		0xef
+#define KS_L7_scaron		0xf0
+#define KS_L7_nacute		0xf1
+#define KS_L7_ncedilla		0xf2
+#define KS_L7_omacron		0xf4
+#define KS_L7_uogonek		0xf8
+#define KS_L7_lstroke		0xf9
+#define KS_L7_sacute		0xfa
+#define KS_L7_umacron		0xfb
+#define KS_L7_zdot		0xfd
+#define KS_L7_zcaron		0xfe
+#define KS_L7_rightsnglquot	0xff
+
+/*
  * Group 1 (modifiers)
  */

@@ -507,21 +692,28 @@
 action(KB_US,	0,	0x0200,	"us",	,	"US-English")	\
 action(KB_UK,	0,	0x0700,	"uk",	,	"UK-English")	\
 action(KB_BE,	0,	0x1300,	"be",	,	"Belgian")	\
+action(KB_BR,   0,      0x1500, "br",   ,       "Brazilian")    \
 action(KB_DK,	0,	0x0400,	"dk",	,	"Danish")	\
+action(KB_NL,	0,	0x1600, "nl",	,	"Dutch")	\
 action(KB_FI,	0,	0x0900,	"fi",	,	"Finnish")	\
 action(KB_FR,	0,	0x0600,	"fr",	,	"French")	\
 action(KB_DE, KB_NODEAD,0x0300,	"de",".nodead",	"German")	\
 action(KB_HU,	0,	0x0c00,	"hu",	,	"Hungarian")	\
 action(KB_IT,	0,	0x0500,	"it",	,	"Italian")	\
+action(KB_LA,	0,	0x1400, "la",	,	"Lao")		\
+action(KB_LT,	0,	0x1300, "lt",	,	"Lithuanian")	\
 action(KB_JP,	0,	0x0800,	"jp",	,	"Japanese")	\
 action(KB_NO,	0,	0x0a00,	"no",	,	"Norwegian")	\
 action(KB_PL,	0,	0x0d00,	"pl",	,	"Polish")	\
 action(KB_PT,	0,	0x1100,	"pt",	,	"Portugese")	\
 action(KB_RU,	0,	0x0e00,	"ru",	,	"Russian")	\
+action(KB_CF,	0,	0x1a00, "cf",	,	"Sangho")       \
+action(KB_SI,	0,	0x1900,	"si",	,	"Slovenian")	\
 action(KB_ES,	0,	0x0b00,	"es",	,	"Spanish")	\
 action(KB_SV,	0,	0x0900,	"sv",	,	"Swedish")	\
 action(KB_SF,	0,	0x1000,	"sf",	,	"Swiss French")	\
 action(KB_SG,	0,	0x0f00,	"sg",	,	"Swiss German")	\
+action(KB_TR,	0,	0x1700, "tr",	,	"Turkish")	\
 action(KB_UA,	0,	0x1200,	"ua",	,	"Ukrainian")
 #define KB_NONE 0x0000

Index: dev/pckbport/wskbdmap_mfii.c
===================================================================
RCS file: /cvsroot/src/sys/dev/pckbport/wskbdmap_mfii.c,v
retrieving revision 1.9
diff -u -r1.9 wskbdmap_mfii.c
--- dev/pckbport/wskbdmap_mfii.c	5 May 2005 22:31:13 -0000	1.9
+++ dev/pckbport/wskbdmap_mfii.c	1 Jul 2005 00:42:13 -0000
@@ -413,6 +413,425 @@
     KC(184), KS_Mode_switch,	KS_Multi_key,
 };

+static const keysym_t pckbd_keydesc_be[] = {
+/*  pos	     normal		shifted		altgr		shift-altgr */
+    KC(2),   KS_ampersand,	KS_1,		KS_bar,
+    KC(3),   KS_eacute,		KS_2,		KS_at,
+    KC(4),   KS_quotedbl,	KS_3,		KS_numbersign,
+    KC(5),   KS_apostrophe,	KS_4,
+    KC(6),   KS_parenleft,	KS_5,
+    KC(7),   KS_section,	KS_6,		KS_asciicircum,
+    KC(8),   KS_egrave,		KS_7,
+    KC(9),   KS_exclam,		KS_8,
+    KC(10),  KS_ccedilla,	KS_9,		KS_braceleft,
+    KC(11),  KS_agrave,		KS_0,		KS_braceright,
+    KC(12),  KS_parenright,	KS_degree,
+    KC(13),  KS_minus,		KS_underscore,
+    KC(16),  KS_a,
+    KC(17),  KS_z,
+    KC(26),  KS_dead_circumflex, KS_dead_diaeresis, KS_bracketleft,
+    KC(27),  KS_dollar,		KS_asterisk,	KS_bracketright,
+    KC(30),  KS_q,
+    KC(39),  KS_m,
+    KC(40),  KS_ugrave,		KS_percent,	KS_acute,
+    KC(41),  KS_twosuperior,	KS_threesuperior,
+    KC(43),  KS_mu,		KS_sterling,	KS_grave,
+    KC(44),  KS_w,
+    KC(50),  KS_comma,		KS_question,
+    KC(51),  KS_semicolon,	KS_period,
+    KC(52),  KS_colon,		KS_slash,
+    KC(53),  KS_equal,		KS_plus,	KS_asciitilde,
+    KC(86),  KS_less,		KS_greater,	KS_backslash,
+    KC(184), KS_Mode_switch,	KS_Multi_key,
+};
+
+
+static const keysym_t pckbd_keydesc_ru[] = {
+/*  pos      normal		shifted		altgr		shift-altgr */
+    KC(7),   KS_6,		KS_asciicircum, KS_6,		KS_comma,
+    KC(8),   KS_7,		KS_ampersand,	KS_7,		KS_period,
+    KC(16),  KS_q,		KS_Q,		KS_Cyrillic_ishort,
+  KS_Cyrillic_ISHORT,
+    KC(17),  KS_w,		KS_W,		KS_Cyrillic_tse,
+  KS_Cyrillic_TSE,
+    KC(18),  KS_e,		KS_E,		KS_Cyrillic_u,	KS_Cyrillic_U,
+    KC(19),  KS_r,		KS_R,		KS_Cyrillic_ka, KS_Cyrillic_KA,
+    KC(20),  KS_t,		KS_T,		KS_Cyrillic_ie, KS_Cyrillic_IE,
+    KC(21),  KS_y,		KS_Y,		KS_Cyrillic_en, KS_Cyrillic_EN,
+    KC(22),  KS_u,		KS_U,		KS_Cyrillic_ge, KS_Cyrillic_GE,
+    KC(23),  KS_i,		KS_I,		KS_Cyrillic_sha,KS_Cyrillic_SHA,
+    KC(24),  KS_o,		KS_O,		KS_Cyrillic_scha,
+  KS_Cyrillic_SCHA,
+    KC(25),  KS_p,		KS_P,		KS_Cyrillic_ze,	KS_Cyrillic_ZE,
+    KC(26),  KS_bracketleft,	KS_braceleft,	KS_Cyrillic_ha,	KS_Cyrillic_HA,
+    KC(27),  KS_bracketright,	KS_braceright,	KS_Cyrillic_hsighn,
+  KS_Cyrillic_HSIGHN,
+    KC(30),  KS_a,		KS_A,		KS_Cyrillic_ef,	KS_Cyrillic_EF,
+    KC(31),  KS_s,		KS_S,		KS_Cyrillic_yeru,
+  KS_Cyrillic_YERU,
+    KC(32),  KS_d,		KS_D,		KS_Cyrillic_ve, KS_Cyrillic_VE,
+    KC(33),  KS_f,		KS_F,		KS_Cyrillic_a,	KS_Cyrillic_A,
+    KC(34),  KS_g,		KS_G,		KS_Cyrillic_pe,	KS_Cyrillic_PE,
+    KC(35),  KS_h,		KS_H,		KS_Cyrillic_er,	KS_Cyrillic_ER,
+    KC(36),  KS_j,		KS_J,		KS_Cyrillic_o,	KS_Cyrillic_O,
+    KC(37),  KS_k,		KS_K,		KS_Cyrillic_el, KS_Cyrillic_EL,
+    KC(38),  KS_l,		KS_L,		KS_Cyrillic_de,	KS_Cyrillic_DE,
+    KC(39),  KS_semicolon,	KS_colon,	KS_Cyrillic_zhe,KS_Cyrillic_ZHE,
+    KC(40),  KS_apostrophe,	KS_quotedbl,	KS_Cyrillic_e,	KS_Cyrillic_E,
+    KC(44),  KS_z,		KS_Z,		KS_Cyrillic_ya,	KS_Cyrillic_YA,
+    KC(45),  KS_x,		KS_X,		KS_Cyrillic_che,KS_Cyrillic_CHE,
+    KC(46),  KS_c,		KS_C,		KS_Cyrillic_es,	KS_Cyrillic_ES,
+    KC(47),  KS_v,		KS_V,		KS_Cyrillic_em,	KS_Cyrillic_EM,
+    KC(48),  KS_b,		KS_B,		KS_Cyrillic_i,	KS_Cyrillic_I,
+    KC(49),  KS_n,		KS_N,		KS_Cyrillic_te,	KS_Cyrillic_TE,
+    KC(50),  KS_m,		KS_M,		KS_Cyrillic_ssighn,
+  KS_Cyrillic_SSIGHN,
+    KC(51),  KS_comma,		KS_less,	KS_Cyrillic_be,	KS_Cyrillic_BE,
+    KC(52),  KS_period,		KS_greater,	KS_Cyrillic_yu,	KS_Cyrillic_YU,
+    KC(53),  KS_slash,		KS_question,	KS_Cyrillic_yo,	KS_Cyrillic_YO,
+    KC(184), KS_Mode_switch,	KS_Multi_key,
+};
+
+static const keysym_t pckbd_keydesc_ua[] = {
+/*  pos      normal		shifted		altgr		shift-altgr */
+    KC(7),   KS_6,		KS_asciicircum,	KS_6,		KS_comma,
+    KC(8),   KS_7,		KS_ampersand,	KS_7,		KS_period,
+    KC(12),  KS_minus,		KS_underscore,	KS_Cyrillic_iukr,
+  KS_Cyrillic_IUKR,
+    KC(13),  KS_equal,		KS_plus,	KS_Cyrillic_yeukr,
+  KS_Cyrillic_YEUKR,
+    KC(16),  KS_q,		KS_Q,		KS_Cyrillic_ishort,
+  KS_Cyrillic_ISHORT,
+    KC(17),  KS_w,		KS_W,		KS_Cyrillic_tse,KS_Cyrillic_TSE,
+    KC(18),  KS_e,		KS_E,		KS_Cyrillic_u,	KS_Cyrillic_U,
+    KC(19),  KS_r,		KS_R,		KS_Cyrillic_ka,	KS_Cyrillic_KA,
+    KC(20),  KS_t,		KS_T,		KS_Cyrillic_ie,	KS_Cyrillic_IE,
+    KC(21),  KS_y,		KS_Y,		KS_Cyrillic_en,	KS_Cyrillic_EN,
+    KC(22),  KS_u,		KS_U,		KS_Cyrillic_ge,	KS_Cyrillic_GE,
+    KC(23),  KS_i,		KS_I,		KS_Cyrillic_sha,KS_Cyrillic_SHA,
+    KC(24),  KS_o,		KS_O,		KS_Cyrillic_scha,
+  KS_Cyrillic_SCHA,
+    KC(25),  KS_p,		KS_P,		KS_Cyrillic_ze,	KS_Cyrillic_ZE,
+    KC(26),  KS_bracketleft,	KS_braceleft,	KS_Cyrillic_ha,	KS_Cyrillic_HA,
+    KC(27),  KS_bracketright,	KS_braceright,	KS_Cyrillic_hsighn,
+  KS_Cyrillic_HSIGHN,
+    KC(30),  KS_a,		KS_A,		KS_Cyrillic_ef,	KS_Cyrillic_EF,
+    KC(31),  KS_s,		KS_S,		KS_Cyrillic_yeru,
+  KS_Cyrillic_YERU,
+    KC(32),  KS_d,		KS_D,		KS_Cyrillic_ve,	KS_Cyrillic_VE,
+    KC(33),  KS_f,		KS_F,		KS_Cyrillic_a,	KS_Cyrillic_A,
+    KC(34),  KS_g,		KS_G,		KS_Cyrillic_pe,	KS_Cyrillic_PE,
+    KC(35),  KS_h,		KS_H,		KS_Cyrillic_er,	KS_Cyrillic_ER,
+    KC(36),  KS_j,		KS_J,		KS_Cyrillic_o,	KS_Cyrillic_O,
+    KC(37),  KS_k,		KS_K,		KS_Cyrillic_el,	KS_Cyrillic_EL,
+    KC(38),  KS_l,		KS_L,		KS_Cyrillic_de,	KS_Cyrillic_DE,
+    KC(39),  KS_semicolon,	KS_colon,	KS_Cyrillic_zhe,KS_Cyrillic_ZHE,
+    KC(40),  KS_apostrophe,	KS_quotedbl,	KS_Cyrillic_e,	KS_Cyrillic_E,
+    KC(41),  KS_grave,		KS_asciitilde,	KS_Cyrillic_gheukr,
+  KS_Cyrillic_GHEUKR,
+    KC(43),  KS_backslash,	KS_bar,		KS_Cyrillic_yi,	KS_Cyrillic_YI,
+    KC(44),  KS_z,		KS_Z,		KS_Cyrillic_ya,	KS_Cyrillic_YA,
+    KC(45),  KS_x,		KS_X,		KS_Cyrillic_che,KS_Cyrillic_CHE,
+    KC(46),  KS_c,		KS_C,		KS_Cyrillic_es,	KS_Cyrillic_ES,
+    KC(47),  KS_v,		KS_V,		KS_Cyrillic_em,	KS_Cyrillic_EM,
+    KC(48),  KS_b,		KS_B,		KS_Cyrillic_i,	KS_Cyrillic_I,
+    KC(49),  KS_n,		KS_N,		KS_Cyrillic_te,	KS_Cyrillic_TE,
+    KC(50),  KS_m,		KS_M,		KS_Cyrillic_ssighn,
+  KS_Cyrillic_SSIGHN,
+    KC(51),  KS_comma,		KS_less,	KS_Cyrillic_be,	KS_Cyrillic_BE,
+    KC(52),  KS_period,		KS_greater,	KS_Cyrillic_yu,	KS_Cyrillic_YU,
+    KC(53),  KS_slash,		KS_question,	KS_Cyrillic_yo,	KS_Cyrillic_YO,
+    KC(184), KS_Mode_switch,	KS_Multi_key,
+};
+
+static const keysym_t pckbd_keydesc_sg[] = {
+/*  pos      normal		shifted		altgr		shift-altgr */
+    KC(2),   KS_1,		KS_plus,	KS_bar,
+    KC(3),   KS_2,		KS_quotedbl,	KS_at,
+    KC(4),   KS_3,		KS_asterisk,	KS_numbersign,
+    KC(5),   KS_4,		KS_ccedilla,
+    KC(7),   KS_6,		KS_ampersand,	KS_notsign,
+    KC(8),   KS_7,		KS_slash,	KS_brokenbar,
+    KC(9),   KS_8,		KS_parenleft,	KS_cent,
+    KC(10),  KS_9,		KS_parenright,
+    KC(11),  KS_0,		KS_equal,
+    KC(12),  KS_apostrophe,	KS_question,	KS_dead_acute,
+    KC(13),  KS_dead_circumflex,KS_dead_grave,	KS_dead_tilde,
+    KC(18),  KS_e,		KS_E,		KS_currency,
+    KC(21),  KS_z,
+    KC(26),  KS_udiaeresis,	KS_egrave,	KS_bracketleft,
+    KC(27),  KS_dead_diaeresis,	KS_exclam,	KS_bracketright,
+    KC(39),  KS_odiaeresis,	KS_eacute,
+    KC(40),  KS_adiaeresis,	KS_agrave,	KS_braceleft,
+    KC(41),  KS_section,	KS_degree,	KS_dead_abovering,
+    KC(43),  KS_dollar,		KS_sterling,	KS_braceright,
+    KC(44),  KS_y,
+    KC(51),  KS_comma,		KS_semicolon,
+    KC(52),  KS_period,		KS_colon,
+    KC(53),  KS_minus,		KS_underscore,
+    KC(86),  KS_less,		KS_greater,	KS_backslash,
+    KC(184), KS_Mode_switch,	KS_Multi_key,
+};
+
+static const keysym_t pckbd_keydesc_sg_nodead[] = {
+/*  pos      normal		shifted		altgr		shift-altgr */
+    KC(12),  KS_apostrophe,	KS_question,	KS_acute,
+    KC(13),  KS_asciicircum,	KS_grave,	KS_asciitilde,
+    KC(27),  KS_diaeresis,	KS_exclam,	KS_bracketright
+};
+
+static const keysym_t pckbd_keydesc_sf[] = {
+/*  pos      normal		shifted		altgr		shift-altgr */
+    KC(26),  KS_egrave,		KS_udiaeresis,	KS_bracketleft,
+    KC(39),  KS_eacute,		KS_odiaeresis,
+    KC(40),  KS_agrave,		KS_adiaeresis,	KS_braceleft
+};
+
+static const keysym_t pckbd_keydesc_lt[] = {
+/*  pos      normal		shifted		altgr		shift-altgr */
+    KC(2),   KS_exclam,		KS_1,		KS_at,
+    KC(3),   KS_minus,		KS_2		,KS_underscore,
+    KC(4),   KS_slash,		KS_3,		KS_numbersign,
+    KC(5),   KS_semicolon,	KS_4,		KS_dollar,
+    KC(6),   KS_colon,		KS_5,		KS_paragraph,
+    KC(7),   KS_comma,		KS_6,		KS_asciicircum,
+    KC(8),   KS_period,		KS_7,		KS_ampersand,
+    KC(9),   KS_equal,		KS_8,		KS_asterisk,
+    KC(10),  KS_bracketleft,	KS_9,		KS_parenleft,
+    KC(11),  KS_bracketright,	KS_0,		KS_parenright,
+    KC(12),  KS_question,	KS_plus,	KS_apostrophe,
+    KC(13),  KS_x,		KS_X,		KS_percent,
+    KC(16),  KS_L7_aogonek,	KS_L7_Aogonek,
+    KC(17),  KS_L7_zcaron,	KS_L7_Zcaron,
+    KC(18),  KS_e,		KS_E,		KS_currency,
+    KC(26),  KS_L7_iogonek,	KS_L7_Iogonek,	KS_braceleft,
+    KC(27),  KS_w,		KS_W,		KS_braceright,
+    KC(33),  KS_L7_scaron,	KS_L7_Scaron,
+    KC(39),  KS_L7_uogonek,	KS_L7_Uogonek,
+    KC(40),  KS_L7_edot,	KS_L7_Edot,	KS_quotedbl,
+    KC(41),  KS_grave,		KS_asciitilde,
+    KC(43),  KS_q,		KS_Q,		KS_bar,
+    KC(45),  KS_L7_umacron,	KS_L7_Umacron,
+    KC(51),  KS_L7_ccaron,	KS_L7_Ccaron,	KS_L7_dbllow9quot,
+    KC(52),  KS_f,		KS_F,		KS_L7_leftdblquot,
+    KC(53),  KS_L7_eogonek,	KS_L7_Eogonek,	KS_backslash,
+    KC(57),  KS_space,		KS_space,	KS_nobreakspace,
+    KC(184), KS_Mode_switch,	KS_Multi_key,
+};
+
+static const keysym_t pckbd_keydesc_la[] = {
+/*  pos      normal		shifted		altgr		shift-altgr */
+    KC(2),   KS_1,		KS_exclam,
+    KC(3),   KS_2,		KS_quotedbl,
+    KC(4),   KS_3,		KS_numbersign,
+    KC(7),   KS_6,		KS_ampersand,
+    KC(8),   KS_7,		KS_slash,
+    KC(9),   KS_8,		KS_parenleft,
+    KC(10),  KS_9,		KS_parenright,
+    KC(11),  KS_0,		KS_equal,
+    KC(12),  KS_apostrophe,	KS_question,	KS_backslash,
+    KC(13),  KS_questiondown,	KS_exclamdown,
+    KC(16),  KS_q,		KS_Q,		KS_at,
+    KC(26),  KS_dead_acute,	KS_dead_diaeresis,
+    KC(27),  KS_plus,		KS_asterisk,	KS_asciitilde,
+    KC(39),  KS_ntilde,
+    KC(40),  KS_braceleft,	KS_bracketleft,	KS_dead_circumflex,
+    KC(41),  KS_bar,		KS_degree,	KS_notsign,
+    KC(43),  KS_braceright,	KS_bracketright,KS_dead_grave,
+    KC(51),  KS_comma,		KS_semicolon,
+    KC(52),  KS_period,		KS_colon,
+    KC(53),  KS_minus,		KS_underscore,
+    KC(86),  KS_less,		KS_greater,
+    KC(184), KS_Mode_switch,	KS_Multi_key,
+};
+
+static const keysym_t pckbd_keydesc_br[] = {
+/*  pos      normal		shifted		altgr		shift-altgr */
+    KC(2),   KS_1,		KS_exclam,	KS_onesuperior,
+    KC(3),   KS_2,		KS_at,		KS_twosuperior,
+    KC(4),   KS_3,		KS_numbersign,	KS_threesuperior,
+    KC(5),   KS_4,		KS_dollar,	KS_sterling,
+    KC(6),   KS_5,		KS_percent,	KS_cent,
+    KC(7),   KS_6,		KS_dead_diaeresis,KS_notsign,
+    KC(13),  KS_equal,		KS_plus,	KS_section,
+    KC(26),  KS_dead_acute,	KS_dead_grave,
+    KC(27),  KS_bracketleft,	KS_braceleft,	KS_ordfeminine,
+    KC(39),  KS_ccedilla,	KS_Ccedilla,
+    KC(40),  KS_dead_tilde,	KS_dead_circumflex,
+    KC(41),  KS_apostrophe,	KS_quotedbl,
+    KC(43),  KS_bracketright,	KS_braceright,	KS_masculine,
+    KC(53),  KS_semicolon,	KS_colon,
+    KC(83),  KS_KP_Delete,	KS_KP_Decimal,
+    KC(86),  KS_backslash,	KS_bar,
+    KC(115), KS_slash,		KS_question,	KS_degree,
+};
+
+static const keysym_t pckbd_keydesc_tr[] = {
+/*  pos      normal		shifted		altgr		shift-altgr */
+    KC(3),   KS_2,		KS_apostrophe,	KS_sterling,
+    KC(4),   KS_3,		KS_asciicircum,	KS_numbersign,
+    KC(5),   KS_4,KS_plus,	KS_dollar,
+    KC(6),   KS_5,		KS_percent,	KS_onehalf,
+    KC(7),   KS_6,		KS_ampersand,
+    KC(8),   KS_7,		KS_slash,	KS_braceleft,
+    KC(9),   KS_8,		KS_parenleft,	KS_bracketleft,
+    KC(10),  KS_9,		KS_parenright,	KS_bracketright,
+    KC(11),  KS_0,		KS_equal,	KS_braceright,
+    KC(12),  KS_asterisk,	KS_question,	KS_backslash,
+    KC(13),  KS_minus,		KS_underscore,
+    KC(16),  KS_q,		KS_Q,KS_at,
+    KC(23),  KS_L5_idotless,	KS_I,
+    KC(26),  KS_L5_gbreve,	KS_L5_Gbreve,	KS_dead_diaeresis,
+    KC(27),  KS_udiaeresis,	KS_Udiaeresis,	KS_asciitilde,
+    KC(39),  KS_L5_scedilla,	KS_L5_Scedilla,	KS_dead_acute,
+    KC(40),  KS_i,		KS_L5_Idotabove,
+    KC(41),  KS_quotedbl,	KS_eacute,
+    KC(43),  KS_comma,		KS_semicolon,	KS_dead_grave,
+    KC(51),  KS_odiaeresis,	KS_Odiaeresis,
+    KC(52),  KS_ccedilla,	KS_Ccedilla,
+    KC(53),  KS_period,		KS_colon,
+    KC(86),  KS_less,		KS_greater,	KS_bar,
+    KC(184), KS_Mode_switch,	KS_Multi_key,
+};
+
+static const keysym_t pckbd_keydesc_tr_nodead[] = {
+/*  pos      normal		shifted		altgr		shift-altgr */
+    KC(26),  KS_L5_gbreve,	KS_L5_Gbreve,
+    KC(39),  KS_L5_scedilla,	KS_L5_Scedilla,	KS_apostrophe,
+    KC(43),  KS_comma,		KS_semicolon,	KS_grave,
+};
+
+static const keysym_t pckbd_keydesc_pl[] = {
+/*  pos      normal		shifted		altgr		shift-altgr */
+    KC(18),  KS_e,		KS_E,		KS_L2_eogonek,	KS_L2_Eogonek,
+    KC(24),  KS_o,		KS_O,		KS_oacute,	KS_Oacute,
+    KC(30),  KS_a,		KS_A,		KS_L2_aogonek,	KS_L2_Aogonek,
+    KC(31),  KS_s,		KS_S,		KS_L2_sacute,	KS_L2_Sacute,
+    KC(38),  KS_l,		KS_L,		KS_L2_lstroke,	KS_L2_Lstroke,
+    KC(44),  KS_z,		KS_Z,		KS_L2_zdotabove,KS_L2_Zdotabove,
+    KC(45),  KS_x,		KS_X,		KS_L2_zacute,	KS_L2_Zacute,
+    KC(46),  KS_c,		KS_C,		KS_L2_cacute,	KS_L2_Cacute,
+    KC(49),  KS_n,		KS_N,		KS_L2_nacute,	KS_L2_Nacute,
+    KC(184), KS_Mode_switch,	KS_Multi_key,
+};
+
+static const keysym_t pckbd_keydesc_hu[] = {
+/*  pos      normal		shifted		altgr		shift-altgr */
+    KC(2),   KS_1,		KS_apostrophe,	KS_asciitilde,
+    KC(3),   KS_2,		KS_quotedbl,
+    KC(4),   KS_3,		KS_plus,	KS_asciicircum,
+    KC(5),   KS_4,		KS_exclam,
+    KC(6),   KS_5,		KS_percent,
+    KC(7),   KS_6,		KS_slash,
+    KC(8),   KS_7,		KS_equal,	KS_grave,
+    KC(9),   KS_8,		KS_parenleft,
+    KC(10),  KS_9,		KS_parenright,	KS_acute,
+    KC(11),  KS_odiaeresis,	KS_Odiaeresis,
+    KC(12),  KS_udiaeresis,	KS_Udiaeresis,
+    KC(13),  KS_oacute,		KS_Oacute,
+    KC(16),  KS_q,		KS_Q,		KS_backslash,
+    KC(17),  KS_w,		KS_W,		KS_bar,
+    KC(21),  KS_z,		KS_Z,
+    KC(23),  KS_i,		KS_I,		KS_iacute,
+    KC(26),  KS_odoubleacute,	KS_Odoubleacute,KS_division,
+    KC(27),  KS_uacute,		KS_Uacute,	KS_multiply,
+    KC(33),  KS_f,		KS_F,		KS_bracketleft,
+    KC(34),  KS_g,		KS_G,		KS_bracketright,
+    KC(36),  KS_j,		KS_J,		KS_iacute,
+    KC(39),  KS_eacute,		KS_Eacute,	KS_dollar,
+    KC(40),  KS_aacute,		KS_Aacute,	KS_ssharp,
+    KC(41),  KS_0,		KS_section,
+    KC(43),  KS_udoubleacute,	KS_Udoubleacute,KS_currency,
+    KC(44),  KS_y,		KS_Y,		KS_greater,
+    KC(45),  KS_x,		KS_X,		KS_numbersign,
+    KC(46),  KS_c,		KS_C,		KS_ampersand,
+    KC(47),  KS_v,		KS_V,		KS_at,
+    KC(48),  KS_b,		KS_B,		KS_braceleft,
+    KC(49),  KS_n,		KS_N,		KS_braceright,
+    KC(51),  KS_comma,		KS_question,	KS_semicolon,
+    KC(52),  KS_period,		KS_colon,
+    KC(53),  KS_minus,		KS_underscore,	KS_asterisk,
+    KC(86),  KS_iacute,		KS_Iacute,	KS_less,
+    KC(184), KS_Mode_switch,	KS_Multi_key,
+};
+
+static const keysym_t pckbd_keydesc_si[] = {
+/*  pos      normal		shifted		altgr		shift-altgr */
+    KC(2),   KS_1,		KS_exclam,	KS_asciitilde,
+    KC(3),   KS_2,		KS_quotedbl,	KS_L2_caron,
+    KC(4),   KS_3,		KS_numbersign,	KS_asciicircum,
+    KC(5),   KS_4,		KS_dollar,	KS_L2_breve,
+    KC(6),   KS_5,		KS_percent,	KS_degree,
+    KC(7),   KS_6,		KS_ampersand,	KS_L2_ogonek,
+    KC(8),   KS_7,		KS_slash,	KS_grave,
+    KC(9),   KS_8,		KS_parenleft,	KS_L2_dotabove,
+    KC(10),  KS_9,		KS_parenright,	KS_acute,
+    KC(11),  KS_0,		KS_equal,	KS_L2_dblacute,
+    KC(12),  KS_apostrophe,	KS_question,	KS_diaeresis,
+    KC(13),  KS_plus,		KS_asterisk,	KS_cedilla,
+    KC(16),  KS_q,		KS_Q,		KS_backslash,
+    KC(17),  KS_w,		KS_W,		KS_bar,
+    KC(21),  KS_z,		KS_Z,
+    KC(26),  KS_L2_scaron,	KS_L2_Scaron,	KS_division,
+    KC(27),  KS_L2_dstroke,	KS_L2_Dstroke,	KS_multiply,
+    KC(33),  KS_f,		KS_F,		KS_bracketleft,
+    KC(34),  KS_g,		KS_G,		KS_bracketright,
+    KC(37),  KS_k,		KS_K,		KS_L2_lstroke,
+    KC(38),  KS_l,		KS_L,		KS_L2_Lstroke,
+    KC(39),  KS_L2_ccaron,	KS_L2_Ccaron,        
+    KC(40),  KS_L2_cacute,	KS_L2_Cacute,	KS_ssharp,
+    KC(41),  KS_cedilla,	KS_diaeresis,
+    KC(43),  KS_L2_zcaron,	KS_L2_Zcaron,	KS_currency,
+    KC(44),  KS_y,		KS_Y,
+    KC(47),  KS_v,		KS_V,		KS_at,
+    KC(48),  KS_b,		KS_B,		KS_braceleft,
+    KC(49),  KS_n,		KS_N,		KS_braceright,
+    KC(50),  KS_m,		KS_M,		KS_section,
+    KC(51),  KS_comma,		KS_semicolon,
+    KC(52),  KS_period,		KS_colon,
+    KC(53),  KS_minus,		KS_underscore,
+    KC(86),  KS_less,		KS_greater,
+    KC(184), KS_Mode_switch,	KS_Multi_key,
+};
+
+static const keysym_t pckbd_keydesc_cf[] = {
+/*  pos	     normal		shifted		altgr		shift-altgr */
+    KC(2),   KS_1,		KS_exclam,	KS_plusminus,
+    KC(3),   KS_2,		KS_quotedbl,	KS_at,
+    KC(4),   KS_3,		KS_slash,	KS_sterling,
+    KC(5),   KS_4,		KS_dollar,	KS_cent,
+    KC(6),   KS_5,		KS_percent,	KS_diaeresis,
+    KC(7),   KS_6,		KS_question,	KS_macron,
+    KC(8),   KS_7,		KS_ampersand,	KS_brokenbar,
+    KC(9),   KS_8,		KS_asterisk,	KS_twosuperior,
+    KC(10),  KS_9,		KS_parenleft,	KS_threesuperior,
+    KC(11),  KS_0,		KS_parenright,	KS_onequarter,
+    KC(12),  KS_minus,		KS_underscore,	KS_onehalf,
+    KC(13),  KS_equal,		KS_plus,	KS_threequarters,
+    KC(24),  KS_o,		KS_O,		KS_section,
+    KC(25),  KS_p,		KS_P,		KS_paragraph,
+    KC(26),  KS_dead_circumflex,KS_dead_circumflex,KS_bracketleft,
+    KC(27),  KS_dead_cedilla,	KS_dead_diaeresis,KS_bracketright,
+    KC(39),  KS_semicolon,	KS_colon,	KS_asciitilde,
+    KC(40),  KS_dead_grave,	KS_dead_grave,	KS_braceleft,
+    KC(41),  KS_numbersign,	KS_bar,		KS_backslash,
+    KC(43),  KS_less,		KS_greater,	KS_braceright,
+    KC(50),  KS_m,		KS_M,		KS_mu,
+    KC(51),  KS_comma,		KS_apostrophe,	KS_hyphen,
+    KC(52),  KS_period,		KS_period,
+    KC(53),  KS_eacute,		KS_Eacute,	KS_dead_acute,
+    KC(86),  KS_guillemotleft,	KS_guillemotright,KS_degree,
+    KC(184), KS_Mode_switch,	KS_Multi_key,
+};
+
+static const keysym_t pckbd_keydesc_cf_nodead[] = {
+/*  pos      normal		shifted		altgr		shift-altgr */
+    KC(26),  KS_asciicircum,	KS_asciicircum,	KS_bracketleft,
+    KC(27),  KS_cedilla,	KS_diaeresis,	KS_bracketright,
+    KC(40),  KS_grave,		KS_grave,	KS_braceleft,
+    KC(53),  KS_eacute,		KS_Eacute,	KS_acute,
+};
+
 static const keysym_t pckbd_keydesc_us_declk[] = {
 /*  pos      normal		shifted		altgr		shift-altgr */
     KC(1),	KS_grave,	KS_asciitilde, /* replace escape */
@@ -510,6 +929,8 @@
     KC(87),  KS_Cmd_Screen9,	KS_f10,
     KC(88), 			KS_f11,
 };
+
+
 #endif /* WSKBD_USONLY */

 #define KBD_MAP(name, base, map) \
@@ -543,8 +964,26 @@
 		pckbd_keydesc_swapctrlcaps),
 	KBD_MAP(KB_US | KB_IOPENER | KB_SWAPCTRLCAPS,	KB_US | KB_IOPENER,
 		pckbd_keydesc_swapctrlcaps),
-	KBD_MAP(KB_ES ,			KB_US,	pckbd_keydesc_es),
+	KBD_MAP(KB_ES,			KB_US,	pckbd_keydesc_es),
 	KBD_MAP(KB_PT,			KB_US,	pckbd_keydesc_pt),
+	KBD_MAP(KB_BE,			KB_US,	pckbd_keydesc_be),
+	KBD_MAP(KB_RU,			KB_US,	pckbd_keydesc_ru),
+	KBD_MAP(KB_UA,			KB_US,	pckbd_keydesc_ua),
+	KBD_MAP(KB_SG,			KB_US,	pckbd_keydesc_sg),
+        KBD_MAP(KB_SG | KB_NODEAD,	KB_SG,	pckbd_keydesc_sg_nodead),
+        KBD_MAP(KB_SF,			KB_SG,	pckbd_keydesc_sf),
+        KBD_MAP(KB_SF | KB_NODEAD,	KB_SF,	pckbd_keydesc_sg_nodead),
+	KBD_MAP(KB_LT,			KB_US,	pckbd_keydesc_lt),
+	KBD_MAP(KB_LT,			KB_US,	pckbd_keydesc_lt),
+        KBD_MAP(KB_LA,			KB_US,	pckbd_keydesc_la),
+        KBD_MAP(KB_BR,			KB_US,	pckbd_keydesc_br),
+        KBD_MAP(KB_TR,			KB_US,	pckbd_keydesc_tr),
+        KBD_MAP(KB_TR | KB_NODEAD,	KB_TR,	pckbd_keydesc_tr_nodead),
+        KBD_MAP(KB_PL,			KB_US,	pckbd_keydesc_pl),
+        KBD_MAP(KB_HU,			KB_US,	pckbd_keydesc_hu),
+        KBD_MAP(KB_SI,			KB_US,	pckbd_keydesc_si),
+        KBD_MAP(KB_CF,			KB_US,	pckbd_keydesc_cf),
+        KBD_MAP(KB_CF | KB_NODEAD,	KB_CF,	pckbd_keydesc_cf_nodead),
 #endif /* WSKBD_USONLY */

 	/* placeholders */

		-- Rui Paulo