Module Name: src Committed By: martin Date: Mon Jul 13 14:22:47 UTC 2020
Modified Files: src/etc [netbsd-9]: wscons.conf src/sbin/wsconsctl [netbsd-9]: wsconsctl.8 src/share/man/man4 [netbsd-9]: pckbd.4 wskbd.4 src/sys/dev/hid [netbsd-9]: hidkbdmap.c src/sys/dev/pckbport [netbsd-9]: wskbdmap_mfii.c src/sys/dev/wscons [netbsd-9]: wsksymdef.h Log Message: Pull up following revision(s) (requested by nia in ticket #1002): sys/dev/wscons/wsksymdef.h: revision 1.68 sys/dev/wscons/wsksymdef.h: revision 1.69 sys/dev/pckbport/wskbdmap_mfii.c: revision 1.28 sys/dev/pckbport/wskbdmap_mfii.c: revision 1.29 sys/dev/hid/hidkbdmap.c: revision 1.10 share/man/man4/pckbd.4: revision 1.23 share/man/man4/wskbd.4: revision 1.18 share/man/man4/wskbd.4: revision 1.19 share/man/man4/pckbd.4: revision 1.25 sys/dev/wscons/wsksymdef.h: revision 1.70 sys/dev/wscons/wsksymdef.h: revision 1.71 sys/dev/pckbport/wskbdmap_mfii.c: revision 1.30 sys/dev/wscons/wsksymdef.h: revision 1.72 sys/dev/pckbport/wskbdmap_mfii.c: revision 1.31 sys/dev/wscons/wsksymdef.h: revision 1.73 sys/dev/pckbport/wskbdmap_mfii.c: revision 1.32 sys/dev/pckbport/wskbdmap_mfii.c: revision 1.33 sys/dev/hid/hidkbdmap.c: revision 1.4 sbin/wsconsctl/wsconsctl.8: revision 1.30 sys/dev/hid/hidkbdmap.c: revision 1.5 etc/wscons.conf: revision 1.20 sys/dev/hid/hidkbdmap.c: revision 1.6 etc/wscons.conf: revision 1.21 sys/dev/hid/hidkbdmap.c: revision 1.7 sys/dev/hid/hidkbdmap.c: revision 1.8 sys/dev/hid/hidkbdmap.c: revision 1.9 Add support for the Brazilian keyboard layout to pckbd and ukbd. This is significantly different from the European Portugese layout, and was pieced together from Wikipedia, X11 layout files, and to some extent with trial and error. Thanks to lun-4 for helping test this. PR kern/44570 Update lists of keyboard layouts to add Turkish and Brazilian Bring br.nodead closer to X11 Add Estonian layout as a variation of Swedish for ukbd and pckbd Add KB_TR for uhid keyboards (it was PS/2 only, this seems wrong) Add Icelandic keyboard layout to ukbd/pckbd. Add keyboard layout for Latin American Spanish to ukbd/pckbd Canadian French keyboard layout for ukbd/pckbd Clarify that KB_TR is the "Q" layout - there's two standards for Turkish. Move description of keyboard layouts to wskbd.4, add newer layouts Previously, the best reference was pckbd.4. This does not make much sense to read if you are on, say, an evbarm device with only USB. wsconsctl.8 contained a vaguer description of supported language names, which isn't very useful because you can't pass full language names to the command. Point readers to wskbd.4 instead. Note in the wskbd.4 page that while all layouts are generally supported by pckbd(4) and ukbd(4), older keyboard interfaces might only support a subset. wskbd.4: Add KB_LA Point readers at wskbd.4 To generate a diff of this commit: cvs rdiff -u -r1.19 -r1.19.46.1 src/etc/wscons.conf cvs rdiff -u -r1.28 -r1.28.42.1 src/sbin/wsconsctl/wsconsctl.8 cvs rdiff -u -r1.21.44.1 -r1.21.44.2 src/share/man/man4/pckbd.4 cvs rdiff -u -r1.16 -r1.16.34.1 src/share/man/man4/wskbd.4 cvs rdiff -u -r1.1.10.1 -r1.1.10.2 src/sys/dev/hid/hidkbdmap.c cvs rdiff -u -r1.26.10.1 -r1.26.10.2 src/sys/dev/pckbport/wskbdmap_mfii.c cvs rdiff -u -r1.67 -r1.67.10.1 src/sys/dev/wscons/wsksymdef.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/etc/wscons.conf diff -u src/etc/wscons.conf:1.19 src/etc/wscons.conf:1.19.46.1 --- src/etc/wscons.conf:1.19 Fri Jul 22 19:06:23 2011 +++ src/etc/wscons.conf Mon Jul 13 14:22:47 2020 @@ -1,4 +1,4 @@ -# $NetBSD: wscons.conf,v 1.19 2011/07/22 19:06:23 christos Exp $ +# $NetBSD: wscons.conf,v 1.19.46.1 2020/07/13 14:22:47 martin Exp $ # # workstation console configuration @@ -33,10 +33,8 @@ screen 4 - - #keyboard auto # Select a kernel builtin keyboard map by uncommenting the following line and -# altering the country code to your requirements -# (choose from user, us, uk, be, cz, dk, nl, fi, fr, de, gr, hu, it, jp, no, -# pl, pt, ru, es, sv, sf, sg, ua) -# See wsconsctl(8), pckbd(4), ukbd(4) etc. for more details. +# altering the country code to your requirements. +# See wskbd(4) for a full list of supported options. #encoding sv #encoding us.swapctrlcaps Index: src/sbin/wsconsctl/wsconsctl.8 diff -u src/sbin/wsconsctl/wsconsctl.8:1.28 src/sbin/wsconsctl/wsconsctl.8:1.28.42.1 --- src/sbin/wsconsctl/wsconsctl.8:1.28 Tue Feb 14 11:05:32 2012 +++ src/sbin/wsconsctl/wsconsctl.8 Mon Jul 13 14:22:47 2020 @@ -1,4 +1,4 @@ -.\" $NetBSD: wsconsctl.8,v 1.28 2012/02/14 11:05:32 wiz Exp $ +.\" $NetBSD: wsconsctl.8,v 1.28.42.1 2020/07/13 14:22:47 martin Exp $ .\" .\" Copyright (c) 1998, 2004 The NetBSD Foundation, Inc. .\" All rights reserved. @@ -27,7 +27,7 @@ .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE .\" POSSIBILITY OF SUCH DAMAGE. .\"/ -.Dd June 9, 2009 ++.Dd July 13, 2020 .Dt WSCONSCTL 8 .Os .Sh NAME @@ -114,12 +114,6 @@ file. There are also definitions relating to video control and cursor control, which are not applicable to all display types, and to text emulation and graphics (mapped) modes. -.Pp -In addition to British, US, and US-Dvorak keyboard encodings, support -currently exists for the following languages: Belgian, Danish, Finnish, -French, German, Greek, Hungarian, Italian, Japanese, Norwegian, Polish, -Portuguese, Russian, Spanish, Swedish, Swiss, and Ukrainian. -Additionally, a user-defined encoding is supported. .Sh FILES .Bl -tag -width /dev/wsmouse .It Pa /dev/wskbd @@ -137,6 +131,8 @@ and its functionality. .Dl wsconsctl -w encoding=uk .Pp Set a UK keyboard encoding. +For a full list of supported keyboard encodings, see +.Xr wskbd 4 . .Pp .Dl wsconsctl -w map+="keysym Caps_Lock = Control_L" .Pp @@ -200,8 +196,8 @@ and .Dv Cmd_ScrollSlowUp defined in your keyboard map. .Sh SEE ALSO -.Xr pckbd 4 , .Xr wscons 4 , +.Xr wskbd 4 , .Xr wscons.conf 5 , .Xr wsconscfg 8 , .Xr wsfontload 8 Index: src/share/man/man4/pckbd.4 diff -u src/share/man/man4/pckbd.4:1.21.44.1 src/share/man/man4/pckbd.4:1.21.44.2 --- src/share/man/man4/pckbd.4:1.21.44.1 Tue Jan 21 15:39:02 2020 +++ src/share/man/man4/pckbd.4 Mon Jul 13 14:22:47 2020 @@ -1,4 +1,4 @@ -.\" $NetBSD: pckbd.4,v 1.21.44.1 2020/01/21 15:39:02 martin Exp $ +.\" $NetBSD: pckbd.4,v 1.21.44.2 2020/07/13 14:22:47 martin Exp $ .\" .\" Copyright (c) 1999 .\" Matthias Drochner. All rights reserved. @@ -24,7 +24,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd January 11, 2020 +.Dd July 13, 2020 .Dt PCKBD 4 .Os .Sh NAME @@ -56,78 +56,6 @@ at compile time or with the utility at runtime. Other mappings can be used if the whole keymap is replaced by means of .Xr wsconsctl 8 . -The builtin mappings are at this time: -.Bl -column " KB_US|KB_COLEMAK" "wsconsctl" "language" -.It Sy "option" Ta Sy "wsconsctl" Ta Sy "language" -.It Li KB_US Ta us Ta English/US keyboard mapping (default) -.It Li KB_UK Ta uk Ta English/UK keyboard mapping -.It Li KB_BE Ta be Ta Belgian -.It Li KB_CZ Ta cz Ta Czech (QWERTY) -.It Li KB_DK Ta dk Ta Danish with -.Dq dead accents -.It Li KB_NL Ta nl Ta Dutch -.It Li KB_FI Ta fi Ta Finnish -.It Li KB_FR Ta fr Ta French -.It Li KB_DE Ta de Ta German with -.Dq dead accents -.It Li KB_GR Ta gr Ta Greek -.It Li KB_HU Ta hu Ta Hungarian -.It Li KB_IT Ta it Ta Italian -.It Li KB_JP Ta jp Ta Japanese -.It Li KB_NO Ta no Ta Norwegian with -.Dq dead accents -.It Li KB_PL Ta pl Ta Polish -.It Li KB_PT Ta pt Ta Portuguese -.It Li KB_RU Ta ru Ta Russian -.It Li KB_ES Ta es Ta Spanish -.It Li KB_SV Ta sv Ta Swedish with -.Dq dead accents -.It Li KB_SF Ta sf Ta Swiss French -.It Li KB_SG Ta sg Ta Swiss German -.It Li KB_UA Ta ua Ta Ukrainian -.It Li "KB_US|KB_DECLK" Ta \&us.declk Ta English/US mapping for Tn DEC -.It Ta Ta LK400-style keyboards with PC keyboard -.It Ta Ta interface (e.g., LK461) -.It Li "KB_US|KB_DVORAK" Ta us.dvorak Ta English/US keyboard with -.It Ta Ta Do Dvorak Dc layout -.It Li "KB_US|KB_COLEMAK" Ta us.colemak Ta English/US keyboard with -.It Ta Ta Do Colemak Dc layout -.El -.Pp -The -.Li KB_DE , -.Li KB_DK , -.Li KB_NO -and -.Li KB_SV -mappings can be used in the -.Li KB_NODEAD ( -.Dq .nodead ) -variant. -This switches off the -.Dq dead accents . -.Pp -The -.Li KB_US , -.Li KB_UK , -.Li KB_FR , -.Li KB_JP -and -.Li KB_US|KB_DVORAK -mappings can be modified -to swap the left CTRL and the CAPS LOCK keys by the -.Li KB_SWAPCTRLCAPS -variant bit or the -.Dq .swapctrlcaps -suffix. -.Pp -The -.Li KB_METAESC ( -.Dq .metaesc ) -option can be applied to any layout. -If set, keys pressed together -with the ALT modifier are prefixed by an ESC character. -(Standard behaviour is to add 128 to the ASCII value.) .Pp Because PC keyboard hardware doesn't contain a beeper, requests for .Dq keyboard beeps @@ -153,6 +81,3 @@ to the kernel configuration file. .Xr pcppi 4 , .Xr wskbd 4 , .Xr wsconsctl 8 -.Sh BUGS -The list of builtin mappings doesn't follow any logic. -It grew as people submitted what they needed. Index: src/share/man/man4/wskbd.4 diff -u src/share/man/man4/wskbd.4:1.16 src/share/man/man4/wskbd.4:1.16.34.1 --- src/share/man/man4/wskbd.4:1.16 Sun May 27 12:05:40 2012 +++ src/share/man/man4/wskbd.4 Mon Jul 13 14:22:47 2020 @@ -1,4 +1,4 @@ -.\" $NetBSD: wskbd.4,v 1.16 2012/05/27 12:05:40 wiz Exp $ +.\" $NetBSD: wskbd.4,v 1.16.34.1 2020/07/13 14:22:47 martin Exp $ .\" .\" Copyright (c) 1999 .\" Matthias Drochner. All rights reserved. @@ -24,7 +24,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd May 27, 2012 +.Dd July 13, 2020 .Dt WSKBD 4 .Os .Sh NAME @@ -114,6 +114,88 @@ match if the device is in use as system (The console device selection in early system startup is not influenced.) This way, the console device can be connected to a known wskbd device instance. +.Ss Keyboard encodings +The following encodings are supported. +Device drivers for legacy keyboard interfaces may only support a subset +of these. +However, generally, all encodings are supported by +.Xr pckbd 4 and +.Xr ukbd 4 . +.Bl -column " us.colemak" " KB_US|KB_COLEMAK" "language" +.It Sy "wsconsctl" Ta Sy "define" Ta Sy "language" +.It Li user Ta KB_USER Ta User-defined +.It Li us Ta KB_US Ta English/US keyboard mapping (default) +.It Li uk Ta KB_UK Ta English/UK keyboard mapping +.It Li be Ta KB_BE Ta Belgian +.It Li br Ta KB_BR Ta Brazilian with +.Dq dead accents +.It Li cf Ta KB_CF Ta Canadian French +.It Li cz Ta KB_CZ Ta Czech (QWERTY) +.It Li dk Ta KB_DK Ta Danish with +.Dq dead accents +.It Li nl Ta KB_NL Ta Dutch +.It Li ee Ta KB_DK Ta Estonian with +.Dq dead accents +.It Li fi Ta KB_FI Ta Finnish +.It Li fr Ta KB_FR Ta French +.It Li de Ta KB_DE Ta German with +.Dq dead accents +.It Li gr Ta KB_GR Ta Greek +.It Li hu Ta KB_HU Ta Hungarian +.It Li is Ta KB_IS Ta Icelandic with +.Dq dead accents +.It Li it Ta KB_IT Ta Italian +.It Li jp Ta KB_JP Ta Japanese +.It Li la Ta KB_LA Ta Latin American Spanish +.It Li no Ta KB_NO Ta Norwegian with +.Dq dead accents +.It Li pl Ta KB_PL Ta Polish +.It Li pt Ta KB_PT Ta Portuguese +.It Li ru Ta KB_RU Ta Russian +.It Li es Ta KB_ES Ta Spanish +.It Li sv Ta KB_SV Ta Swedish with +.Dq dead accents +.It Li sf Ta KB_SF Ta Swiss French +.It Li sg Ta KB_SG Ta Swiss German +.It Li tr Ta KB_TR Ta Turkish (QWERTY) with +.Dq dead accents +.It Li ua Ta KB_UA Ta Ukrainian +.It Li \&us.declk Ta "KB_US|KB_DECLK" Ta English/US mapping for Tn DEC +.It Ta Ta LK400-style keyboards with PC keyboard +.It Ta Ta interface (e.g., LK461) +.It Li us.dvorak Ta "KB_US|KB_DVORAK" Ta English/US keyboard with +.It Ta Ta Do Dvorak Dc layout +.It Li us.colemak Ta "KB_US|KB_COLEMAK" Ta English/US keyboard with +.It Ta Ta Do Colemak Dc layout +.El +.Pp +.Li KB_NODEAD ( +.Dq .nodead ) +can be applied to layouts with +.Dq dead accents +to switch them off. +.Pp +The +.Li KB_US , +.Li KB_UK , +.Li KB_FR , +.Li KB_JP +and +.Li KB_US|KB_DVORAK +mappings can be modified +to swap the left CTRL and the CAPS LOCK keys by the +.Li KB_SWAPCTRLCAPS +variant bit or the +.Dq .swapctrlcaps +suffix. +.Pp +The +.Li KB_METAESC ( +.Dq .metaesc ) +option can be applied to any layout. +If set, keys pressed together +with the ALT modifier are prefixed by an ESC character. +(Standard behaviour is to add 128 to the ASCII value.) .Ss Ioctls The following .Xr ioctl 2 @@ -169,3 +251,6 @@ if (ioctl(fd, WSKBDIO_SETVERSION, &ver) .Xr wsmux 4 , .Xr wsconsctl 8 , .Xr wskbd 9 +.Sh BUGS +The list of builtin mappings doesn't follow any logic. +It grew as people submitted what they needed. Index: src/sys/dev/hid/hidkbdmap.c diff -u src/sys/dev/hid/hidkbdmap.c:1.1.10.1 src/sys/dev/hid/hidkbdmap.c:1.1.10.2 --- src/sys/dev/hid/hidkbdmap.c:1.1.10.1 Tue Jan 21 15:39:02 2020 +++ src/sys/dev/hid/hidkbdmap.c Mon Jul 13 14:22:47 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: hidkbdmap.c,v 1.1.10.1 2020/01/21 15:39:02 martin Exp $ */ +/* $NetBSD: hidkbdmap.c,v 1.1.10.2 2020/07/13 14:22:47 martin Exp $ */ /* * Copyright (c) 1999,2001 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: hidkbdmap.c,v 1.1.10.1 2020/01/21 15:39:02 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: hidkbdmap.c,v 1.1.10.2 2020/07/13 14:22:47 martin Exp $"); #include <sys/types.h> #include <dev/wscons/wsksymdef.h> @@ -367,6 +367,22 @@ Static const keysym_t hidkbd_keydesc_sv_ KC(48), KS_diaeresis, KS_asciicircum, KS_asciitilde, }; +Static const keysym_t hidkbd_keydesc_ee[] = { +/* pos normal shifted altgr shift-altgr */ + KC(22), KS_s, KS_S, KS_scaron, KS_Scaron, + KC(29), KS_z, KS_Z, KS_zcaron, KS_Zcaron, + KC(47), KS_udiaeresis, KS_Udiaeresis, KS_dead_diaeresis, KS_dead_abovering, + KC(48), KS_otilde, KS_Otilde, KS_section, + KC(50), KS_apostrophe, KS_asterisk, KS_onehalf, KS_dead_breve, + KC(52), KS_adiaeresis, KS_Adiaeresis, KS_asciicircum, KS_dead_caron, + KC(53), KS_dead_caron, KS_dead_tilde, KS_notsign, KS_notsign, +}; + +Static const keysym_t hidkbd_keydesc_ee_nodead[] = { +/* pos normal shifted altgr shift-altgr */ + KC(53), KS_asciicircum, KS_asciitilde, KS_notsign, KS_notsign, +}; + Static const keysym_t hidkbd_keydesc_no[] = { /* pos normal shifted altgr shift-altgr */ KC(46), KS_backslash, KS_dead_grave, KS_dead_acute, @@ -619,6 +635,173 @@ static const keysym_t hidkbd_keydesc_hu[ KC(230), KS_Mode_switch, KS_Multi_key }; +static const keysym_t hidkbd_keydesc_br[] = { +/* pos normal shifted altgr shift-altgr */ + KC(6), KS_c, KS_C, KS_copyright, KS_copyright, + KC(8), KS_e, KS_E, KS_currency, KS_currency, + KC(16), KS_m, KS_M, KS_mu, KS_mu, + KC(20), KS_q, KS_Q, KS_slash, KS_slash, + KC(21), KS_r, KS_R, KS_registered, KS_registered, + KC(26), KS_w, KS_W, KS_question, KS_question, + KC(30), KS_1, KS_exclam, KS_onesuperior, KS_exclamdown, + KC(31), KS_2, KS_at, KS_twosuperior, KS_onehalf, + KC(32), KS_3, KS_numbersign, KS_threesuperior, KS_threequarters, + KC(33), KS_4, KS_dollar, KS_sterling, KS_onequarter, + KC(34), KS_5, KS_percent, KS_cent, KS_cent, + KC(35), KS_6, KS_dead_diaeresis, KS_notsign, KS_diaeresis, + KC(46), KS_equal, KS_plus, KS_section, KS_dead_ogonek, + KC(47), KS_dead_acute, KS_dead_grave, KS_acute, KS_grave, + KC(48), KS_bracketleft, KS_braceleft, KS_ordfeminine, KS_macron, + KC(49), KS_bracketright, KS_braceright, KS_masculine, KS_masculine, + KC(50), KS_bracketright, KS_braceright, KS_masculine, KS_masculine, + KC(51), KS_ccedilla, KS_Ccedilla, KS_dead_acute, KS_dead_hungarumlaut, + KC(52), KS_dead_tilde, KS_dead_circumflex, KS_asciitilde, KS_asciicircum, + KC(53), KS_apostrophe, KS_quotedbl, KS_notsign, KS_notsign, + KC(56), KS_semicolon, KS_colon, KS_dead_dotaccent, KS_abovedot, + KC(100), KS_backslash, KS_bar, KS_masculine, KS_dead_breve, + KC(135), KS_slash, KS_question, KS_degree, KS_questiondown, + KC(230), KS_Mode_switch, KS_Multi_key, +}; + +static const keysym_t hidkbd_keydesc_br_nodead[] = { +/* pos normal shifted altgr shift-altgr */ + KC(35), KS_6, KS_diaeresis, KS_notsign, KS_dead_diaeresis, + KC(47), KS_apostrophe, KS_grave, KS_dead_acute, KS_dead_grave, + KC(52), KS_asciitilde, KS_asciicircum, KS_dead_tilde, KS_dead_circumflex, +}; + +static const keysym_t hidkbd_keydesc_tr[] = { +/* pos normal shifted altgr shift-altgr */ + KC(12), KS_L5_idotless, KS_I, + KC(20), KS_q, KS_Q, KS_at, + KC(31), KS_2, KS_apostrophe, KS_sterling, + KC(32), KS_3, KS_asciicircum, KS_numbersign, + KC(33), KS_4, KS_plus, KS_dollar, + KC(34), KS_5, KS_percent, KS_onehalf, + KC(35), KS_6, KS_ampersand, + KC(36), KS_7, KS_slash, KS_braceleft, + KC(37), KS_8, KS_parenleft, KS_bracketleft, + KC(38), KS_9, KS_parenright, KS_bracketright, + KC(39), KS_0, KS_equal, KS_braceright, + KC(45), KS_asterisk, KS_question, KS_backslash, + KC(46), KS_minus, KS_underscore, + KC(47), KS_L5_gbreve, KS_L5_Gbreve, KS_dead_diaeresis, + KC(48), KS_udiaeresis, KS_Udiaeresis, KS_asciitilde, + KC(49), KS_comma, KS_semicolon, KS_dead_grave, + KC(50), KS_comma, KS_semicolon, KS_dead_grave, + KC(51), KS_L5_scedilla, KS_L5_Scedilla, KS_dead_acute, + KC(52), KS_i, KS_L5_Idotabove, + KC(53), KS_quotedbl, KS_eacute, + KC(54), KS_odiaeresis, KS_Odiaeresis, + KC(55), KS_ccedilla, KS_Ccedilla, + KC(56), KS_period, KS_colon, + KC(100), KS_less, KS_greater, KS_bar, + KC(230), KS_Mode_switch, KS_Multi_key, +}; + +static const keysym_t hidkbd_keydesc_tr_nodead[] = { +/* pos normal shifted altgr shift-altgr */ + KC(47), KS_L5_gbreve, KS_L5_Gbreve, + KC(49), KS_comma, KS_semicolon, KS_grave, + KC(50), KS_comma, KS_semicolon, KS_grave, + KC(51), KS_L5_scedilla, KS_L5_Scedilla, KS_apostrophe, +}; + +static const keysym_t hidkbd_keydesc_is[] = { +/* pos normal shifted altgr shift-altgr */ + KC(8), KS_e, KS_E, KS_currency, KS_cent, + KC(16), KS_m, KS_M, KS_mu, + KC(20), KS_q, KS_Q, KS_at, + KC(30), KS_1, KS_exclam, KS_onesuperior, KS_exclamdown, + KC(31), KS_2, KS_quotedbl, KS_twosuperior, KS_currency, + KC(32), KS_3, KS_numbersign, KS_threesuperior, KS_sterling, + KC(33), KS_4, KS_dollar, KS_onequarter, + KC(34), KS_5, KS_percent, KS_onehalf, + KC(35), KS_6, KS_ampersand, KS_notsign, + KC(36), KS_7, KS_slash, KS_braceleft, + KC(37), KS_8, KS_parenleft, KS_bracketleft, + KC(38), KS_9, KS_parenright, KS_bracketright, KS_plusminus, + KC(39), KS_0, KS_equal, KS_braceright, KS_degree, + KC(45), KS_odiaeresis, KS_Odiaeresis, KS_backslash, KS_questiondown, + KC(46), KS_minus, KS_underscore, KS_dead_cedilla, KS_dead_ogonek, + KC(47), KS_eth, KS_ETH, KS_dead_diaeresis, KS_dead_abovering, + KC(48), KS_apostrophe, KS_question, KS_asciitilde, + KC(49), KS_plus, KS_asterisk, KS_grave, KS_dead_breve, + KC(50), KS_plus, KS_asterisk, KS_grave, KS_dead_breve, + KC(51), KS_ae, KS_AE, KS_asciicircum, KS_dead_hungarumlaut, + KC(52), KS_dead_acute, KS_dead_diaeresis, KS_dead_circumflex, + KC(53), KS_degree, KS_diaeresis, + KC(54), KS_comma, KS_semicolon, + KC(55), KS_period, KS_colon, KS_periodcentered, KS_division, + KC(56), KS_thorn, KS_THORN, + KC(100), KS_less, KS_greater, KS_bar, + KC(230), KS_Mode_switch, KS_Multi_key, +}; + +static const keysym_t hidkbd_keydesc_is_nodead[] = { +/* pos normal shifted altgr shift-altgr */ + KC(52), KS_acute, KS_diaeresis, KS_asciicircum, +}; + +static const keysym_t hidkbd_keydesc_la[] = { +/* pos normal shifted altgr shift-altgr */ + KC(20), KS_q, KS_Q, KS_at, + KC(30), KS_1, KS_exclam, KS_bar, + KC(31), KS_2, KS_quotedbl, KS_at, + KC(32), KS_3, KS_numbersign, KS_periodcentered, + KC(35), KS_6, KS_ampersand, KS_notsign, + KC(36), KS_7, KS_slash, + KC(37), KS_8, KS_parenleft, + KC(38), KS_9, KS_parenright, + KC(39), KS_0, KS_equal, + KC(45), KS_apostrophe, KS_question, KS_backslash, + KC(46), KS_questiondown, KS_exclamdown, KS_dead_cedilla, KS_dead_ogonek, + KC(47), KS_dead_acute, KS_dead_diaeresis, KS_dead_diaeresis, KS_dead_abovering, + KC(48), KS_plus, KS_asterisk, KS_asciitilde, + KC(49), KS_braceright, KS_bracketright, KS_dead_grave, + KC(50), KS_braceright, KS_bracketright, KS_dead_grave, + KC(51), KS_ntilde, KS_Ntilde, KS_asciitilde, + KC(52), KS_braceleft, KS_bracketleft, KS_dead_circumflex, + KC(53), KS_bar, KS_degree, KS_notsign, + KC(54), KS_comma, KS_semicolon, + KC(55), KS_period, KS_colon, + KC(56), KS_minus, KS_underscore, + KC(100), KS_less, KS_greater, + KC(230), KS_Mode_switch, KS_Multi_key, +}; + +static const keysym_t hidkbd_keydesc_cf[] = { +/* pos normal shifted altgr shift-altgr */ + KC(16), KS_m, KS_M, KS_mu, + KC(18), KS_o, KS_O, KS_section, + KC(19), KS_p, KS_P, KS_paragraph, + KC(30), KS_1, KS_exclam, KS_plusminus, + KC(31), KS_2, KS_quotedbl, KS_at, + KC(32), KS_3, KS_slash, KS_sterling, + KC(33), KS_4, KS_dollar, KS_cent, + KC(34), KS_5, KS_percent, KS_currency, + KC(35), KS_6, KS_question, KS_notsign, + KC(36), KS_7, KS_ampersand, KS_brokenbar, + KC(37), KS_8, KS_asterisk, KS_twosuperior, + KC(38), KS_9, KS_parenleft, KS_threesuperior, + KC(39), KS_0, KS_parenright, KS_onequarter, + KC(44), KS_space, KS_space, KS_nobreakspace, + KC(45), KS_minus, KS_underscore, KS_onehalf, + KC(46), KS_equal, KS_plus, KS_threequarters, + KC(47), KS_dead_circumflex,KS_dead_circumflex, KS_bracketleft, + KC(48), KS_dead_cedilla, KS_dead_diaeresis, KS_bracketright, + KC(49), KS_less, KS_greater, KS_braceright, + KC(50), KS_less, KS_greater, KS_braceright, + KC(51), KS_semicolon, KS_colon, KS_asciitilde, + KC(52), KS_dead_grave, KS_dead_grave, KS_braceleft, + KC(53), KS_numbersign, KS_bar, KS_backslash, + KC(54), KS_comma, KS_apostrophe, KS_macron, + KC(55), KS_period, KS_period, KS_hyphen, + KC(56), KS_eacute, KS_Eacute, KS_dead_acute, + KC(100), KS_guillemotleft, KS_guillemotright, KS_degree, + KC(230), KS_Mode_switch, KS_Multi_key, +}; + #define KBD_MAP(name, base, map) \ { name, base, sizeof(map)/sizeof(keysym_t), map } @@ -636,13 +819,19 @@ const struct wscons_keydesc hidkbd_keyde KBD_MAP(KB_FR, KB_US, hidkbd_keydesc_fr), KBD_MAP(KB_FR | KB_SWAPCTRLCAPS,KB_FR, hidkbd_keydesc_swapctrlcaps), KBD_MAP(KB_BE, KB_FR, hidkbd_keydesc_be), + KBD_MAP(KB_BR, KB_US, hidkbd_keydesc_br), + KBD_MAP(KB_BR | KB_NODEAD, KB_BR, hidkbd_keydesc_br_nodead), KBD_MAP(KB_DK, KB_US, hidkbd_keydesc_dk), KBD_MAP(KB_DK | KB_NODEAD, KB_DK, hidkbd_keydesc_dk_nodead), + KBD_MAP(KB_IS, KB_US, hidkbd_keydesc_is), + KBD_MAP(KB_IS | KB_NODEAD, KB_IS, hidkbd_keydesc_is_nodead), KBD_MAP(KB_IT, KB_US, hidkbd_keydesc_it), KBD_MAP(KB_UK, KB_US, hidkbd_keydesc_uk), KBD_MAP(KB_UK | KB_SWAPCTRLCAPS,KB_UK, hidkbd_keydesc_swapctrlcaps), KBD_MAP(KB_SV, KB_DK, hidkbd_keydesc_sv), KBD_MAP(KB_SV | KB_NODEAD, KB_SV, hidkbd_keydesc_sv_nodead), + KBD_MAP(KB_EE, KB_SV, hidkbd_keydesc_ee), + KBD_MAP(KB_EE | KB_NODEAD, KB_EE, hidkbd_keydesc_ee_nodead), KBD_MAP(KB_NO, KB_DK, hidkbd_keydesc_no), KBD_MAP(KB_NO | KB_NODEAD, KB_NO, hidkbd_keydesc_no_nodead), KBD_MAP(KB_ES , KB_US, hidkbd_keydesc_es), @@ -651,6 +840,10 @@ const struct wscons_keydesc hidkbd_keyde KBD_MAP(KB_SG | KB_NODEAD, KB_SG, hidkbd_keydesc_sg_nodead), KBD_MAP(KB_SF, KB_SG, hidkbd_keydesc_sf), KBD_MAP(KB_SF | KB_NODEAD, KB_SF, hidkbd_keydesc_sg_nodead), + KBD_MAP(KB_TR, KB_US, hidkbd_keydesc_tr), + KBD_MAP(KB_TR | KB_NODEAD, KB_TR, hidkbd_keydesc_tr_nodead), + KBD_MAP(KB_LA, KB_US, hidkbd_keydesc_la), + KBD_MAP(KB_CF, KB_US, hidkbd_keydesc_cf), KBD_MAP(KB_HU, KB_US, hidkbd_keydesc_hu), {0, 0, 0, 0} }; Index: src/sys/dev/pckbport/wskbdmap_mfii.c diff -u src/sys/dev/pckbport/wskbdmap_mfii.c:1.26.10.1 src/sys/dev/pckbport/wskbdmap_mfii.c:1.26.10.2 --- src/sys/dev/pckbport/wskbdmap_mfii.c:1.26.10.1 Tue Jan 21 15:39:02 2020 +++ src/sys/dev/pckbport/wskbdmap_mfii.c Mon Jul 13 14:22:47 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: wskbdmap_mfii.c,v 1.26.10.1 2020/01/21 15:39:02 martin Exp $ */ +/* $NetBSD: wskbdmap_mfii.c,v 1.26.10.2 2020/07/13 14:22:47 martin Exp $ */ /*- * Copyright (c) 1997 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: wskbdmap_mfii.c,v 1.26.10.1 2020/01/21 15:39:02 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: wskbdmap_mfii.c,v 1.26.10.2 2020/07/13 14:22:47 martin Exp $"); #include "opt_wskbdmap.h" #include <sys/types.h> @@ -371,6 +371,22 @@ static const keysym_t pckbd_keydesc_sv_n KC(27), KS_diaeresis, KS_asciicircum, KS_asciitilde, }; +static const keysym_t pckbd_keydesc_ee[] = { +/* pos normal shifted altgr shift-altgr */ + KC(26), KS_udiaeresis, KS_Udiaeresis, KS_dead_diaeresis, KS_dead_abovering, + KC(27), KS_otilde, KS_Otilde, KS_section, + KC(31), KS_s, KS_S, KS_scaron, KS_Scaron, + KC(44), KS_z, KS_Z, KS_zcaron, KS_Zcaron, + KC(40), KS_adiaeresis, KS_Adiaeresis, KS_asciicircum, KS_dead_caron, + KC(41), KS_dead_caron, KS_dead_tilde, KS_notsign, KS_notsign, + KC(43), KS_apostrophe, KS_asterisk, KS_onehalf, KS_dead_breve, +}; + +static const keysym_t pckbd_keydesc_ee_nodead[] = { +/* pos normal shifted altgr shift-altgr */ + KC(41), KS_asciicircum, KS_asciitilde, KS_notsign, KS_notsign, +}; + static const keysym_t pckbd_keydesc_no[] = { /* pos normal shifted altgr shift-altgr */ KC(13), KS_backslash, KS_dead_grave, KS_dead_acute, @@ -827,6 +843,132 @@ static const keysym_t pckbd_keydesc_iope KC(87), KS_Cmd_Screen9, KS_f10, KC(88), KS_f11, }; + +static const keysym_t pckbd_keydesc_br[] = { +/* pos normal shifted altgr shift-altgr */ + KC(2), KS_1, KS_exclam, KS_onesuperior, KS_exclamdown, + KC(3), KS_2, KS_at, KS_twosuperior, KS_onehalf, + KC(4), KS_3, KS_numbersign, KS_threesuperior, KS_threequarters, + KC(5), KS_4, KS_dollar, KS_sterling, KS_onequarter, + KC(6), KS_5, KS_percent, KS_cent, KS_cent, + KC(7), KS_6, KS_dead_diaeresis, KS_notsign, KS_diaeresis, + KC(13), KS_equal, KS_plus, KS_section, KS_dead_ogonek, + KC(16), KS_q, KS_Q, KS_slash, KS_slash, + KC(17), KS_w, KS_W, KS_question, KS_question, + KC(18), KS_e, KS_E, KS_currency, KS_currency, + KC(19), KS_r, KS_R, KS_registered, KS_registered, + KC(26), KS_dead_acute, KS_dead_grave, KS_acute, KS_grave, + KC(27), KS_bracketleft, KS_braceleft, KS_ordfeminine, KS_macron, + KC(39), KS_ccedilla, KS_Ccedilla, KS_dead_acute, KS_dead_hungarumlaut, + KC(40), KS_dead_tilde, KS_dead_circumflex, KS_asciitilde, KS_asciicircum, + KC(41), KS_apostrophe, KS_quotedbl, KS_notsign, KS_notsign, + KC(43), KS_bracketright, KS_braceright, KS_masculine, KS_masculine, + KC(46), KS_c, KS_C, KS_copyright, KS_copyright, + KC(50), KS_m, KS_M, KS_mu, KS_mu, + KC(53), KS_semicolon, KS_colon, KS_dead_dotaccent, KS_abovedot, + KC(86), KS_backslash, KS_bar, KS_masculine, KS_dead_breve, + KC(115), KS_slash, KS_question, KS_degree, KS_questiondown, + KC(184), KS_Mode_switch, KS_Multi_key, +}; + +static const keysym_t pckbd_keydesc_br_nodead[] = { +/* pos normal shifted altgr shift-altgr */ + KC(7), KS_6, KS_diaeresis, KS_notsign, KS_dead_diaeresis, + KC(26), KS_apostrophe, KS_grave, KS_dead_acute, KS_dead_grave, + KC(40), KS_asciitilde, KS_asciicircum, KS_dead_tilde, KS_dead_circumflex, +}; + +static const keysym_t pckbd_keydesc_is[] = { +/* pos normal shifted altgr shift-altgr */ + KC(2), KS_1, KS_exclam, KS_onesuperior, KS_exclamdown, + KC(3), KS_2, KS_quotedbl, KS_twosuperior, + KC(4), KS_3, KS_numbersign, KS_threesuperior, KS_sterling, + KC(5), KS_4, KS_dollar, KS_onequarter, KS_currency, + KC(6), KS_5, KS_percent, KS_onehalf, + KC(7), KS_6, KS_ampersand, KS_notsign, + KC(8), KS_7, KS_slash, KS_braceleft, + KC(9), KS_8, KS_parenleft, KS_bracketleft, + KC(10), KS_9, KS_parenright, KS_bracketright, KS_plusminus, + KC(11), KS_0, KS_equal, KS_braceright, KS_degree, + KC(12), KS_odiaeresis, KS_Odiaeresis, KS_backslash, KS_questiondown, + KC(13), KS_minus, KS_underscore, KS_dead_cedilla, KS_dead_ogonek, + KC(16), KS_q, KS_Q, KS_at, + KC(18), KS_e, KS_E, KS_currency, KS_cent, + KC(26), KS_eth, KS_ETH, KS_dead_diaeresis, KS_dead_abovering, + KC(27), KS_apostrophe, KS_question, KS_asciitilde, + KC(39), KS_ae, KS_AE, KS_asciicircum, + KC(40), KS_dead_acute, KS_dead_diaeresis, KS_dead_circumflex, KS_dead_caron, + KC(41), KS_degree, KS_diaeresis, + KC(43), KS_plus, KS_asterisk, KS_grave, KS_dead_breve, + KC(50), KS_m, KS_M, KS_mu, + KC(51), KS_comma, KS_semicolon, + KC(52), KS_period, KS_colon, KS_periodcentered, KS_division, + KC(53), KS_thorn, + KC(86), KS_less, KS_greater, KS_bar, + KC(184), KS_Mode_switch, KS_Multi_key, +}; + +static const keysym_t pckbd_keydesc_is_nodead[] = { +/* pos normal shifted altgr shift-altgr */ + KC(40), KS_acute, KS_diaeresis, KS_asciicircum, +}; + +static const keysym_t pckbd_keydesc_la[] = { +/* pos normal shifted altgr shift-altgr */ + KC(2), KS_1, KS_exclam, KS_bar, + KC(3), KS_2, KS_quotedbl, KS_at, + KC(4), KS_3, KS_numbersign, KS_periodcentered, + KC(7), KS_6, KS_ampersand, KS_notsign, + 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, KS_dead_cedilla, KS_dead_ogonek, + KC(16), KS_q, KS_Q, KS_at, + KC(26), KS_dead_acute, KS_dead_diaeresis, KS_dead_diaeresis, KS_dead_abovering, + KC(27), KS_plus, KS_asterisk, KS_asciitilde, + KC(39), KS_ntilde, KS_Ntilde, KS_asciitilde, + 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_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_currency, + KC(7), KS_6, KS_question, KS_notsign, + 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_macron, + KC(52), KS_period, KS_period, KS_hyphen, + KC(53), KS_eacute, KS_Eacute, KS_dead_acute, + KC(57), KS_space, KS_space, KS_nobreakspace, + KC(86), KS_guillemotleft, KS_guillemotright, KS_degree, + KC(184), KS_Mode_switch, KS_Multi_key, +}; #endif /* WSKBD_USONLY */ #define KBD_MAP(name, base, map) \ @@ -846,13 +988,19 @@ const struct wscons_keydesc pckbd_keydes KBD_MAP(KB_SF | KB_NODEAD, KB_SF, pckbd_keydesc_sg_nodead), KBD_MAP(KB_FR, KB_US, pckbd_keydesc_fr), KBD_MAP(KB_BE, KB_FR, pckbd_keydesc_be), + KBD_MAP(KB_BR, KB_US, pckbd_keydesc_br), + KBD_MAP(KB_BR | KB_NODEAD, KB_BR, pckbd_keydesc_br_nodead), KBD_MAP(KB_DK, KB_US, pckbd_keydesc_dk), KBD_MAP(KB_DK | KB_NODEAD, KB_DK, pckbd_keydesc_dk_nodead), + KBD_MAP(KB_IS, KB_US, pckbd_keydesc_is), + KBD_MAP(KB_IS | KB_NODEAD, KB_IS, pckbd_keydesc_is_nodead), KBD_MAP(KB_IT, KB_US, pckbd_keydesc_it), KBD_MAP(KB_UK, KB_US, pckbd_keydesc_uk), KBD_MAP(KB_JP, KB_US, pckbd_keydesc_jp), KBD_MAP(KB_SV, KB_DK, pckbd_keydesc_sv), KBD_MAP(KB_SV | KB_NODEAD, KB_SV, pckbd_keydesc_sv_nodead), + KBD_MAP(KB_EE, KB_SV, pckbd_keydesc_ee), + KBD_MAP(KB_EE | KB_NODEAD, KB_EE, pckbd_keydesc_ee_nodead), KBD_MAP(KB_NO, KB_DK, pckbd_keydesc_no), KBD_MAP(KB_NO | KB_NODEAD, KB_NO, pckbd_keydesc_no_nodead), KBD_MAP(KB_US | KB_DECLK, KB_US, pckbd_keydesc_us_declk), @@ -876,6 +1024,8 @@ const struct wscons_keydesc pckbd_keydes KBD_MAP(KB_NL | KB_NODEAD, KB_NL, pckbd_keydesc_nl_nodead), KBD_MAP(KB_TR, KB_US, pckbd_keydesc_tr), KBD_MAP(KB_TR | KB_NODEAD, KB_TR, pckbd_keydesc_tr_nodead), + KBD_MAP(KB_LA, KB_US, pckbd_keydesc_la), + KBD_MAP(KB_CF, KB_US, pckbd_keydesc_cf), #endif /* WSKBD_USONLY */ /* placeholders */ Index: src/sys/dev/wscons/wsksymdef.h diff -u src/sys/dev/wscons/wsksymdef.h:1.67 src/sys/dev/wscons/wsksymdef.h:1.67.10.1 --- src/sys/dev/wscons/wsksymdef.h:1.67 Mon Feb 19 14:34:17 2018 +++ src/sys/dev/wscons/wsksymdef.h Mon Jul 13 14:22:47 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: wsksymdef.h,v 1.67 2018/02/19 14:34:17 maya Exp $ */ +/* $NetBSD: wsksymdef.h,v 1.67.10.1 2020/07/13 14:22:47 martin Exp $ */ /*- * Copyright (c) 1997 The NetBSD Foundation, Inc. @@ -651,29 +651,34 @@ * Sort (loosely) by country name. */ #define KB_ENC_FUN(action) \ -action(KB_USER, 0, 0x0100, "user", , "User-defined") \ -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_CZ, 0, 0x1500, "cz", , "Czech") \ -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_GR, 0, 0x1400, "gr", , "Greek") \ -action(KB_HU, 0, 0x0c00, "hu", , "Hungarian") \ -action(KB_IT, 0, 0x0500, "it", , "Italian") \ -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", , "Portuguese") \ -action(KB_RU, 0, 0x0e00, "ru", , "Russian") \ -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_USER, 0, 0x0100, "user", , "User-defined") \ +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, 0x1800, "br", , "Brazilian") \ +action(KB_CF, 0, 0x1c00, "cf", , "Canadian French") \ +action(KB_CZ, 0, 0x1500, "cz", , "Czech") \ +action(KB_DK, 0, 0x0400, "dk", , "Danish") \ +action(KB_NL, 0, 0x1600, "nl", , "Dutch") \ +action(KB_EE, 0, 0x1900, "ee", , "Estonian") \ +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_GR, 0, 0x1400, "gr", , "Greek") \ +action(KB_HU, 0, 0x0c00, "hu", , "Hungarian") \ +action(KB_IS, 0, 0x1a00, "is", , "Icelandic") \ +action(KB_IT, 0, 0x0500, "it", , "Italian") \ +action(KB_JP, 0, 0x0800, "jp", , "Japanese") \ +action(KB_LA, 0, 0x1b00, "la", , "Latin American") \ +action(KB_NO, 0, 0x0a00, "no", , "Norwegian") \ +action(KB_PL, 0, 0x0d00, "pl", , "Polish") \ +action(KB_PT, 0, 0x1100, "pt", , "Portuguese") \ +action(KB_RU, 0, 0x0e00, "ru", , "Russian") \ +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 (Q-Layout)") \ action(KB_UA, 0, 0x1200, "ua", , "Ukrainian") #define KB_NONE 0x0000