Subject: German keyboard layout for lk201
To: None <port-vax@netbsd.org>
From: Christian Groessler <cpg@aladdin.de>
List: port-vax
Date: 10/08/2002 01:12:51
Hi,

I'm using a German lk201 keyboard connected to a VS3100. Since there
was no support for the German layout, I tried to implement it. Here's
the result...

in the kernel config file I use

lkkbd0          at dz0 line 0
wskbd*          at lkkbd?
options         DZKBD_LAYOUT="(KB_DE | KB_LK401)"

Since I don't know how the Compose ("Kombizeichen" on German kb) is
supposed to work (I always get a ^@ when I type it), I changed it to
be like the AltGr key on German PC keyboards (yes, I know, should I
better follow the Mac kb layout? :-)

This results in the following layout:

- all keys generate the keys displayed on the keycaps wrt normal and
  shift status
- Compose/Kombizeichen generates these keys:
	ü	-	@       (printed on the keycap)
	ä	-	]       (printed on the keycap)
	8	-	{       (not printed, but shift-8 is "(")
	9	-	}       (not printed, but shift-9 is ")")
	<	-	|       (not printed, but on the same place
                                 on PC kbs...)
- Shift + Compose/Kombizeichen generates these:
	ü	-	\       (printed on the keycap)
	ä	-	[       (printed on the keycap)


The patch is attached...

regards,
chris



Index: wskbdmap_lk201.c
===================================================================
RCS file: /nfs/swamp/zeug/netbsd-rsync/main/syssrc/sys/dev/dec/wskbdmap_lk201.c,v
retrieving revision 1.6
diff -p -u -r1.6 wskbdmap_lk201.c
--- wskbdmap_lk201.c	2002/03/13 15:21:30	1.6
+++ wskbdmap_lk201.c	2002/10/07 22:46:55
@@ -126,12 +126,40 @@ static const keysym_t lkkbd_keydesc_us_l
     KC(178),			KS_Alt_R,
 };
 
+static const keysym_t lkkbd_keydesc_de[] = {
+    KC(177),			KS_Mode_switch,
+    KC(191),			KS_asciitilde,	KS_asciicircum,
+    KC(192),			KS_1,		KS_exclam,
+    KC(195),			KS_y,
+    KC(197),			KS_2,		KS_quotedbl,
+    KC(201),			KS_less,	KS_greater,	KS_bar,
+    KC(203),			KS_3,		KS_section,
+    KC(219),			KS_6,		KS_ampersand,
+    KC(220),			KS_z,
+    KC(224),			KS_7,		KS_slash,	KS_bar,
+    KC(229),			KS_8,		KS_parenleft,	KS_braceleft,
+    KC(232),			KS_comma,	KS_semicolon,
+    KC(234),			KS_9,		KS_parenright,	KS_braceright,
+    KC(237),			KS_period,	KS_colon,
+    KC(239),			KS_0,		KS_equal,
+    KC(242),			KS_odiaeresis,
+    KC(243),			KS_minus,	KS_underscore,
+    KC(245),			KS_apostrophe,	KS_grave,
+    KC(246),			KS_plus,	KS_asterisk,
+    KC(247),			KS_numbersign,	KS_apostrophe,
+    KC(249),			KS_ssharp,	KS_question,
+    KC(250),			KS_udiaeresis,	KS_Udiaeresis,	KS_at,	KS_backslash,
+    KC(251),			KS_adiaeresis,	KS_Adiaeresis,	KS_bracketright,	KS_bracketleft,
+};
+
 #define KBD_MAP(name, base, map) \
 			{ name, base, sizeof(map)/sizeof(keysym_t), map }
 
 const struct wscons_keydesc lkkbd_keydesctab[] = {
 	KBD_MAP(KB_US,			0,	lkkbd_keydesc_us),
 	KBD_MAP(KB_US | KB_LK401,	KB_US,	lkkbd_keydesc_us_lk401),
+	KBD_MAP(KB_DE,			KB_US,	lkkbd_keydesc_de),
+	KBD_MAP(KB_DE | KB_LK401,	KB_US | KB_LK401,	lkkbd_keydesc_de),
 	{0, 0, 0, 0}
 };