Subject: port-i386/4506: Finnish keyboard mapping for pccons
To: None <gnats-bugs@gnats.netbsd.org>
From: Andreas Gustafsson <gson@araneus.fi>
List: netbsd-bugs
Date: 11/16/1997 16:46:37
>Number:         4506
>Category:       port-i386
>Synopsis:       Finnish keyboard mapping for pccons
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    gnats-admin (GNATS administrator)
>State:          open
>Class:          change-request
>Submitter-Id:   net
>Arrival-Date:   Sun Nov 16 07:05:02 1997
>Last-Modified:
>Originator:     Andreas Gustafsson <gson@araneus.fi>
>Organization:
Araneus Information Systems Oy
>Release:        1.3_ALPHA (current-971115)
>Environment:
System: NetBSD gulp.araneus.fi 1.3_ALPHA NetBSD 1.3_ALPHA (GULP) #0: Wed Nov 5 \
10:16:19 EET 1997 gson@gulp.araneus.fi:/usr/src/sys/arch/i386/compile/GULP i386

>Description:

There is no support for Finnish keyboards in pccons.

>How-To-Repeat:

Connect a Finnish keyboard to a machine running NetBSD/i386 and pccons,
press some keys, and notice that the characters produced bear only a
slight resemblance to what is engraved on the key caps.

>Fix:

Apply the following patch. 

*** sys/arch/i386/isa/pccons.c.orig	Sat Nov  1 17:02:19 1997
--- sys/arch/i386/isa/pccons.c	Sat Nov 15 12:21:47 1997
***************
*** 85,91 ****
  /*
   * Non-US keyboards definition
   */
! #if defined(FRENCH_KBD) || defined(GERMAN_KBD) || defined(NORVEGIAN_KBD)
  # define NONUS_KBD
  # define DISPLAY_ISO8859
  # define NUMERIC_SLASH_FIX
--- 85,91 ----
  /*
   * Non-US keyboards definition
   */
! #if defined(FRENCH_KBD) || defined(GERMAN_KBD) || defined(NORVEGIAN_KBD) || defined(FINNISH_KBD)
  # define NONUS_KBD
  # define DISPLAY_ISO8859
  # define NUMERIC_SLASH_FIX
***************
*** 1935,1940 ****
--- 1935,2073 ----
  	{ NONE,	"",		"",		"",	"" }	/* 127 */
  };
  #endif
