Module Name: src Committed By: mkirby Date: Mon Apr 6 17:32:10 UTC 2009
Modified Files: src/sys/dev/pckbport: wskbdmap_mfii.c src/sys/dev/wscons: wskbdutil.c wsksymdef.h Log Message: Add a Czech (QWERTY) keyboard layout, and teach wscons about latin 2 characters. Original code from Lubomir Kundrak, adapted to current and cleaned up by me. Fixes PR kern/16216 ok agc@ jdc@ To generate a diff of this commit: cvs rdiff -u -r1.16 -r1.17 src/sys/dev/pckbport/wskbdmap_mfii.c cvs rdiff -u -r1.15 -r1.16 src/sys/dev/wscons/wskbdutil.c cvs rdiff -u -r1.62 -r1.63 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/sys/dev/pckbport/wskbdmap_mfii.c diff -u src/sys/dev/pckbport/wskbdmap_mfii.c:1.16 src/sys/dev/pckbport/wskbdmap_mfii.c:1.17 --- src/sys/dev/pckbport/wskbdmap_mfii.c:1.16 Tue Feb 3 17:50:28 2009 +++ src/sys/dev/pckbport/wskbdmap_mfii.c Mon Apr 6 17:32:09 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: wskbdmap_mfii.c,v 1.16 2009/02/03 17:50:28 ghen Exp $ */ +/* $NetBSD: wskbdmap_mfii.c,v 1.17 2009/04/06 17:32:09 mkirby 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.16 2009/02/03 17:50:28 ghen Exp $"); +__KERNEL_RCSID(0, "$NetBSD: wskbdmap_mfii.c,v 1.17 2009/04/06 17:32:09 mkirby Exp $"); #include "opt_wskbdmap.h" #include <sys/types.h> @@ -418,6 +418,45 @@ KC(184), KS_Mode_switch, KS_Multi_key, }; +static const keysym_t pckbd_keydesc_cz[] = { +/* pos normal shifted altgr shift-altgr */ + KC(2), KS_plus, KS_1, KS_asciitilde, + KC(3), KS_ecaron, KS_2, KS_dead_caron, + KC(4), KS_scaron, KS_3, KS_dead_circumflex, + KC(5), KS_ccaron, KS_4, KS_dead_breve, + KC(6), KS_rcaron, KS_5, KS_dead_abovering, + KC(7), KS_zcaron, KS_6, KS_dead_ogonek, + KC(8), KS_yacute, KS_7, KS_dead_grave, + KC(9), KS_aacute, KS_8, KS_dead_dotaccent, + KC(10), KS_iacute, KS_9, KS_dead_acute, + KC(11), KS_eacute, KS_0, KS_dead_hungarumlaut, + KC(12), KS_equal, KS_percent, KS_dead_diaeresis, + KC(13), KS_dead_acute, KS_dead_caron, KS_dead_cedilla, + KC(26), KS_uacute, KS_slash, + KC(27), KS_adiaeresis, KS_parenleft, KS_multiply, + KC(39), KS_uabovering, KS_quotedbl, KS_dollar, + KC(40), KS_section, KS_exclam, KS_ssharp, + KC(41), KS_ncaron, KS_parenright, KS_currency, + KC(51), KS_comma, KS_question, + KC(52), KS_period, KS_colon, + KC(53), KS_minus, KS_underscore, + KC(86), KS_ampersand, KS_asterisk, KS_less, + KC(16), KS_q, KS_Q, KS_backslash, + KC(17), KS_w, KS_W, KS_bar, + KC(31), KS_s, KS_S, KS_dstroke, + KC(32), KS_d, KS_D, KS_Dstroke, + KC(33), KS_f, KS_F, KS_bracketleft, + KC(34), KS_g, KS_G, KS_bracketright, + KC(37), KS_k, KS_K, KS_lstroke, + KC(38), KS_l, KS_L, KS_Lstroke, + KC(44), KS_z, KS_Z, KS_greater, + KC(45), KS_x, KS_X, KS_numbersign, + 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(184), KS_Mode_switch, KS_Multi_key, +}; + static const keysym_t pckbd_keydesc_pt[] = { /* pos normal shifted altgr shift-altgr */ KC(3), KS_2, KS_quotedbl, KS_at, @@ -632,6 +671,7 @@ KBD_MAP(KB_ES , KB_US, pckbd_keydesc_es), KBD_MAP(KB_PT, KB_US, pckbd_keydesc_pt), KBD_MAP(KB_GR, KB_US, pckbd_keydesc_gr), + KBD_MAP(KB_CZ, KB_US, pckbd_keydesc_cz), #endif /* WSKBD_USONLY */ /* placeholders */ Index: src/sys/dev/wscons/wskbdutil.c diff -u src/sys/dev/wscons/wskbdutil.c:1.15 src/sys/dev/wscons/wskbdutil.c:1.16 --- src/sys/dev/wscons/wskbdutil.c:1.15 Mon Apr 28 20:24:01 2008 +++ src/sys/dev/wscons/wskbdutil.c Mon Apr 6 17:32:09 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: wskbdutil.c,v 1.15 2008/04/28 20:24:01 martin Exp $ */ +/* $NetBSD: wskbdutil.c,v 1.16 2009/04/06 17:32:09 mkirby Exp $ */ /*- * Copyright (c) 1997 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: wskbdutil.c,v 1.15 2008/04/28 20:24:01 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: wskbdutil.c,v 1.16 2009/04/06 17:32:09 mkirby Exp $"); #include <sys/param.h> #include <sys/errno.h> @@ -187,7 +187,78 @@ { { KS_dead_semi, KS_gr_y }, KS_gr_yt }, { { KS_dead_semi, KS_gr_v }, KS_gr_vt }, { { KS_dead_colon, KS_gr_i }, KS_gr_id }, - { { KS_dead_colon, KS_gr_y }, KS_gr_yd } + { { KS_dead_colon, KS_gr_y }, KS_gr_yd }, + + /* Latin 2*/ + + { { KS_dead_acute, KS_S }, KS_Sacute }, + { { KS_dead_acute, KS_Z }, KS_Zacute }, + { { KS_dead_acute, KS_s }, KS_sacute }, + { { KS_dead_acute, KS_z }, KS_zacute }, + { { KS_dead_acute, KS_R }, KS_Racute }, + { { KS_dead_acute, KS_A }, KS_Aacute }, + { { KS_dead_acute, KS_L }, KS_Lacute }, + { { KS_dead_acute, KS_C }, KS_Cacute }, + { { KS_dead_acute, KS_E }, KS_Eacute }, + { { KS_dead_acute, KS_I }, KS_Iacute }, + { { KS_dead_acute, KS_N }, KS_Nacute }, + { { KS_dead_acute, KS_O }, KS_Oacute }, + { { KS_dead_acute, KS_U }, KS_Uacute }, + { { KS_dead_acute, KS_Y }, KS_Yacute }, + { { KS_dead_acute, KS_r }, KS_racute }, + { { KS_dead_acute, KS_a }, KS_aacute }, + { { KS_dead_acute, KS_l }, KS_lacute }, + { { KS_dead_acute, KS_c }, KS_cacute }, + { { KS_dead_acute, KS_e }, KS_eacute }, + { { KS_dead_acute, KS_i }, KS_iacute }, + { { KS_dead_acute, KS_n }, KS_nacute }, + { { KS_dead_acute, KS_o }, KS_oacute }, + { { KS_dead_acute, KS_u }, KS_uacute }, + { { KS_dead_acute, KS_y }, KS_yacute }, + { { KS_dead_breve, KS_A }, KS_Abreve }, + { { KS_dead_breve, KS_a }, KS_abreve }, + { { KS_dead_caron, KS_L }, KS_Lcaron }, + { { KS_dead_caron, KS_S }, KS_Scaron }, + { { KS_dead_caron, KS_T }, KS_Tcaron }, + { { KS_dead_caron, KS_Z }, KS_Zcaron }, + { { KS_dead_caron, KS_l }, KS_lcaron }, + { { KS_dead_caron, KS_s }, KS_scaron }, + { { KS_dead_caron, KS_t }, KS_tcaron }, + { { KS_dead_caron, KS_z }, KS_zcaron }, + { { KS_dead_caron, KS_C }, KS_Ccaron }, + { { KS_dead_caron, KS_E }, KS_Ecaron }, + { { KS_dead_caron, KS_D }, KS_Dcaron }, + { { KS_dead_caron, KS_N }, KS_Ncaron }, + { { KS_dead_caron, KS_R }, KS_Rcaron }, + { { KS_dead_caron, KS_c }, KS_ccaron }, + { { KS_dead_caron, KS_e }, KS_ecaron }, + { { KS_dead_caron, KS_d }, KS_dcaron }, + { { KS_dead_caron, KS_n }, KS_ncaron }, + { { KS_dead_caron, KS_r }, KS_rcaron }, + { { KS_dead_cedilla, KS_S }, KS_Scedilla }, + { { KS_dead_cedilla, KS_s }, KS_scedilla }, + { { KS_dead_cedilla, KS_C }, KS_Ccedilla }, + { { KS_dead_cedilla, KS_T }, KS_Tcedilla }, + { { KS_dead_cedilla, KS_c }, KS_ccedilla }, + { { KS_dead_cedilla, KS_t }, KS_tcedilla }, + { { KS_dead_circumflex, KS_A }, KS_Acircumflex }, + { { KS_dead_circumflex, KS_I }, KS_Icircumflex }, + { { KS_dead_circumflex, KS_O }, KS_Ocircumflex }, + { { KS_dead_circumflex, KS_a }, KS_acircumflex }, + { { KS_dead_circumflex, KS_i }, KS_icircumflex }, + { { KS_dead_circumflex, KS_o }, KS_ocircumflex }, + { { KS_dead_diaeresis, KS_A }, KS_Adiaeresis }, + { { KS_dead_diaeresis, KS_E }, KS_Ediaeresis }, + { { KS_dead_diaeresis, KS_O }, KS_Odiaeresis }, + { { KS_dead_diaeresis, KS_U }, KS_Udiaeresis }, + { { KS_dead_diaeresis, KS_a }, KS_adiaeresis }, + { { KS_dead_diaeresis, KS_e }, KS_ediaeresis }, + { { KS_dead_diaeresis, KS_o }, KS_odiaeresis }, + { { KS_dead_diaeresis, KS_u }, KS_udiaeresis }, + { { KS_dead_ogonek, KS_A }, KS_Aogonek }, + { { KS_dead_ogonek, KS_a }, KS_aogonek }, + { { KS_dead_ogonek, KS_E }, KS_Eogonek }, + { { KS_dead_ogonek, KS_e }, KS_eogonek } }; #define COMPOSE_SIZE sizeof(compose_tab)/sizeof(compose_tab[0]) Index: src/sys/dev/wscons/wsksymdef.h diff -u src/sys/dev/wscons/wsksymdef.h:1.62 src/sys/dev/wscons/wsksymdef.h:1.63 --- src/sys/dev/wscons/wsksymdef.h:1.62 Wed Feb 18 04:17:44 2009 +++ src/sys/dev/wscons/wsksymdef.h Mon Apr 6 17:32:09 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: wsksymdef.h,v 1.62 2009/02/18 04:17:44 snj Exp $ */ +/* $NetBSD: wsksymdef.h,v 1.63 2009/04/06 17:32:09 mkirby Exp $ */ /*- * Copyright (c) 1997 The NetBSD Foundation, Inc. @@ -153,7 +153,6 @@ #define KS_braceright 0x7d #define KS_asciitilde 0x7e #define KS_Delete 0x7f - #define KS_nobreakspace 0xa0 #define KS_exclamdown 0xa1 #define KS_cent 0xa2 @@ -248,27 +247,90 @@ #define KS_ucircumflex 0xfb #define KS_udiaeresis 0xfc #define KS_yacute 0xfd -#define KS_thorn 0xfe +#define KS_thorn 0xfe #define KS_ydiaeresis 0xff - -#define KS_Odoubleacute 0x150 -#define KS_odoubleacute 0x151 -#define KS_Udoubleacute 0x170 -#define KS_udoubleacute 0x171 +#define KS_Abreve 0x0102 +#define KS_abreve 0x0103 +#define KS_Aogonek 0x0104 +#define KS_aogonek 0x0105 +#define KS_Cacute 0x0106 +#define KS_cacute 0x0107 +#define KS_Ccaron 0x010c +#define KS_ccaron 0x010d +#define KS_Dcaron 0x010e +#define KS_dcaron 0x010f +#define KS_Dstroke 0x0110 +#define KS_dstroke 0x0111 +#define KS_Eogonek 0x0118 +#define KS_eogonek 0x0119 +#define KS_Ecaron 0x011a +#define KS_ecaron 0x011b +#define KS_Lacute 0x0139 +#define KS_lacute 0x013a +#define KS_Lcaron 0x013d +#define KS_lcaron 0x013e +#define KS_Lstroke 0x0141 +#define KS_lstroke 0x0142 +#define KS_Nacute 0x0143 +#define KS_nacute 0x0144 +#define KS_Ncaron 0x0147 +#define KS_ncaron 0x0148 +#define KS_Odoubleacute 0x0150 +#define KS_odoubleacute 0x0151 +#define KS_Racute 0x0154 +#define KS_racute 0x0155 +#define KS_Rcaron 0x0158 +#define KS_rcaron 0x0159 +#define KS_Sacute 0x015a +#define KS_sacute 0x015b +#define KS_Scedilla 0x015e +#define KS_scedilla 0x015f +#define KS_Scaron 0x0160 +#define KS_scaron 0x0161 +#define KS_Tcedilla 0x0162 +#define KS_tcedilla 0x0163 +#define KS_Tcaron 0x0164 +#define KS_tcaron 0x0165 +#define KS_Uabovering 0x016e +#define KS_uabovering 0x016f +#define KS_Udoubleacute 0x0170 +#define KS_udoubleacute 0x0171 +#define KS_Zacute 0x0179 +#define KS_zacute 0x017a +#define KS_Zabovedot 0x017b +#define KS_zabovedot 0x017c +#define KS_Zcaron 0x017d +#define KS_zcaron 0x017e + +#define KS_caron 0x02c7 +#define KS_breve 0x02d8 +#define KS_abovedot 0x02d9 +#define KS_ogonek 0x02db +#define KS_doubleacute 0x02dd /* * Group Dead (dead accents) + * http://www.unicode.org/charts/PDF/U0300.pdf + * dotaccent = "dot above" + * hungarumlaut = "double acute" + * slash = "short solidus" */ #define KS_dead_grave 0x0300 #define KS_dead_acute 0x0301 #define KS_dead_circumflex 0x0302 #define KS_dead_tilde 0x0303 +#define KS_dead_breve 0x0306 #define KS_dead_diaeresis 0x0308 #define KS_dead_abovering 0x030a +#define KS_dead_caron 0x030c +#define KS_dead_dotaccent 0x0307 +#define KS_dead_hungarumlaut 0x030b +#define KS_dead_ogonek 0x0328 +#define KS_dead_slash 0x0337 #define KS_dead_cedilla 0x0327 -#define KS_dead_semi 0x0328 -#define KS_dead_colon 0x0329 +#define KS_dead_semi 0x0328 +#define KS_dead_colon 0x0329 /* * Group Greek @@ -580,6 +642,7 @@ 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_FI, 0, 0x0900, "fi", , "Finnish") \ action(KB_FR, 0, 0x0600, "fr", , "French") \ @@ -596,12 +659,12 @@ 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_UA, 0, 0x1200, "ua", , "Ukrainian") +action(KB_UA, 0, 0x1200, "ua", , "Ukrainian") #define KB_NONE 0x0000 /* Define all the KB_xx numeric values using above table */ #define KBF_ENUM(tag, tagf, value, cc, ccf, country) tag=value, -enum { KB_ENC_FUN(KBF_ENUM) KB_NEXT=0x1500 }; +enum { KB_ENC_FUN(KBF_ENUM) KB_NEXT=0x1600 }; /* Define list of KB_xxx and country codes for array initialisation */ #define KBF_ENCTAB(tag, tagf, value, cc, ccf, country) { tag, cc },