+ 
+ #ifdef FINNISH_KBD
+ static Scan_def	scan_codes[] = {
+ 	{ NONE,	"",	"",	"",	"" },	/* 0 unused */
+ 	{ ASCII,	"\033",	"\033",	"\033", "\033" },	/* 1 ESCape */
+ 	{ ASCII,	"1",	"!",	"",	"\241" },	/* 2 1 */
+ 	{ ASCII,	"2",	"\"",	"\000",	"@" },	/* 3 2 */
+ 	{ ASCII,	"3",	"#",	"",	"\243" },	/* 4 3 */
+ 	{ ASCII,	"4",	"$",	"",	"$" },	/* 5 4 */
+ 	{ ASCII,	"5",	"%",	"\034",	"%" },	/* 6 5 */
+ 	{ ASCII,	"6",	"&",	"\034",	"&" },	/* 7 6 */
+ 	{ ASCII,	"7",	"/",	"\033", "{" },	/* 8 7 */
+ 	{ ASCII,	"8",	"(",	"\033",	"[" },	/* 9 8 */
+ 	{ ASCII,	"9",	")",	"\035",	"]" },	/* 10 9 */
+ 	{ ASCII,	"0",	"=",	"\035",	"}" },	/* 11 0 */
+ 	{ ASCII,	"+",	"?",	"\037",	"\\" },	/* 12 - */
+ 	{ ASCII,	"'",	"`",	"\034",	"'" },	/* 13 = */
+ 	{ ASCII,	"\177",	"\177",	"\010",	"\177" },	/* 14 backspace */
+ 	{ ASCII,	"\t",	"\177\t", "\t", "\t" },	/* 15 tab */
+ 	{ ASCII,	"q",	"Q",	"\021",	"q" },	/* 16 q */
+ 	{ ASCII,	"w",	"W",	"\027", "w" },	/* 17 w */
+ 	{ ASCII,	"e",	"E",	"\005", "\353" },	/* 18 e */
+ 	{ ASCII,	"r",	"R",	"\022", "r" },	/* 19 r */
+ 	{ ASCII,	"t",	"T",	"\024",	"t" },	/* 20 t */
+ 	{ ASCII,	"y",	"Y",	"\031",	"y" },	/* 21 y */
+ 	{ ASCII,	"u",	"U",	"\025", "\374" },	/* 22 u */
+ 	{ ASCII,	"i",	"I",	"\011",	"i" },	/* 23 i */
+ 	{ ASCII,	"o",	"O",	"\017", "\366" },	/* 24 o */
+ 	{ ASCII,	"p",	"P",	"\020",	"p" },	/* 25 p */
+ 	{ ASCII,	"\345",	"\305",	"\035",	"}" },	/* 26 [ */
+ 	{ ASCII,	"~",	"^",	"\036",	"~" },	/* 27 ] */
+ 	{ ASCII,	"\r",	"\r",	"\n",	"\r" },	/* 28 return */
+ 	{ CTL,	"",	"",	"",	"" },	/* 29 control */
+ 	{ ASCII,	"a",	"A",	"\001",	"\344" },	/* 30 a */
+ 	{ ASCII,	"s",	"S",	"\023",	"\337" },	/* 31 s */
+ 	{ ASCII,	"d",	"D",	"\004",	"d" },	/* 32 d */
+ 	{ ASCII,	"f",	"F",	"\006",	"f" },	/* 33 f */
+ 	{ ASCII,	"g",	"G",	"\007",	"g" },	/* 34 g */
+ 	{ ASCII,	"h",	"H",	"\010",	"h" },	/* 35 h */
+ 	{ ASCII,	"j",	"J",	"\n",	"j" },	/* 36 j */
+ 	{ ASCII,	"k",	"K",	"\013",	"k" },	/* 37 k */
+ 	{ ASCII,	"l",	"L",	"\014",	"l" },	/* 38 l */
+ 	{ ASCII,	"\366",	"\326",	"\034",	"|" },	/* 39 ; */
+ 	{ ASCII,	"\344",	"\304",	"\033",	"{" },	/* 40 ' */
+ 	{ ASCII,	"\247",	"\275",	"\000",	"@" },	/* 41 ` */
+ 	{ SHIFT,	"",	"",	"",	"" },	/* 42 shift */
+ 	{ ASCII,	"'",	"*",	"'",	"'" },	/* 43 \ */
+ 	{ ASCII,	"z",	"Z",	"\032",	"z" },	/* 44 z */
+ 	{ ASCII,	"x",	"X",	"\030",	"x" },	/* 45 x */
+ 	{ ASCII,	"c",	"C",	"\003",	"c" },	/* 46 c */
+ 	{ ASCII,	"v",	"V",	"\026",	"v" },	/* 47 v */
+ 	{ ASCII,	"b",	"B",	"\002",	"b" },	/* 48 b */
+ 	{ ASCII,	"n",	"N",	"\016",	"n" },	/* 49 n */
+ 	{ ASCII,	"m",	"M",	"\015",	"m" },	/* 50 m */
+ 	{ ASCII,	",",	";",	",",	"," },	/* 51 , */
+ 	{ ASCII,	".",	":",	".",	"." },	/* 52 . */
+ 	{ ASCII,	"-",	"_",	"\037",	"-" },	/* 53 / */
+ 	{ SHIFT,	"",	"",	"",	"" },	/* 54 shift */
+ 	{ KP,	"*",	"*",	"*",	"*" },	/* 55 kp * */
+ 	{ ALT,	"",	"",	"",	"" },	/* 56 alt */
+ 	{ ASCII,	" ",	" ",	"\000",	" " },	/* 57 space */
+ 	{ CAPS,	"",	"",	"",	"" },	/* 58 caps */
+ 	{ FUNC,	"\033[M",	"\033[Y",	"\033[k",	"" },	/* 59 f1 */
+ 	{ FUNC,	"\033[N",	"\033[Z",	"\033[l",	"" },	/* 60 f2 */
+ 	{ FUNC,	"\033[O",	"\033[a",	"\033[m",	"" },	/* 61 f3 */
+ 	{ FUNC,	"\033[P",	"\033[b",	"\033[n",	"" },	/* 62 f4 */
+ 	{ FUNC,	"\033[Q",	"\033[c",	"\033[o",	"" },	/* 63 f5 */
+ 	{ FUNC,	"\033[R",	"\033[d",	"\033[p",	"" },	/* 64 f6 */
+ 	{ FUNC,	"\033[S",	"\033[e",	"\033[q",	"" },	/* 65 f7 */
+ 	{ FUNC,	"\033[T",	"\033[f",	"\033[r",	"" },	/* 66 f8 */
+ 	{ FUNC,	"\033[U",	"\033[g",	"\033[s",	"" },	/* 67 f9 */
+ 	{ FUNC,	"\033[V",	"\033[h",	"\033[t",	"" },	/* 68 f10 */
+ 	{ NUM,	"",		"",		"",		"" },	/* 69 num lock */
+ 	{ SCROLL,	"",		"",		"",		"" },  	/* 70 scroll lock */
+ 	{ KP,	"7",		"\033[H",	"7",	"" },	/* 71 kp 7 */
+ 	{ KP,	"8",		"\033[A",	"8",	"" },	/* 72 kp 8 */
+ 	{ KP,	"9",		"\033[I",	"9",	"" },	/* 73 kp 9 */
+ 	{ KP,	"-",		"-",		"-",	"" },	/* 74 kp - */
+ 	{ KP,	"4",		"\033[D",	"4",	"" },	/* 75 kp 4 */
+ 	{ KP,	"5",		"\033[E",	"5",	"" },	/* 76 kp 5 */
+ 	{ KP,	"6",		"\033[C",	"6",	"" },	/* 77 kp 6 */
+ 	{ KP,	"+",		"+",		"+",	"" },	/* 78 kp + */
+ 	{ KP,	"1",		"\033[F",	"1",	"" },	/* 79 kp 1 */
+ 	{ KP,	"2",		"\033[B",	"2",	"" },	/* 80 kp 2 */
+ 	{ KP,	"3",		"\033[G",	"3",	"" },	/* 81 kp 3 */
+ 	{ KP,	"0",		"\033[L",	"0",	"" },	/* 82 kp 0 */
+ 	{ KP,	".",		"\177",		".",	"" },	/* 83 kp . */
+ 	{ NONE,	"",		"",		"",	"" },	/* 84 0 */
+ 	{ NONE,	"100",		"",		"",	"" },	/* 85 0 */
+ 	{ ASCII,	"<",		">",		"<",	"|" },	/* 86 < > */
+ 	{ FUNC,	"\033[W",	"\033[i",	"\033[u","" },	/* 87 f11 */
+ 	{ FUNC,	"\033[X",	"\033[j",	"\033[v","" },	/* 88 f12 */
+ 	{ NONE,	"102",		"",		"",	"" },	/* 89 0 */
+ 	{ NONE,	"103",		"",		"",	"" },	/* 90 0 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 91 0 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 92 0 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 93 0 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 94 0 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 95 0 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 96 0 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 97 0 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 98 0 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 99 0 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 100 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 101 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 102 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 103 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 104 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 105 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 106 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 107 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 108 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 109 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 110 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 111 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 112 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 113 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 114 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 115 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 116 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 117 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 118 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 119 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 120 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 121 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 122 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 123 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 124 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 125 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 126 */
+ 	{ NONE,	"",		"",		"",	"" },	/* 127 */
+ };
+ #endif 
  
  /*
   * XXXX Add tables for other keyboards here
>Audit-Trail:
>Unformatted: