summaryrefslogtreecommitdiff
path: root/sbin
diff options
context:
space:
mode:
authorMats O Jansson <maja@cvs.openbsd.org>1999-07-18 17:21:15 +0000
committerMats O Jansson <maja@cvs.openbsd.org>1999-07-18 17:21:15 +0000
commitd853a9ffbf5a469e8a4bd03f3c3e7878dd6a932c (patch)
tree82b8bf258f08c4b2d2f3ae41285b3df898d1d71c /sbin
parent701e6ae03ec702bfdc7a91e23852080e521f31ae (diff)
Add support for some none us keyboards. -moj
Diffstat (limited to 'sbin')
-rw-r--r--sbin/kbd/Makefile4
-rw-r--r--sbin/kbd/kbd_sparc.c182
-rw-r--r--sbin/kbd/tables/sparc/de163
-rw-r--r--sbin/kbd/tables/sparc/de_5163
-rw-r--r--sbin/kbd/tables/sparc/dk163
-rw-r--r--sbin/kbd/tables/sparc/dk_5163
-rw-r--r--sbin/kbd/tables/sparc/nl163
-rw-r--r--sbin/kbd/tables/sparc/nl_5163
-rw-r--r--sbin/kbd/tables/sparc/no163
-rw-r--r--sbin/kbd/tables/sparc/no_5163
-rw-r--r--sbin/kbd/tables/sparc/se_5163
-rw-r--r--sbin/kbd/tables/sparc/se_fi163
-rw-r--r--sbin/kbd/tables/sparc/uk163
-rw-r--r--sbin/kbd/tables/sparc/uk_5163
-rw-r--r--sbin/kbd/tables/sparc/us163
-rw-r--r--sbin/kbd/tables/sparc/us_5163
16 files changed, 2467 insertions, 1 deletions
diff --git a/sbin/kbd/Makefile b/sbin/kbd/Makefile
index 2a4646e9710..4b6d1ddfe73 100644
--- a/sbin/kbd/Makefile
+++ b/sbin/kbd/Makefile
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile,v 1.5 1998/07/06 13:42:24 pefo Exp $
+# $OpenBSD: Makefile,v 1.6 1999/07/18 17:21:10 maja Exp $
PROG= kbd
MAN= kbd.8
@@ -12,6 +12,8 @@ CFLAGS+=-DHAVEPCVT
.if (${MACHINE} == "i386") || (${MACHINE} == "arc")
SRCS+= kbd_i386.c
+.else if (${MACHINE} == "sparc")
+SRCS+= kbd_sparc.c
.else
SRCS+= kbd_void.c
.endif
diff --git a/sbin/kbd/kbd_sparc.c b/sbin/kbd/kbd_sparc.c
new file mode 100644
index 00000000000..5b9105981b2
--- /dev/null
+++ b/sbin/kbd/kbd_sparc.c
@@ -0,0 +1,182 @@
+/* $OpenBSD: kbd_sparc.c,v 1.1 1999/07/18 17:21:10 maja Exp $ */
+
+/*
+ * Copyright (c) 1999 Mats O Jansson. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Mats O Jansson.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdio.h>
+#include <fcntl.h>
+#include <sparc/kbio.h>
+#include <sparc/kbd.h>
+#include <sys/ioctl.h>
+
+#define NUM_KEYS 128 /* Number of scan codes */
+#define NUM_NAMES 10 /* Number of names for a map */
+
+#define ALL(s) (s), (s), (s), (s),
+#define BB(s) (FUNNY+(s))
+#define LF(s) (0x600+(s)-1)
+#define RF(s) (0x610+(s)-1)
+#define TF(s) (0x620+(s)-1)
+#define BF(s) (0x630+(s)-1)
+#define SK(s) (SHIFTKEYS+(s))
+#define ST(s) (0x500+(s))
+#define GR(s) (0x400+(s))
+#define C8(s) ((u_char)(s))
+
+typedef struct {
+ u_short unshift;
+ u_short shift;
+ u_short altgr;
+ u_short control;
+} keymap_t;
+
+struct {
+ char *name[NUM_NAMES];
+ keymap_t map[NUM_KEYS];
+} keymaps[] = {
+
+ {
+#include "tables/sparc/us"
+ },
+ {
+#include "tables/sparc/dk"
+ },
+ {
+#include "tables/sparc/de"
+ },
+ {
+#include "tables/sparc/nl"
+ },
+ {
+#include "tables/sparc/no"
+ },
+ {
+#include "tables/sparc/se_fi"
+ },
+ {
+#include "tables/sparc/uk"
+ },
+ {
+#include "tables/sparc/us_5"
+ },
+ {
+#include "tables/sparc/dk_5"
+ },
+ {
+#include "tables/sparc/de_5"
+ },
+ {
+#include "tables/sparc/nl_5"
+ },
+ {
+#include "tables/sparc/no_5"
+ },
+ {
+#include "tables/sparc/se_5"
+ },
+ {
+#include "tables/sparc/uk_5"
+ },
+ {
+ { NULL }
+ }
+};
+
+extern char *__progname;
+
+void
+kbd_list()
+{
+ int i, j;
+
+ printf("tables available:\n%-16s %s\n\n",
+ "encoding", "nick names");
+ for (i = 0; keymaps[i].name[0]; i++) {
+ printf("%-16s",keymaps[i].name[0]);
+ for (j = 1; j < NUM_NAMES && keymaps[i].name[j]; j++)
+ printf(" %s", keymaps[i].name[j]);
+ printf("\n");
+ }
+}
+
+void
+kbd_set(name, verbose)
+ char *name;
+ int verbose;
+{
+ int i, j, fd, t, l, r;
+ keymap_t *map = NULL;
+ int x[] = { KIOC_NOMASK, KIOC_SHIFTMASK,
+ KIOC_ALTGMASK, KIOC_CTRLMASK };
+ struct kiockey k;
+
+ for (i = 0; keymaps[i].name[0]; i++)
+ for (j = 0; j < NUM_NAMES && keymaps[i].name[j]; j++)
+ if (strcmp(keymaps[i].name[j], name) == 0) {
+ name = keymaps[i].name[0];
+ map = keymaps[i].map;
+ break;
+ }
+
+ if (map == NULL) {
+ fprintf(stderr, "%s: no such keymap: %s\n",
+ __progname, name);
+ exit(1);
+ }
+
+ fd = open("/dev/kbd", O_RDWR);
+
+ if (fd != -1) {
+
+ r = ioctl(fd, KIOCTYPE, &t);
+
+ r = ioctl(fd, KIOCLAYOUT, &l);
+
+ for (i = 0; i < 128; i++) {
+ for (j = 0; j < 4; j++) {
+ k.kio_tablemask = x[j];
+ k.kio_station = i;
+ switch(j) {
+ case 0: k.kio_entry = map[i].unshift; break;
+ case 1: k.kio_entry = map[i].shift; break;
+ case 2: k.kio_entry = map[i].altgr; break;
+ case 3: k.kio_entry = map[i].control; break;
+ }
+ r = ioctl(fd, KIOCSKEY, &k);
+ }
+ }
+
+ close(fd);
+
+ }
+
+ if (verbose)
+ fprintf(stderr, "keyboard mapping set to %s\n", name);
+
+}
diff --git a/sbin/kbd/tables/sparc/de b/sbin/kbd/tables/sparc/de
new file mode 100644
index 00000000000..ffa9408d5f3
--- /dev/null
+++ b/sbin/kbd/tables/sparc/de
@@ -0,0 +1,163 @@
+/* $OpenBSD: de,v 1.1 1999/07/18 17:21:11 maja Exp $ */
+
+/*
+ * Copyright (c) 1999 Mats O Jansson
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Mats O Jansson.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+ { "de", "germany", "type_4_layout_05" },
+/* unshift shift alt gr control */
+ ALL(HOLE) /* 0 */
+ ALL(BB(SYSTEMBIT)) /* 1 */
+ ALL(HOLE) /* 2 */
+ ALL(LF(2)) /* 3 */
+ ALL(HOLE) /* 4 */
+ ALL(TF(1)) /* 5 */
+ ALL(TF(2)) /* 6 */
+ ALL(TF(10)) /* 7 */
+ ALL(TF(3)) /* 8 */
+ ALL(TF(11)) /* 9 */
+ ALL(TF(4)) /* 10 */
+ ALL(TF(12)) /* 11 */
+ ALL(TF(5)) /* 12 */
+ ALL(SK(ALT)) /* 13 */
+ ALL(TF(6)) /* 14 */
+ ']', '}', C8('»'),'\035', /* 15 */
+ ALL(TF(7)) /* 16 */
+ ALL(TF(8)) /* 17 */
+ ALL(TF(9)) /* 18 */
+ ALL(SK(ALTGRAPH)) /* 19 */
+ ALL(HOLE) /* 20 */
+ ALL(RF(1)) /* 21 */
+ ALL(RF(2)) /* 22 */
+ ALL(RF(3)) /* 23 */
+ ALL(HOLE) /* 24 */
+ ALL(LF(3)) /* 25 */
+ ALL(LF(4)) /* 26 */
+ ALL(HOLE) /* 27 */
+ ALL(HOLE) /* 28 */
+ ALL('\033') /* 29 */
+ '1', '!', NOP, '1', /* 30 */
+ '2', '"', C8('²'),'2', /* 31 */
+ '3', C8('§'),C8('³'),'3', /* 32 */
+ '4', '$', NOP, '4', /* 33 */
+ '5', '%', NOP, '5', /* 34 */
+ '6', '&', NOP, '6', /* 35 */
+ '7', '/', C8('°'),'7', /* 36 */
+ '8', '(', '`', '8', /* 37 */
+ '9', ')', '\'', '9', /* 38 */
+ '0', '=', '|', '0', /* 39 */
+ C8('ß'),'?', '\\', '\034', /* 40 */
+ GR(4), GR(5), NOP, GR(4), /* 41 */
+ '#', '^', '@', '\036', /* 42 */
+ ALL('\b') /* 43 */
+ ALL(HOLE) /* 44 */
+ ALL(RF(4)) /* 45 */
+ ALL(RF(5)) /* 46 */
+ ALL(RF(6)) /* 47 */
+ ALL(BF(13)) /* 48 */
+ ALL(LF(5)) /* 49 */
+ ALL(BF(10)) /* 50 */
+ ALL(LF(6)) /* 51 */
+ ALL(HOLE) /* 52 */
+ ALL('\t') /* 53 */
+ 'q', 'Q', NOP, '\021', /* 54 */
+ 'w', 'W', NOP, '\027', /* 55 */
+ 'e', 'E', NOP, '\005', /* 56 */
+ 'r', 'R', NOP, '\022', /* 57 */
+ 't', 'T', NOP, '\024', /* 58 */
+ 'z', 'Z', NOP, '\032', /* 59 */
+ 'u', 'U', NOP, '\025', /* 60 */
+ 'i', 'I', NOP, '\t', /* 61 */
+ 'o', 'O', NOP, '\017', /* 62 */
+ 'p', 'P', NOP, '\020', /* 63 */
+ C8('ü'),C8('Ü'),NOP, C8('ü'), /* 64 */
+ '+', '*', '~', '+', /* 65 */
+ ALL('\177') /* 66 */
+ ALL(COMPOSE) /* 67 */
+ ALL(RF(7)) /* 68 */
+ ALL(ST(1)) /* 69 */
+ ALL(RF(9)) /* 70 */
+ ALL(BF(15)) /* 71 */
+ ALL(LF(7)) /* 72 */
+ ALL(LF(8)) /* 73 */
+ ALL(HOLE) /* 74 */
+ ALL(HOLE) /* 75 */
+ ALL(SK(CAPSLOCK)) /* 76 */
+ 'a', 'A', NOP, '\001', /* 77 */
+ 's', 'S', NOP, '\023', /* 78 */
+ 'd', 'D', NOP, '\004', /* 79 */
+ 'f', 'F', NOP, '\006', /* 80 */
+ 'g', 'G', NOP, '\007', /* 81 */
+ 'h', 'H', NOP, '\b', /* 82 */
+ 'j', 'J', NOP, '\n', /* 83 */
+ 'k', 'K', NOP, '\013', /* 84 */
+ 'l', 'L', NOP, '\014', /* 85 */
+ C8('ö'),C8('Ö'),NOP, C8('ö'), /* 86 */
+ C8('ä'),C8('Ä'),NOP, C8('ä'), /* 87 */
+ '[', '{', C8('«'),'\033', /* 88 */
+ ALL('\r') /* 89 */
+ ALL(BF(11)) /* 90 */
+ ALL(ST(3)) /* 91 */
+ ALL(RF(11)) /* 92 */
+ ALL(ST(4)) /* 93 */
+ ALL(BF(8)) /* 94 */
+ ALL(LF(9)) /* 95 */
+ ALL(HOLE) /* 96 */
+ ALL(LF(10)) /* 97 */
+ ALL(SK(NUMLOCK)) /* 98 */
+ ALL(SK(LEFTSHIFT)) /* 99 */
+ 'y', 'Y', NOP, '\031', /* 100 */
+ 'x', 'X', NOP, '\030', /* 101 */
+ 'c', 'C', NOP, '\003', /* 102 */
+ 'v', 'V', NOP, '\026', /* 103 */
+ 'b', 'B', NOP, '\002', /* 104 */
+ 'n', 'N', NOP, '\016', /* 105 */
+ 'm', 'M', C8('µ'),'\r', /* 106 */
+ ',', ';', NOP, ',', /* 107 */
+ '.', ':', NOP, '.', /* 108 */
+ '-', '_', NOP, '\037', /* 109 */
+ ALL(SK(RIGHTSHIFT)) /* 110 */
+ ALL('\n') /* 111 */
+ ALL(RF(13)) /* 112 */
+ ALL(ST(2)) /* 113 */
+ ALL(RF(15)) /* 114 */
+ ALL(HOLE) /* 115 */
+ ALL(HOLE) /* 116 */
+ ALL(HOLE) /* 117 */
+ ALL(LF(16)) /* 118 */
+ ALL(SK(LEFTCTRL)) /* 119 */
+ ALL(BB(0)) /* 120 */
+ ' ', ' ', ' ', '\000', /* 121 */
+ ALL(BB(0)) /* 122 */
+ ALL(HOLE) /* 123 */
+ '<', '>', NOP, '<', /* 124 */
+ ALL(BF(14)) /* 125 */
+ ALL(ERROR) /* 126 */
+ ALL(IDLE) /* 127 */
diff --git a/sbin/kbd/tables/sparc/de_5 b/sbin/kbd/tables/sparc/de_5
new file mode 100644
index 00000000000..4c6b16739c1
--- /dev/null
+++ b/sbin/kbd/tables/sparc/de_5
@@ -0,0 +1,163 @@
+/* $OpenBSD: de_5,v 1.1 1999/07/18 17:21:11 maja Exp $ */
+
+/*
+ * Copyright (c) 1999 Mats O Jansson
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Mats O Jansson.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+ { "de_5", "germany_5", "type_4_layout_25" },
+/* unshift shift alt gr control */
+ ALL(HOLE) /* 0 */
+ ALL(BB(SYSTEMBIT)) /* 1 */
+ ALL(HOLE) /* 2 */
+ ALL(LF(2)) /* 3 */
+ ALL(HOLE) /* 4 */
+ ALL(TF(1)) /* 5 */
+ ALL(TF(2)) /* 6 */
+ ALL(TF(10)) /* 7 */
+ ALL(TF(3)) /* 8 */
+ ALL(TF(11)) /* 9 */
+ ALL(TF(4)) /* 10 */
+ ALL(TF(12)) /* 11 */
+ ALL(TF(5)) /* 12 */
+ ALL(SK(ALTGRAPH)) /* 13 */
+ ALL(TF(6)) /* 14 */
+ ALL(HOLE) /* 15 */
+ ALL(TF(7)) /* 16 */
+ ALL(TF(8)) /* 17 */
+ ALL(TF(9)) /* 18 */
+ ALL(SK(ALT)) /* 19 */
+ ALL(ST(1)) /* 20 */
+ ALL(RF(1)) /* 21 */
+ ALL(RF(2)) /* 22 */
+ ALL(RF(3)) /* 23 */
+ ALL(ST(3)) /* 24 */
+ ALL(LF(3)) /* 25 */
+ ALL(LF(4)) /* 26 */
+ ALL(ST(2)) /* 27 */
+ ALL(ST(4)) /* 28 */
+ ALL('\033') /* 29 */
+ '1', '!', NOP, '1', /* 30 */
+ '2', '"', C8('²'),'\000', /* 31 */
+ '3', C8('§'),C8('³'),'3', /* 32 */
+ '4', '$', NOP, '4', /* 33 */
+ '5', '%', NOP, '5', /* 34 */
+ '6', '&', NOP, '6', /* 35 */
+ '7', '/', '{', '7', /* 36 */
+ '8', '(', '[', '\033', /* 37 */
+ '9', ')', ']', '\035', /* 38 */
+ '0', '=', '}', '0', /* 39 */
+ C8('ß'),'?', '\\', '\034', /* 40 */
+ GR(4), GR(5), NOP, GR(4), /* 41 */
+ '^', C8('°'),NOP, '\036', /* 42 */
+ ALL('\b') /* 43 */
+ ALL(BF(8)) /* 44 */
+ ALL(RF(4)) /* 45 */
+ ALL(RF(5)) /* 46 */
+ ALL(RF(6)) /* 47 */
+ ALL(BF(13)) /* 48 */
+ ALL(LF(5)) /* 49 */
+ ALL(BF(10)) /* 50 */
+ ALL(LF(6)) /* 51 */
+ ALL(RF(7)) /* 52 */
+ ALL('\t') /* 53 */
+ 'q', 'Q', '@', '\021', /* 54 */
+ 'w', 'W', NOP, '\027', /* 55 */
+ 'e', 'E', NOP, '\005', /* 56 */
+ 'r', 'R', NOP, '\022', /* 57 */
+ 't', 'T', NOP, '\024', /* 58 */
+ 'z', 'Z', NOP, '\032', /* 59 */
+ 'u', 'U', NOP, '\025', /* 60 */
+ 'i', 'I', NOP, '\t', /* 61 */
+ 'o', 'O', NOP, '\017', /* 62 */
+ 'p', 'P', NOP, '\020', /* 63 */
+ C8('ü'),C8('Ü'),NOP, C8('ü'), /* 64 */
+ '+', '*', '~', '+', /* 65 */
+ ALL('\177') /* 66 */
+ ALL(COMPOSE) /* 67 */
+ ALL(RF(7)) /* 68 */
+ ALL(ST(1)) /* 69 */
+ ALL(RF(9)) /* 70 */
+ ALL(BF(15)) /* 71 */
+ ALL(LF(7)) /* 72 */
+ ALL(LF(8)) /* 73 */
+ ALL(RF(13)) /* 74 */
+ ALL(HOLE) /* 75 */
+ ALL(SK(LEFTCTRL)) /* 76 */
+ 'a', 'A', NOP, '\001', /* 77 */
+ 's', 'S', NOP, '\023', /* 78 */
+ 'd', 'D', NOP, '\004', /* 79 */
+ 'f', 'F', NOP, '\006', /* 80 */
+ 'g', 'G', NOP, '\007', /* 81 */
+ 'h', 'H', NOP, '\b', /* 82 */
+ 'j', 'J', NOP, '\n', /* 83 */
+ 'k', 'K', NOP, '\013', /* 84 */
+ 'l', 'L', NOP, '\014', /* 85 */
+ C8('ö'),C8('Ö'),NOP, C8('ö'), /* 86 */
+ C8('ä'),C8('Ä'),NOP, C8('ä'), /* 87 */
+ '#', '\'', '`', '#', /* 88 */
+ ALL('\r') /* 89 */
+ ALL(BF(11)) /* 90 */
+ ALL(ST(3)) /* 91 */
+ ALL(RF(11)) /* 92 */
+ ALL(ST(4)) /* 93 */
+ ALL(BF(8)) /* 94 */
+ ALL(LF(9)) /* 95 */
+ ALL(RF(9)) /* 96 */
+ ALL(LF(10)) /* 97 */
+ ALL(SK(NUMLOCK)) /* 98 */
+ ALL(SK(LEFTSHIFT)) /* 99 */
+ 'y', 'Y', NOP, '\031', /* 100 */
+ 'x', 'X', NOP, '\030', /* 101 */
+ 'c', 'C', NOP, '\003', /* 102 */
+ 'v', 'V', NOP, '\026', /* 103 */
+ 'b', 'B', NOP, '\002', /* 104 */
+ 'n', 'N', NOP, '\016', /* 105 */
+ 'm', 'M', C8('µ'),'\r', /* 106 */
+ ',', ';', NOP, ',', /* 107 */
+ '.', ':', NOP, '.', /* 108 */
+ '-', '_', NOP, '\037', /* 109 */
+ ALL(SK(RIGHTSHIFT)) /* 110 */
+ ALL('\n') /* 111 */
+ ALL(RF(13)) /* 112 */
+ ALL(ST(2)) /* 113 */
+ ALL(RF(15)) /* 114 */
+ ALL(HOLE) /* 115 */
+ ALL(HOLE) /* 116 */
+ ALL(HOLE) /* 117 */
+ ALL(LF(16)) /* 118 */
+ ALL(SK(CAPSLOCK)) /* 119 */
+ ALL(BB(0)) /* 120 */
+ ' ', ' ', ' ', '\000', /* 121 */
+ ALL(BB(0)) /* 122 */
+ ALL(RF(15)) /* 123 */
+ '<', '>', '|', '<', /* 124 */
+ ALL(BF(14)) /* 125 */
+ ALL(ERROR) /* 126 */
+ ALL(IDLE) /* 127 */
diff --git a/sbin/kbd/tables/sparc/dk b/sbin/kbd/tables/sparc/dk
new file mode 100644
index 00000000000..448395fe2d6
--- /dev/null
+++ b/sbin/kbd/tables/sparc/dk
@@ -0,0 +1,163 @@
+/* $OpenBSD: dk,v 1.1 1999/07/18 17:21:11 maja Exp $ */
+
+/*
+ * Copyright (c) 1999 Mats O Jansson
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Mats O Jansson.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+ { "dk", "denmark", "type_4_layout_04" },
+/* unshift shift alt gr control */
+ ALL(HOLE) /* 0 */
+ ALL(BB(SYSTEMBIT)) /* 1 */
+ ALL(HOLE) /* 2 */
+ ALL(LF(2)) /* 3 */
+ ALL(HOLE) /* 4 */
+ ALL(TF(1)) /* 5 */
+ ALL(TF(2)) /* 6 */
+ ALL(TF(10)) /* 7 */
+ ALL(TF(3)) /* 8 */
+ ALL(TF(11)) /* 9 */
+ ALL(TF(4)) /* 10 */
+ ALL(TF(12)) /* 11 */
+ ALL(TF(5)) /* 12 */
+ ALL(COMPOSE) /* 13 */
+ ALL(TF(6)) /* 14 */
+ '~', '^', NOP, '\036', /* 15 */
+ ALL(TF(7)) /* 16 */
+ ALL(TF(8)) /* 17 */
+ ALL(TF(9)) /* 18 */
+ ALL(SK(ALT)) /* 19 */
+ ALL(HOLE) /* 20 */
+ ALL(RF(1)) /* 21 */
+ ALL(RF(2)) /* 22 */
+ ALL(RF(3)) /* 23 */
+ ALL(HOLE) /* 24 */
+ ALL(LF(3)) /* 25 */
+ ALL(LF(4)) /* 26 */
+ ALL(HOLE) /* 27 */
+ ALL(HOLE) /* 28 */
+ ALL('\033') /* 29 */
+ '1', '!', NOP, '1', /* 30 */
+ '2', '"', '@', '\000', /* 31 */
+ '3', '#', C8('£'),'3', /* 32 */
+ '4', C8('¤'),'$', '4', /* 33 */
+ '5', '%', NOP, '5', /* 34 */
+ '6', '&', NOP, '6', /* 35 */
+ '7', '/', '{', '7', /* 36 */
+ '8', '(', '[', '\033', /* 37 */
+ '9', ')', ']', '\035', /* 38 */
+ '0', '=', '}', '0', /* 39 */
+ '+', '?', NOP, '\037', /* 40 */
+ GR(4), GR(5), '|', GR(4), /* 41 */
+ '\'', '*', '`', '\036', /* 42 */
+ ALL('\b') /* 43 */
+ ALL(HOLE) /* 44 */
+ ALL(RF(4)) /* 45 */
+ ALL(RF(5)) /* 46 */
+ ALL(RF(6)) /* 47 */
+ ALL(BF(13)) /* 48 */
+ ALL(LF(5)) /* 49 */
+ ALL(BF(10)) /* 50 */
+ ALL(LF(6)) /* 51 */
+ ALL(HOLE) /* 52 */
+ ALL('\t') /* 53 */
+ 'q', 'Q', NOP, '\021', /* 54 */
+ 'w', 'W', NOP, '\027', /* 55 */
+ 'e', 'E', NOP, '\005', /* 56 */
+ 'r', 'R', NOP, '\022', /* 57 */
+ 't', 'T', NOP, '\024', /* 58 */
+ 'y', 'Y', NOP, '\031', /* 59 */
+ 'u', 'U', NOP, '\025', /* 60 */
+ 'i', 'I', NOP, '\t', /* 61 */
+ 'o', 'O', NOP, '\017', /* 62 */
+ 'p', 'P', NOP, '\020', /* 63 */
+ C8('å'),C8('Å'),NOP, C8('å'), /* 64 */
+ GR(0), GR(1), GR(2), GR(0), /* 65 */
+ ALL('\177') /* 66 */
+ ALL(SK(ALTGRAPH)) /* 67 */
+ ALL(RF(7)) /* 68 */
+ ALL(ST(1)) /* 69 */
+ ALL(RF(9)) /* 70 */
+ ALL(BF(15)) /* 71 */
+ ALL(LF(7)) /* 72 */
+ ALL(LF(8)) /* 73 */
+ ALL(HOLE) /* 74 */
+ ALL(HOLE) /* 75 */
+ ALL(SK(CAPSLOCK)) /* 76 */
+ 'a', 'A', NOP, '\001', /* 77 */
+ 's', 'S', NOP, '\023', /* 78 */
+ 'd', 'D', NOP, '\004', /* 79 */
+ 'f', 'F', NOP, '\006', /* 80 */
+ 'g', 'G', NOP, '\007', /* 81 */
+ 'h', 'H', NOP, '\b', /* 82 */
+ 'j', 'J', NOP, '\n', /* 83 */
+ 'k', 'K', NOP, '\013', /* 84 */
+ 'l', 'L', NOP, '\014', /* 85 */
+ C8('æ'),C8('Æ'),NOP, C8('æ'), /* 86 */
+ C8('ø'),C8('Ø'),NOP, C8('ø'), /* 87 */
+ C8('½'),C8('§'),NOP, C8('½'), /* 88 */
+ ALL('\r') /* 89 */
+ ALL(BF(11)) /* 90 */
+ ALL(ST(3)) /* 91 */
+ ALL(RF(11)) /* 92 */
+ ALL(ST(4)) /* 93 */
+ ALL(BF(8)) /* 94 */
+ ALL(LF(9)) /* 95 */
+ ALL(HOLE) /* 96 */
+ ALL(LF(10)) /* 97 */
+ ALL(SK(NUMLOCK)) /* 98 */
+ ALL(SK(LEFTSHIFT)) /* 99 */
+ 'z', 'Z', NOP, '\032', /* 100 */
+ 'x', 'X', NOP, '\030', /* 101 */
+ 'c', 'C', NOP, '\003', /* 102 */
+ 'v', 'V', NOP, '\026', /* 103 */
+ 'b', 'B', NOP, '\002', /* 104 */
+ 'n', 'N', NOP, '\016', /* 105 */
+ 'm', 'M', NOP, '\r', /* 106 */
+ ',', ';', NOP, ',', /* 107 */
+ '.', ':', NOP, '.', /* 108 */
+ '-', '_', NOP, '\037', /* 109 */
+ ALL(SK(RIGHTSHIFT)) /* 110 */
+ ALL('\n') /* 111 */
+ ALL(RF(13)) /* 112 */
+ ALL(ST(2)) /* 113 */
+ ALL(RF(15)) /* 114 */
+ ALL(HOLE) /* 115 */
+ ALL(HOLE) /* 116 */
+ ALL(HOLE) /* 117 */
+ ALL(LF(16)) /* 118 */
+ ALL(SK(LEFTCTRL)) /* 119 */
+ ALL(BB(0)) /* 120 */
+ ' ', ' ', ' ', '\000', /* 121 */
+ ALL(BB(0)) /* 122 */
+ ALL(HOLE) /* 123 */
+ '<', '>', '\\', '\034', /* 124 */
+ ALL(BF(14)) /* 125 */
+ ALL(ERROR) /* 126 */
+ ALL(IDLE) /* 127 */
diff --git a/sbin/kbd/tables/sparc/dk_5 b/sbin/kbd/tables/sparc/dk_5
new file mode 100644
index 00000000000..dfe5bc7142b
--- /dev/null
+++ b/sbin/kbd/tables/sparc/dk_5
@@ -0,0 +1,163 @@
+/* $OpenBSD: dk_5,v 1.1 1999/07/18 17:21:11 maja Exp $ */
+
+/*
+ * Copyright (c) 1999 Mats O Jansson
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Mats O Jansson.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+ { "dk_5", "denmark_5", "type_4_layout_24" },
+/* unshift shift alt gr control */
+ ALL(HOLE) /* 0 */
+ ALL(BB(SYSTEMBIT)) /* 1 */
+ ALL(HOLE) /* 2 */
+ ALL(LF(2)) /* 3 */
+ ALL(HOLE) /* 4 */
+ ALL(TF(1)) /* 5 */
+ ALL(TF(2)) /* 6 */
+ ALL(TF(10)) /* 7 */
+ ALL(TF(3)) /* 8 */
+ ALL(TF(11)) /* 9 */
+ ALL(TF(4)) /* 10 */
+ ALL(TF(12)) /* 11 */
+ ALL(TF(5)) /* 12 */
+ ALL(SK(ALTGRAPH)) /* 13 */
+ ALL(TF(6)) /* 14 */
+ ALL(HOLE) /* 15 */
+ ALL(TF(7)) /* 16 */
+ ALL(TF(8)) /* 17 */
+ ALL(TF(9)) /* 18 */
+ ALL(SK(ALT)) /* 19 */
+ ALL(ST(1)) /* 20 */
+ ALL(RF(1)) /* 21 */
+ ALL(RF(2)) /* 22 */
+ ALL(RF(3)) /* 23 */
+ ALL(ST(3)) /* 24 */
+ ALL(LF(3)) /* 25 */
+ ALL(LF(4)) /* 26 */
+ ALL(ST(2)) /* 27 */
+ ALL(ST(4)) /* 28 */
+ ALL('\033') /* 29 */
+ '1', '!', NOP, '1', /* 30 */
+ '2', '"', '@', '\000', /* 31 */
+ '3', '#', C8('£'),'3', /* 32 */
+ '4', C8('¤'),'$', '4', /* 33 */
+ '5', '%', '~', '5', /* 34 */
+ '6', '&', '^', '\036', /* 35 */
+ '7', '/', '{', '7', /* 36 */
+ '8', '(', '[', '\033', /* 37 */
+ '9', ')', ']', '\035', /* 38 */
+ '0', '=', '}', '0', /* 39 */
+ '+', '?', NOP, '\037', /* 40 */
+ GR(4), GR(5), '|', GR(4), /* 41 */
+ C8('½'),C8('§'),NOP, C8('½'), /* 42 */
+ ALL('\b') /* 43 */
+ ALL(BF(8)) /* 44 */
+ ALL(RF(4)) /* 45 */
+ ALL(RF(5)) /* 46 */
+ ALL(RF(6)) /* 47 */
+ ALL(BF(13)) /* 48 */
+ ALL(LF(5)) /* 49 */
+ ALL(BF(10)) /* 50 */
+ ALL(LF(6)) /* 51 */
+ ALL(RF(7)) /* 52 */
+ ALL('\t') /* 53 */
+ 'q', 'Q', NOP, '\021', /* 54 */
+ 'w', 'W', NOP, '\027', /* 55 */
+ 'e', 'E', NOP, '\005', /* 56 */
+ 'r', 'R', NOP, '\022', /* 57 */
+ 't', 'T', NOP, '\024', /* 58 */
+ 'y', 'Y', NOP, '\031', /* 59 */
+ 'u', 'U', NOP, '\025', /* 60 */
+ 'i', 'I', NOP, '\t', /* 61 */
+ 'o', 'O', NOP, '\017', /* 62 */
+ 'p', 'P', NOP, '\020', /* 63 */
+ C8('å'),C8('Å'),NOP, C8('å'), /* 64 */
+ GR(0), GR(1), GR(2), GR(0), /* 65 */
+ ALL('\177') /* 66 */
+ ALL(COMPOSE) /* 67 */
+ ALL(RF(7)) /* 68 */
+ ALL(ST(1)) /* 69 */
+ ALL(RF(9)) /* 70 */
+ ALL(BF(15)) /* 71 */
+ ALL(LF(7)) /* 72 */
+ ALL(LF(8)) /* 73 */
+ ALL(RF(13)) /* 74 */
+ ALL(HOLE) /* 75 */
+ ALL(SK(LEFTCTRL)) /* 76 */
+ 'a', 'A', NOP, '\001', /* 77 */
+ 's', 'S', NOP, '\023', /* 78 */
+ 'd', 'D', NOP, '\004', /* 79 */
+ 'f', 'F', NOP, '\006', /* 80 */
+ 'g', 'G', NOP, '\007', /* 81 */
+ 'h', 'H', NOP, '\b', /* 82 */
+ 'j', 'J', NOP, '\n', /* 83 */
+ 'k', 'K', NOP, '\013', /* 84 */
+ 'l', 'L', NOP, '\014', /* 85 */
+ C8('æ'),C8('Æ'),NOP, C8('æ'), /* 86 */
+ C8('ø'),C8('Ø'),NOP, C8('ø'), /* 87 */
+ '\'', '*', '`', '\'', /* 88 */
+ ALL('\r') /* 89 */
+ ALL(BF(11)) /* 90 */
+ ALL(ST(3)) /* 91 */
+ ALL(RF(11)) /* 92 */
+ ALL(ST(4)) /* 93 */
+ ALL(BF(8)) /* 94 */
+ ALL(LF(9)) /* 95 */
+ ALL(RF(9)) /* 96 */
+ ALL(LF(10)) /* 97 */
+ ALL(SK(NUMLOCK)) /* 98 */
+ ALL(SK(LEFTSHIFT)) /* 99 */
+ 'z', 'Z', NOP, '\032', /* 100 */
+ 'x', 'X', NOP, '\030', /* 101 */
+ 'c', 'C', NOP, '\003', /* 102 */
+ 'v', 'V', NOP, '\026', /* 103 */
+ 'b', 'B', NOP, '\002', /* 104 */
+ 'n', 'N', NOP, '\016', /* 105 */
+ 'm', 'M', NOP, '\r', /* 106 */
+ ',', ';', NOP, ',', /* 107 */
+ '.', ':', NOP, '.', /* 108 */
+ '-', '_', NOP, '\037', /* 109 */
+ ALL(SK(RIGHTSHIFT)) /* 110 */
+ ALL('\n') /* 111 */
+ ALL(RF(13)) /* 112 */
+ ALL(ST(2)) /* 113 */
+ ALL(RF(15)) /* 114 */
+ ALL(HOLE) /* 115 */
+ ALL(HOLE) /* 116 */
+ ALL(HOLE) /* 117 */
+ ALL(LF(16)) /* 118 */
+ ALL(SK(CAPSLOCK)) /* 119 */
+ ALL(BB(0)) /* 120 */
+ ' ', ' ', ' ', '\000', /* 121 */
+ ALL(BB(0)) /* 122 */
+ ALL(RF(15)) /* 123 */
+ '<', '>', '\\', '\034', /* 124 */
+ ALL(BF(14)) /* 125 */
+ ALL(ERROR) /* 126 */
+ ALL(IDLE) /* 127 */
diff --git a/sbin/kbd/tables/sparc/nl b/sbin/kbd/tables/sparc/nl
new file mode 100644
index 00000000000..4ab272f8328
--- /dev/null
+++ b/sbin/kbd/tables/sparc/nl
@@ -0,0 +1,163 @@
+/* $OpenBSD: nl,v 1.1 1999/07/18 17:21:12 maja Exp $ */
+
+/*
+ * Copyright (c) 1999 Mats O Jansson
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Mats O Jansson.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+ { "nl", "netherlands", "type_4_layout_07" },
+/* unshift shift alt gr control */
+ ALL(HOLE) /* 0 */
+ ALL(BB(SYSTEMBIT)) /* 1 */
+ ALL(HOLE) /* 2 */
+ ALL(LF(2)) /* 3 */
+ ALL(HOLE) /* 4 */
+ ALL(TF(1)) /* 5 */
+ ALL(TF(2)) /* 6 */
+ ALL(TF(10)) /* 7 */
+ ALL(TF(3)) /* 8 */
+ ALL(TF(11)) /* 9 */
+ ALL(TF(4)) /* 10 */
+ ALL(TF(12)) /* 11 */
+ ALL(TF(5)) /* 12 */
+ ALL(SK(ALTGRAPH)) /* 13 */
+ ALL(TF(6)) /* 14 */
+ ALL(HOLE) /* 15 */
+ ALL(TF(7)) /* 16 */
+ ALL(TF(8)) /* 17 */
+ ALL(TF(9)) /* 18 */
+ ALL(SK(ALT)) /* 19 */
+ ALL(ST(1)) /* 20 */
+ ALL(RF(1)) /* 21 */
+ ALL(RF(2)) /* 22 */
+ ALL(RF(3)) /* 23 */
+ ALL(ST(3)) /* 24 */
+ ALL(LF(3)) /* 25 */
+ ALL(LF(4)) /* 26 */
+ ALL(ST(2)) /* 27 */
+ ALL(ST(4)) /* 28 */
+ ALL('\033') /* 29 */
+ '1', '!', C8('¹'),'1', /* 30 */
+ '2', '"', C8('²'),'2', /* 31 */
+ '3', '#', C8('³'),'3', /* 32 */
+ '4', '$', C8('¼'),'4', /* 33 */
+ '5', '%', C8('½'),'5', /* 34 */
+ '6', '&', C8('¾'),'6', /* 35 */
+ '7', '_', C8('£'),'\037', /* 36 */
+ '8', '(', '{', '8', /* 37 */
+ '9', ')', '}', '\035', /* 38 */
+ '0', '\'', '`', '0', /* 39 */
+ '/', '?', '\\', '\034', /* 40 */
+ C8('°'),GR(2), GR(3), C8('°'), /* 41 */
+ '@', C8('§'),C8('¬'),'\000', /* 42 */
+ ALL('\b') /* 43 */
+ ALL(BF(8)) /* 44 */
+ ALL(RF(4)) /* 45 */
+ ALL(RF(5)) /* 46 */
+ ALL(RF(6)) /* 47 */
+ ALL(BF(13)) /* 48 */
+ ALL(LF(5)) /* 49 */
+ ALL(BF(10)) /* 50 */
+ ALL(LF(6)) /* 51 */
+ ALL(RF(7)) /* 52 */
+ ALL('\t') /* 53 */
+ 'q', 'Q', NOP, '\021', /* 54 */
+ 'w', 'W', NOP, '\027', /* 55 */
+ 'e', 'E', NOP, '\005', /* 56 */
+ 'r', 'R', NOP, '\022', /* 57 */
+ 't', 'T', NOP, '\024', /* 58 */
+ 'y', 'Y', NOP, '\031', /* 59 */
+ 'u', 'U', NOP, '\025', /* 60 */
+ 'i', 'I', NOP, '\t', /* 61 */
+ 'o', 'O', NOP, '\017', /* 62 */
+ 'p', 'P', NOP, '\020', /* 63 */
+ GR(0), GR(1), NOP, GR(0), /* 64 */
+ '*', '|', '~', '*', /* 65 */
+ ALL('\177') /* 66 */
+ ALL(COMPOSE) /* 67 */
+ ALL(RF(7)) /* 68 */
+ ALL(ST(1)) /* 69 */
+ ALL(RF(9)) /* 70 */
+ ALL(BF(15)) /* 71 */
+ ALL(LF(7)) /* 72 */
+ ALL(LF(8)) /* 73 */
+ ALL(RF(13)) /* 74 */
+ ALL(HOLE) /* 75 */
+ ALL(SK(LEFTCTRL)) /* 76 */
+ 'a', 'A', NOP, '\001', /* 77 */
+ 's', 'S', C8('ß'),'\023', /* 78 */
+ 'd', 'D', NOP, '\004', /* 79 */
+ 'f', 'F', NOP, '\006', /* 80 */
+ 'g', 'G', NOP, '\007', /* 81 */
+ 'h', 'H', NOP, '\b', /* 82 */
+ 'j', 'J', NOP, '\n', /* 83 */
+ 'k', 'K', NOP, '\013', /* 84 */
+ 'l', 'L', NOP, '\014', /* 85 */
+ '+', C8('±'),NOP, '+', /* 86 */
+ GR(4), GR(5), NOP, GR(4), /* 87 */
+ '<', '>', '^', '\036', /* 88 */
+ ALL('\r') /* 89 */
+ ALL(BF(11)) /* 90 */
+ ALL(ST(3)) /* 91 */
+ ALL(RF(11)) /* 92 */
+ ALL(ST(4)) /* 93 */
+ ALL(BF(8)) /* 94 */
+ ALL(LF(9)) /* 95 */
+ ALL(RF(9)) /* 96 */
+ ALL(LF(10)) /* 97 */
+ ALL(SK(NUMLOCK)) /* 98 */
+ ALL(SK(LEFTSHIFT)) /* 99 */
+ 'z', 'Z', C8('«'),'\032', /* 100 */
+ 'x', 'X', C8('»'),'\030', /* 101 */
+ 'c', 'C', C8('¢'),'\003', /* 102 */
+ 'v', 'V', NOP, '\026', /* 103 */
+ 'b', 'B', NOP, '\002', /* 104 */
+ 'n', 'N', NOP, '\016', /* 105 */
+ 'm', 'M', C8('µ'),'\r', /* 106 */
+ ',', ';', NOP, ',', /* 107 */
+ '.', ':', C8('·'),'.', /* 108 */
+ '-', '=', NOP, '\037', /* 109 */
+ ALL(SK(RIGHTSHIFT)) /* 110 */
+ ALL('\n') /* 111 */
+ ALL(RF(13)) /* 112 */
+ ALL(ST(2)) /* 113 */
+ ALL(RF(15)) /* 114 */
+ ALL(HOLE) /* 115 */
+ ALL(HOLE) /* 116 */
+ ALL(HOLE) /* 117 */
+ ALL(LF(16)) /* 118 */
+ ALL(SK(CAPSLOCK)) /* 119 */
+ ALL(BB(0)) /* 120 */
+ ' ', ' ', ' ', '\000', /* 121 */
+ ALL(BB(0)) /* 122 */
+ ALL(RF(15)) /* 123 */
+ ']', '[', C8('¦'),'\033', /* 124 */
+ ALL(BF(14)) /* 125 */
+ ALL(ERROR) /* 126 */
+ ALL(IDLE) /* 127 */
diff --git a/sbin/kbd/tables/sparc/nl_5 b/sbin/kbd/tables/sparc/nl_5
new file mode 100644
index 00000000000..a5be52ca7d3
--- /dev/null
+++ b/sbin/kbd/tables/sparc/nl_5
@@ -0,0 +1,163 @@
+/* $OpenBSD: nl_5,v 1.1 1999/07/18 17:21:12 maja Exp $ */
+
+/*
+ * Copyright (c) 1999 Mats O Jansson
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Mats O Jansson.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+ { "nl_5", "netherlands_5", "type_4_layout_27" },
+/* unshift shift alt gr control */
+ ALL(HOLE) /* 0 */
+ ALL(BB(SYSTEMBIT)) /* 1 */
+ ALL(HOLE) /* 2 */
+ ALL(LF(2)) /* 3 */
+ ALL(HOLE) /* 4 */
+ ALL(TF(1)) /* 5 */
+ ALL(TF(2)) /* 6 */
+ ALL(TF(10)) /* 7 */
+ ALL(TF(3)) /* 8 */
+ ALL(TF(11)) /* 9 */
+ ALL(TF(4)) /* 10 */
+ ALL(TF(12)) /* 11 */
+ ALL(TF(5)) /* 12 */
+ ALL(SK(ALTGRAPH)) /* 13 */
+ ALL(TF(6)) /* 14 */
+ ALL(HOLE) /* 15 */
+ ALL(TF(7)) /* 16 */
+ ALL(TF(8)) /* 17 */
+ ALL(TF(9)) /* 18 */
+ ALL(SK(ALT)) /* 19 */
+ ALL(ST(1)) /* 20 */
+ ALL(RF(1)) /* 21 */
+ ALL(RF(2)) /* 22 */
+ ALL(RF(3)) /* 23 */
+ ALL(ST(3)) /* 24 */
+ ALL(LF(3)) /* 25 */
+ ALL(LF(4)) /* 26 */
+ ALL(ST(2)) /* 27 */
+ ALL(ST(4)) /* 28 */
+ ALL('\033') /* 29 */
+ '1', '!', C8('¹'),'1', /* 30 */
+ '2', '"', C8('²'),'2', /* 31 */
+ '3', '#', C8('³'),'3', /* 32 */
+ '4', '$', C8('¼'),'4', /* 33 */
+ '5', '%', C8('½'),'5', /* 34 */
+ '6', '&', C8('¾'),'6', /* 35 */
+ '7', '_', C8('£'),'\037', /* 36 */
+ '8', '(', '{', '8', /* 37 */
+ '9', ')', '}', '\035', /* 38 */
+ '0', '\'', '`', '0', /* 39 */
+ '/', '?', '\\', '\034', /* 40 */
+ C8('°'),GR(2), GR(3), C8('°'), /* 41 */
+ '@', C8('§'),C8('¬'),'\000', /* 42 */
+ ALL('\b') /* 43 */
+ ALL(BF(8)) /* 44 */
+ ALL(RF(4)) /* 45 */
+ ALL(RF(5)) /* 46 */
+ ALL(RF(6)) /* 47 */
+ ALL(BF(13)) /* 48 */
+ ALL(LF(5)) /* 49 */
+ ALL(BF(10)) /* 50 */
+ ALL(LF(6)) /* 51 */
+ ALL(RF(7)) /* 52 */
+ ALL('\t') /* 53 */
+ 'q', 'Q', NOP, '\021', /* 54 */
+ 'w', 'W', NOP, '\027', /* 55 */
+ 'e', 'E', NOP, '\005', /* 56 */
+ 'r', 'R', NOP, '\022', /* 57 */
+ 't', 'T', NOP, '\024', /* 58 */
+ 'y', 'Y', NOP, '\031', /* 59 */
+ 'u', 'U', NOP, '\025', /* 60 */
+ 'i', 'I', NOP, '\t', /* 61 */
+ 'o', 'O', NOP, '\017', /* 62 */
+ 'p', 'P', NOP, '\020', /* 63 */
+ GR(0), GR(1), NOP, GR(0), /* 64 */
+ '*', '|', '~', '*', /* 65 */
+ ALL('\177') /* 66 */
+ ALL(COMPOSE) /* 67 */
+ ALL(RF(7)) /* 68 */
+ ALL(ST(1)) /* 69 */
+ ALL(RF(9)) /* 70 */
+ ALL(BF(15)) /* 71 */
+ ALL(LF(7)) /* 72 */
+ ALL(LF(8)) /* 73 */
+ ALL(RF(13)) /* 74 */
+ ALL(HOLE) /* 75 */
+ ALL(SK(LEFTCTRL)) /* 76 */
+ 'a', 'A', NOP, '\001', /* 77 */
+ 's', 'S', C8('ß'),'\023', /* 78 */
+ 'd', 'D', NOP, '\004', /* 79 */
+ 'f', 'F', NOP, '\006', /* 80 */
+ 'g', 'G', NOP, '\007', /* 81 */
+ 'h', 'H', NOP, '\b', /* 82 */
+ 'j', 'J', NOP, '\n', /* 83 */
+ 'k', 'K', NOP, '\013', /* 84 */
+ 'l', 'L', NOP, '\014', /* 85 */
+ '+', C8('±'),NOP, '+', /* 86 */
+ GR(4), GR(5), NOP, GR(4), /* 87 */
+ '<', '>', '^', '\036', /* 88 */
+ ALL('\r') /* 89 */
+ ALL(BF(11)) /* 90 */
+ ALL(ST(3)) /* 91 */
+ ALL(RF(11)) /* 92 */
+ ALL(ST(4)) /* 93 */
+ ALL(BF(8)) /* 94 */
+ ALL(LF(9)) /* 95 */
+ ALL(RF(9)) /* 96 */
+ ALL(LF(10)) /* 97 */
+ ALL(SK(NUMLOCK)) /* 98 */
+ ALL(SK(LEFTSHIFT)) /* 99 */
+ 'z', 'Z', C8('«'),'\032', /* 100 */
+ 'x', 'X', C8('»'),'\030', /* 101 */
+ 'c', 'C', C8('¢'),'\003', /* 102 */
+ 'v', 'V', NOP, '\026', /* 103 */
+ 'b', 'B', NOP, '\002', /* 104 */
+ 'n', 'N', NOP, '\016', /* 105 */
+ 'm', 'M', C8('µ'),'\r', /* 106 */
+ ',', ';', NOP, ',', /* 107 */
+ '.', ':', C8('·'),'.', /* 108 */
+ '-', '=', NOP, '\037', /* 109 */
+ ALL(SK(RIGHTSHIFT)) /* 110 */
+ ALL('\n') /* 111 */
+ ALL(RF(13)) /* 112 */
+ ALL(ST(2)) /* 113 */
+ ALL(RF(15)) /* 114 */
+ ALL(HOLE) /* 115 */
+ ALL(HOLE) /* 116 */
+ ALL(HOLE) /* 117 */
+ ALL(LF(16)) /* 118 */
+ ALL(SK(CAPSLOCK)) /* 119 */
+ ALL(BB(0)) /* 120 */
+ ' ', ' ', ' ', '\000', /* 121 */
+ ALL(BB(0)) /* 122 */
+ ALL(RF(15)) /* 123 */
+ ']', '[', C8('¦'),'\033', /* 124 */
+ ALL(BF(14)) /* 125 */
+ ALL(ERROR) /* 126 */
+ ALL(IDLE) /* 127 */
diff --git a/sbin/kbd/tables/sparc/no b/sbin/kbd/tables/sparc/no
new file mode 100644
index 00000000000..48debacfa67
--- /dev/null
+++ b/sbin/kbd/tables/sparc/no
@@ -0,0 +1,163 @@
+/* $OpenBSD: no,v 1.1 1999/07/18 17:21:12 maja Exp $ */
+
+/*
+ * Copyright (c) 1999 Mats O Jansson
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Mats O Jansson.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+ { "no", "norway", "type_4_layout_08" },
+/* unshift shift alt gr control */
+ ALL(HOLE) /* 0 */
+ ALL(BB(SYSTEMBIT)) /* 1 */
+ ALL(HOLE) /* 2 */
+ ALL(LF(2)) /* 3 */
+ ALL(HOLE) /* 4 */
+ ALL(TF(1)) /* 5 */
+ ALL(TF(2)) /* 6 */
+ ALL(TF(10)) /* 7 */
+ ALL(TF(3)) /* 8 */
+ ALL(TF(11)) /* 9 */
+ ALL(TF(4)) /* 10 */
+ ALL(TF(12)) /* 11 */
+ ALL(TF(5)) /* 12 */
+ ALL(SK(ALTGRAPH)) /* 13 */
+ ALL(TF(6)) /* 14 */
+ '~', '^', NOP, '\036', /* 15 */
+ ALL(TF(7)) /* 16 */
+ ALL(TF(8)) /* 17 */
+ ALL(TF(9)) /* 18 */
+ ALL(SK(ALT)) /* 19 */
+ ALL(HOLE) /* 20 */
+ ALL(RF(1)) /* 21 */
+ ALL(RF(2)) /* 22 */
+ ALL(RF(3)) /* 23 */
+ ALL(HOLE) /* 24 */
+ ALL(LF(3)) /* 25 */
+ ALL(LF(4)) /* 26 */
+ ALL(HOLE) /* 27 */
+ ALL(HOLE) /* 28 */
+ ALL('\033') /* 29 */
+ '1', '!', NOP, '1', /* 30 */
+ '2', '"', '@', '\000', /* 31 */
+ '3', '#', C8('£'),'3', /* 32 */
+ '4', C8('¤'),'$', '4', /* 33 */
+ '5', '%', NOP, '5', /* 34 */
+ '6', '&', NOP, '6', /* 35 */
+ '7', '/', '{', '7', /* 36 */
+ '8', '(', '[', '\033', /* 37 */
+ '9', ')', ']', '\035', /* 38 */
+ '0', '=', '}', '0', /* 39 */
+ '+', '?', NOP, '+', /* 40 */
+ '\\', GR(5), GR(4), '\034', /* 41 */
+ '\'', '*', '`', '\'', /* 42 */
+ ALL('\b') /* 43 */
+ ALL(HOLE) /* 44 */
+ ALL(RF(4)) /* 45 */
+ ALL(RF(5)) /* 46 */
+ ALL(RF(6)) /* 47 */
+ ALL(BF(13)) /* 48 */
+ ALL(LF(5)) /* 49 */
+ ALL(BF(10)) /* 50 */
+ ALL(LF(6)) /* 51 */
+ ALL(HOLE) /* 52 */
+ ALL('\t') /* 53 */
+ 'q', 'Q', NOP, '\021', /* 54 */
+ 'w', 'W', NOP, '\027', /* 55 */
+ 'e', 'E', NOP, '\005', /* 56 */
+ 'r', 'R', NOP, '\022', /* 57 */
+ 't', 'T', NOP, '\024', /* 58 */
+ 'y', 'Y', NOP, '\031', /* 59 */
+ 'u', 'U', NOP, '\025', /* 60 */
+ 'i', 'I', NOP, '\t', /* 61 */
+ 'o', 'O', NOP, '\017', /* 62 */
+ 'p', 'P', NOP, '\020', /* 63 */
+ C8('å'),C8('Å'),NOP, C8('å'), /* 64 */
+ GR(0), GR(1), GR(2), GR(0), /* 65 */
+ ALL('\177') /* 66 */
+ ALL(COMPOSE) /* 67 */
+ ALL(RF(7)) /* 68 */
+ ALL(ST(1)) /* 69 */
+ ALL(RF(9)) /* 70 */
+ ALL(BF(15)) /* 71 */
+ ALL(LF(7)) /* 72 */
+ ALL(LF(8)) /* 73 */
+ ALL(HOLE) /* 74 */
+ ALL(HOLE) /* 75 */
+ ALL(SK(CAPSLOCK)) /* 76 */
+ 'a', 'A', NOP, '\001', /* 77 */
+ 's', 'S', NOP, '\023', /* 78 */
+ 'd', 'D', NOP, '\004', /* 79 */
+ 'f', 'F', NOP, '\006', /* 80 */
+ 'g', 'G', NOP, '\007', /* 81 */
+ 'h', 'H', NOP, '\b', /* 82 */
+ 'j', 'J', NOP, '\n', /* 83 */
+ 'k', 'K', NOP, '\013', /* 84 */
+ 'l', 'L', NOP, '\014', /* 85 */
+ C8('ø'),C8('Ø'),NOP, C8('ø'), /* 86 */
+ C8('æ'),C8('Æ'),NOP, C8('æ'), /* 87 */
+ '|', C8('§'),NOP, '|', /* 88 */
+ ALL('\r') /* 89 */
+ ALL(BF(11)) /* 90 */
+ ALL(ST(3)) /* 91 */
+ ALL(RF(11)) /* 92 */
+ ALL(ST(4)) /* 93 */
+ ALL(BF(8)) /* 94 */
+ ALL(LF(9)) /* 95 */
+ ALL(HOLE) /* 96 */
+ ALL(LF(10)) /* 97 */
+ ALL(SK(NUMLOCK)) /* 98 */
+ ALL(SK(LEFTSHIFT)) /* 99 */
+ 'z', 'Z', NOP, '\032', /* 100 */
+ 'x', 'X', NOP, '\030', /* 101 */
+ 'c', 'C', NOP, '\003', /* 102 */
+ 'v', 'V', NOP, '\026', /* 103 */
+ 'b', 'B', NOP, '\002', /* 104 */
+ 'n', 'N', NOP, '\016', /* 105 */
+ 'm', 'M', NOP, '\r', /* 106 */
+ ',', ';', NOP, ',', /* 107 */
+ '.', ':', NOP, '.', /* 108 */
+ '-', '_', NOP, '\037', /* 109 */
+ ALL(SK(RIGHTSHIFT)) /* 110 */
+ ALL('\n') /* 111 */
+ ALL(RF(13)) /* 112 */
+ ALL(ST(2)) /* 113 */
+ ALL(RF(15)) /* 114 */
+ ALL(HOLE) /* 115 */
+ ALL(HOLE) /* 116 */
+ ALL(HOLE) /* 117 */
+ ALL(LF(16)) /* 118 */
+ ALL(SK(LEFTCTRL)) /* 119 */
+ ALL(BB(0)) /* 120 */
+ ' ', ' ', ' ', '\000', /* 121 */
+ ALL(BB(0)) /* 122 */
+ ALL(HOLE) /* 123 */
+ '<', '>', NOP, '<', /* 124 */
+ ALL(BF(14)) /* 125 */
+ ALL(ERROR) /* 126 */
+ ALL(IDLE) /* 127 */
diff --git a/sbin/kbd/tables/sparc/no_5 b/sbin/kbd/tables/sparc/no_5
new file mode 100644
index 00000000000..15609619fbc
--- /dev/null
+++ b/sbin/kbd/tables/sparc/no_5
@@ -0,0 +1,163 @@
+/* $OpenBSD: no_5,v 1.1 1999/07/18 17:21:12 maja Exp $ */
+
+/*
+ * Copyright (c) 1999 Mats O Jansson
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Mats O Jansson.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+ { "no_5", "norway_5", "type_4_layout_28" },
+/* unshift shift alt gr control */
+ ALL(HOLE) /* 0 */
+ ALL(BB(SYSTEMBIT)) /* 1 */
+ ALL(HOLE) /* 2 */
+ ALL(LF(2)) /* 3 */
+ ALL(HOLE) /* 4 */
+ ALL(TF(1)) /* 5 */
+ ALL(TF(2)) /* 6 */
+ ALL(TF(10)) /* 7 */
+ ALL(TF(3)) /* 8 */
+ ALL(TF(11)) /* 9 */
+ ALL(TF(4)) /* 10 */
+ ALL(TF(12)) /* 11 */
+ ALL(TF(5)) /* 12 */
+ ALL(SK(ALTGRAPH)) /* 13 */
+ ALL(TF(6)) /* 14 */
+ ALL(HOLE) /* 15 */
+ ALL(TF(7)) /* 16 */
+ ALL(TF(8)) /* 17 */
+ ALL(TF(9)) /* 18 */
+ ALL(SK(ALT)) /* 19 */
+ ALL(ST(1)) /* 20 */
+ ALL(RF(1)) /* 21 */
+ ALL(RF(2)) /* 22 */
+ ALL(RF(3)) /* 23 */
+ ALL(ST(3)) /* 24 */
+ ALL(LF(3)) /* 25 */
+ ALL(LF(4)) /* 26 */
+ ALL(ST(2)) /* 27 */
+ ALL(ST(4)) /* 28 */
+ ALL('\033') /* 29 */
+ '1', '!', NOP, '1', /* 30 */
+ '2', '"', '@', '\000', /* 31 */
+ '3', '#', C8('£'),'3', /* 32 */
+ '4', C8('¤'),'$', '4', /* 33 */
+ '5', '%', '~', '5', /* 34 */
+ '6', '&', '^', '\036', /* 35 */
+ '7', '/', '{', '7', /* 36 */
+ '8', '(', '[', '\033', /* 37 */
+ '9', ')', ']', '\035', /* 38 */
+ '0', '=', '}', '0', /* 39 */
+ '+', '?', NOP, '+', /* 40 */
+ '\\', GR(5), GR(4), '\034', /* 41 */
+ '|', C8('§'),NOP, '|', /* 42 */
+ ALL('\b') /* 43 */
+ ALL(BF(8)) /* 44 */
+ ALL(RF(4)) /* 45 */
+ ALL(RF(5)) /* 46 */
+ ALL(RF(6)) /* 47 */
+ ALL(BF(13)) /* 48 */
+ ALL(LF(5)) /* 49 */
+ ALL(BF(10)) /* 50 */
+ ALL(LF(6)) /* 51 */
+ ALL(RF(7)) /* 52 */
+ ALL('\t') /* 53 */
+ 'q', 'Q', NOP, '\021', /* 54 */
+ 'w', 'W', NOP, '\027', /* 55 */
+ 'e', 'E', NOP, '\005', /* 56 */
+ 'r', 'R', NOP, '\022', /* 57 */
+ 't', 'T', NOP, '\024', /* 58 */
+ 'y', 'Y', NOP, '\031', /* 59 */
+ 'u', 'U', NOP, '\025', /* 60 */
+ 'i', 'I', NOP, '\t', /* 61 */
+ 'o', 'O', NOP, '\017', /* 62 */
+ 'p', 'P', NOP, '\020', /* 63 */
+ C8('å'),C8('Å'),NOP, C8('å'), /* 64 */
+ GR(0), GR(1), GR(2), '\036', /* 65 */
+ ALL('\177') /* 66 */
+ ALL(COMPOSE) /* 67 */
+ ALL(RF(7)) /* 68 */
+ ALL(ST(1)) /* 69 */
+ ALL(RF(9)) /* 70 */
+ ALL(BF(15)) /* 71 */
+ ALL(LF(7)) /* 72 */
+ ALL(LF(8)) /* 73 */
+ ALL(RF(13)) /* 74 */
+ ALL(HOLE) /* 75 */
+ ALL(SK(LEFTCTRL)) /* 76 */
+ 'a', 'A', NOP, '\001', /* 77 */
+ 's', 'S', NOP, '\023', /* 78 */
+ 'd', 'D', NOP, '\004', /* 79 */
+ 'f', 'F', NOP, '\006', /* 80 */
+ 'g', 'G', NOP, '\007', /* 81 */
+ 'h', 'H', NOP, '\b', /* 82 */
+ 'j', 'J', NOP, '\n', /* 83 */
+ 'k', 'K', NOP, '\013', /* 84 */
+ 'l', 'L', NOP, '\014', /* 85 */
+ C8('ø'),C8('Ø'),NOP, C8('ø'), /* 86 */
+ C8('æ'),C8('Æ'),NOP, C8('æ'), /* 87 */
+ '\'', '*', '`', '\'', /* 88 */
+ ALL('\r') /* 89 */
+ ALL(BF(11)) /* 90 */
+ ALL(ST(3)) /* 91 */
+ ALL(RF(11)) /* 92 */
+ ALL(ST(4)) /* 93 */
+ ALL(BF(8)) /* 94 */
+ ALL(LF(9)) /* 95 */
+ ALL(RF(9)) /* 96 */
+ ALL(LF(10)) /* 97 */
+ ALL(SK(NUMLOCK)) /* 98 */
+ ALL(SK(LEFTSHIFT)) /* 99 */
+ 'z', 'Z', NOP, '\032', /* 100 */
+ 'x', 'X', NOP, '\030', /* 101 */
+ 'c', 'C', NOP, '\003', /* 102 */
+ 'v', 'V', NOP, '\026', /* 103 */
+ 'b', 'B', NOP, '\002', /* 104 */
+ 'n', 'N', NOP, '\016', /* 105 */
+ 'm', 'M', NOP, '\r', /* 106 */
+ ',', ';', NOP, ',', /* 107 */
+ '.', ':', NOP, '.', /* 108 */
+ '-', '_', NOP, '\037', /* 109 */
+ ALL(SK(RIGHTSHIFT)) /* 110 */
+ ALL('\n') /* 111 */
+ ALL(RF(13)) /* 112 */
+ ALL(ST(2)) /* 113 */
+ ALL(RF(15)) /* 114 */
+ ALL(HOLE) /* 115 */
+ ALL(HOLE) /* 116 */
+ ALL(HOLE) /* 117 */
+ ALL(LF(16)) /* 118 */
+ ALL(SK(CAPSLOCK)) /* 119 */
+ ALL(BB(0)) /* 120 */
+ ' ', ' ', ' ', '\000', /* 121 */
+ ALL(BB(0)) /* 122 */
+ ALL(RF(15)) /* 123 */
+ '<', '>', NOP, '<', /* 124 */
+ ALL(BF(14)) /* 125 */
+ ALL(ERROR) /* 126 */
+ ALL(IDLE) /* 127 */
diff --git a/sbin/kbd/tables/sparc/se_5 b/sbin/kbd/tables/sparc/se_5
new file mode 100644
index 00000000000..17be90bb249
--- /dev/null
+++ b/sbin/kbd/tables/sparc/se_5
@@ -0,0 +1,163 @@
+/* $OpenBSD: se_5,v 1.1 1999/07/18 17:21:12 maja Exp $ */
+
+/*
+ * Copyright (c) 1999 Mats O Jansson
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Mats O Jansson.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+ { "se_5", "sweden_5", "type_4_layout_2b" },
+/* unshift shift alt gr control */
+ ALL(HOLE) /* 0 */
+ ALL(BB(SYSTEMBIT)) /* 1 */
+ ALL(HOLE) /* 2 */
+ ALL(LF(2)) /* 3 */
+ ALL(HOLE) /* 4 */
+ ALL(TF(1)) /* 5 */
+ ALL(TF(2)) /* 6 */
+ ALL(TF(10)) /* 7 */
+ ALL(TF(3)) /* 8 */
+ ALL(TF(11)) /* 9 */
+ ALL(TF(4)) /* 10 */
+ ALL(TF(12)) /* 11 */
+ ALL(TF(5)) /* 12 */
+ ALL(SK(ALTGRAPH)) /* 13 */
+ ALL(TF(6)) /* 14 */
+ '~', '^', NOP, '\036', /* 15 */
+ ALL(TF(7)) /* 16 */
+ ALL(TF(8)) /* 17 */
+ ALL(TF(9)) /* 18 */
+ ALL(SK(ALT)) /* 19 */
+ ALL(ST(1)) /* 20 */
+ ALL(RF(1)) /* 21 */
+ ALL(RF(2)) /* 22 */
+ ALL(RF(3)) /* 23 */
+ ALL(ST(3)) /* 24 */
+ ALL(LF(3)) /* 25 */
+ ALL(LF(4)) /* 26 */
+ ALL(ST(2)) /* 27 */
+ ALL(ST(4)) /* 28 */
+ ALL('\033') /* 29 */
+ '1', '!', NOP, '1', /* 30 */
+ '2', '"', '@', '\000', /* 31 */
+ '3', '#', C8('£'),'3', /* 32 */
+ '4', C8('¤'),'$', '4', /* 33 */
+ '5', '%', NOP, '5', /* 34 */
+ '6', '&', NOP, '6', /* 35 */
+ '7', '/', '{', '7', /* 36 */
+ '8', '(', '[', '\033', /* 37 */
+ '9', ')', ']', '\035', /* 38 */
+ '0', '=', '}', '0', /* 39 */
+ '+', '?', '\\', '\034', /* 40 */
+ GR(4), GR(5), NOP, GR(4), /* 41 */
+ C8('§'),C8('½'),NOP, C8('§'), /* 42 */
+ ALL('\b') /* 43 */
+ ALL(BF(8)) /* 44 */
+ ALL(RF(4)) /* 45 */
+ ALL(RF(5)) /* 46 */
+ ALL(RF(6)) /* 47 */
+ ALL(BF(13)) /* 48 */
+ ALL(LF(5)) /* 49 */
+ ALL(BF(10)) /* 50 */
+ ALL(LF(6)) /* 51 */
+ ALL(RF(7)) /* 52 */
+ ALL('\t') /* 53 */
+ 'q', 'Q', NOP, '\021', /* 54 */
+ 'w', 'W', NOP, '\027', /* 55 */
+ 'e', 'E', NOP, '\005', /* 56 */
+ 'r', 'R', NOP, '\022', /* 57 */
+ 't', 'T', NOP, '\024', /* 58 */
+ 'y', 'Y', NOP, '\031', /* 59 */
+ 'u', 'U', NOP, '\025', /* 60 */
+ 'i', 'I', NOP, '\t', /* 61 */
+ 'o', 'O', NOP, '\017', /* 62 */
+ 'p', 'P', NOP, '\020', /* 63 */
+ C8('å'),C8('Å'),NOP, C8('å'), /* 64 */
+ GR(0), '^', '~', '\036', /* 65 */
+ ALL('\177') /* 66 */
+ ALL(COMPOSE) /* 67 */
+ ALL(RF(7)) /* 68 */
+ ALL(ST(1)) /* 69 */
+ ALL(RF(9)) /* 70 */
+ ALL(BF(15)) /* 71 */
+ ALL(LF(7)) /* 72 */
+ ALL(LF(8)) /* 73 */
+ ALL(RF(13)) /* 74 */
+ ALL(HOLE) /* 75 */
+ ALL(SK(LEFTCTRL)) /* 76 */
+ 'a', 'A', NOP, '\001', /* 77 */
+ 's', 'S', NOP, '\023', /* 78 */
+ 'd', 'D', NOP, '\004', /* 79 */
+ 'f', 'F', NOP, '\006', /* 80 */
+ 'g', 'G', NOP, '\007', /* 81 */
+ 'h', 'H', NOP, '\b', /* 82 */
+ 'j', 'J', NOP, '\n', /* 83 */
+ 'k', 'K', NOP, '\013', /* 84 */
+ 'l', 'L', NOP, '\014', /* 85 */
+ C8('ö'),C8('Ö'),NOP, C8('ö'), /* 86 */
+ C8('ä'),C8('Ä'),NOP, C8('ä'), /* 87 */
+ '\'', '*', '`', '\'', /* 88 */
+ ALL('\r') /* 89 */
+ ALL(BF(11)) /* 90 */
+ ALL(ST(3)) /* 91 */
+ ALL(RF(11)) /* 92 */
+ ALL(ST(4)) /* 93 */
+ ALL(BF(8)) /* 94 */
+ ALL(LF(9)) /* 95 */
+ ALL(RF(9)) /* 96 */
+ ALL(LF(10)) /* 97 */
+ ALL(SK(NUMLOCK)) /* 98 */
+ ALL(SK(LEFTSHIFT)) /* 99 */
+ 'z', 'Z', NOP, '\032', /* 100 */
+ 'x', 'X', NOP, '\030', /* 101 */
+ 'c', 'C', NOP, '\003', /* 102 */
+ 'v', 'V', NOP, '\026', /* 103 */
+ 'b', 'B', NOP, '\002', /* 104 */
+ 'n', 'N', NOP, '\016', /* 105 */
+ 'm', 'M', NOP, '\r', /* 106 */
+ ',', ';', NOP, ',', /* 107 */
+ '.', ':', NOP, '.', /* 108 */
+ '-', '_', NOP, '\037', /* 109 */
+ ALL(SK(RIGHTSHIFT)) /* 110 */
+ ALL('\n') /* 111 */
+ ALL(RF(13)) /* 112 */
+ ALL(ST(2)) /* 113 */
+ ALL(RF(15)) /* 114 */
+ ALL(HOLE) /* 115 */
+ ALL(HOLE) /* 116 */
+ ALL(HOLE) /* 117 */
+ ALL(LF(16)) /* 118 */
+ ALL(SK(CAPSLOCK)) /* 119 */
+ ALL(BB(0)) /* 120 */
+ ' ', ' ', ' ', '\000', /* 121 */
+ ALL(BB(0)) /* 122 */
+ ALL(RF(15)) /* 123 */
+ '<', '>', '|', '<', /* 124 */
+ ALL(BF(14)) /* 125 */
+ ALL(ERROR) /* 126 */
+ ALL(IDLE) /* 127 */
diff --git a/sbin/kbd/tables/sparc/se_fi b/sbin/kbd/tables/sparc/se_fi
new file mode 100644
index 00000000000..d87497a8e21
--- /dev/null
+++ b/sbin/kbd/tables/sparc/se_fi
@@ -0,0 +1,163 @@
+/* $OpenBSD: se_fi,v 1.1 1999/07/18 17:21:13 maja Exp $ */
+
+/*
+ * Copyright (c) 1999 Mats O Jansson
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Mats O Jansson.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+ { "se_fi", "sweden", "finland", "type_4_layout_0b" },
+/* unshift shift alt gr control */
+ ALL(HOLE) /* 0 */
+ ALL(BB(SYSTEMBIT)) /* 1 */
+ ALL(HOLE) /* 2 */
+ ALL(LF(2)) /* 3 */
+ ALL(HOLE) /* 4 */
+ ALL(TF(1)) /* 5 */
+ ALL(TF(2)) /* 6 */
+ ALL(TF(10)) /* 7 */
+ ALL(TF(3)) /* 8 */
+ ALL(TF(11)) /* 9 */
+ ALL(TF(4)) /* 10 */
+ ALL(TF(12)) /* 11 */
+ ALL(TF(5)) /* 12 */
+ ALL(COMPOSE) /* 13 */
+ ALL(TF(6)) /* 14 */
+ '~', '^', NOP, '\036', /* 15 */
+ ALL(TF(7)) /* 16 */
+ ALL(TF(8)) /* 17 */
+ ALL(TF(9)) /* 18 */
+ ALL(SK(ALT)) /* 19 */
+ ALL(HOLE) /* 20 */
+ ALL(RF(1)) /* 21 */
+ ALL(RF(2)) /* 22 */
+ ALL(RF(3)) /* 23 */
+ ALL(HOLE) /* 24 */
+ ALL(LF(3)) /* 25 */
+ ALL(LF(4)) /* 26 */
+ ALL(HOLE) /* 27 */
+ ALL(HOLE) /* 28 */
+ ALL('\033') /* 29 */
+ '1', '!', NOP, '1', /* 30 */
+ '2', '"', '@', '\000', /* 31 */
+ '3', '#', C8('£'),'3', /* 32 */
+ '4', C8('¤'),'$', '4', /* 33 */
+ '5', '%', NOP, '5', /* 34 */
+ '6', '&', NOP, '6', /* 35 */
+ '7', '/', '{', '7', /* 36 */
+ '8', '(', '[', '\033', /* 37 */
+ '9', ')', ']', '\035', /* 38 */
+ '0', '=', '}', '0', /* 39 */
+ '+', '?', '\\', '\034', /* 40 */
+ GR(4), GR(5), NOP, GR(4), /* 41 */
+ '\'', '*', '`', '\036', /* 42 */
+ ALL('\b') /* 43 */
+ ALL(HOLE) /* 44 */
+ ALL(RF(4)) /* 45 */
+ ALL(RF(5)) /* 46 */
+ ALL(RF(6)) /* 47 */
+ ALL(BF(13)) /* 48 */
+ ALL(LF(5)) /* 49 */
+ ALL(BF(10)) /* 50 */
+ ALL(LF(6)) /* 51 */
+ ALL(HOLE) /* 52 */
+ ALL('\t') /* 53 */
+ 'q', 'Q', NOP, '\021', /* 54 */
+ 'w', 'W', NOP, '\027', /* 55 */
+ 'e', 'E', NOP, '\005', /* 56 */
+ 'r', 'R', NOP, '\022', /* 57 */
+ 't', 'T', NOP, '\024', /* 58 */
+ 'y', 'Y', NOP, '\031', /* 59 */
+ 'u', 'U', NOP, '\025', /* 60 */
+ 'i', 'I', NOP, '\t', /* 61 */
+ 'o', 'O', NOP, '\017', /* 62 */
+ 'p', 'P', NOP, '\020', /* 63 */
+ C8('å'),C8('Å'),NOP, C8('å'), /* 64 */
+ GR(0), GR(1), GR(2), GR(0), /* 65 */
+ ALL('\177') /* 66 */
+ ALL(SK(ALTGRAPH)) /* 67 */
+ ALL(RF(7)) /* 68 */
+ ALL(ST(1)) /* 69 */
+ ALL(RF(9)) /* 70 */
+ ALL(BF(15)) /* 71 */
+ ALL(LF(7)) /* 72 */
+ ALL(LF(8)) /* 73 */
+ ALL(HOLE) /* 74 */
+ ALL(HOLE) /* 75 */
+ ALL(SK(CAPSLOCK)) /* 76 */
+ 'a', 'A', NOP, '\001', /* 77 */
+ 's', 'S', NOP, '\023', /* 78 */
+ 'd', 'D', NOP, '\004', /* 79 */
+ 'f', 'F', NOP, '\006', /* 80 */
+ 'g', 'G', NOP, '\007', /* 81 */
+ 'h', 'H', NOP, '\b', /* 82 */
+ 'j', 'J', NOP, '\n', /* 83 */
+ 'k', 'K', NOP, '\013', /* 84 */
+ 'l', 'L', NOP, '\014', /* 85 */
+ C8('ö'),C8('Ö'),NOP, C8('ö'), /* 86 */
+ C8('ä'),C8('Ä'),NOP, C8('ä'), /* 87 */
+ C8('§'),C8('½'),NOP, C8('§'), /* 88 */
+ ALL('\r') /* 89 */
+ ALL(BF(11)) /* 90 */
+ ALL(ST(3)) /* 91 */
+ ALL(RF(11)) /* 92 */
+ ALL(ST(4)) /* 93 */
+ ALL(BF(8)) /* 94 */
+ ALL(LF(9)) /* 95 */
+ ALL(HOLE) /* 96 */
+ ALL(LF(10)) /* 97 */
+ ALL(SK(NUMLOCK)) /* 98 */
+ ALL(SK(LEFTSHIFT)) /* 99 */
+ 'z', 'Z', NOP, '\032', /* 100 */
+ 'x', 'X', NOP, '\030', /* 101 */
+ 'c', 'C', NOP, '\003', /* 102 */
+ 'v', 'V', NOP, '\026', /* 103 */
+ 'b', 'B', NOP, '\002', /* 104 */
+ 'n', 'N', NOP, '\016', /* 105 */
+ 'm', 'M', NOP, '\r', /* 106 */
+ ',', ';', NOP, ',', /* 107 */
+ '.', ':', NOP, '.', /* 108 */
+ '-', '_', NOP, '\037', /* 109 */
+ ALL(SK(RIGHTSHIFT)) /* 110 */
+ ALL('\n') /* 111 */
+ ALL(RF(13)) /* 112 */
+ ALL(ST(2)) /* 113 */
+ ALL(RF(15)) /* 114 */
+ ALL(HOLE) /* 115 */
+ ALL(HOLE) /* 116 */
+ ALL(HOLE) /* 117 */
+ ALL(LF(16)) /* 118 */
+ ALL(SK(LEFTCTRL)) /* 119 */
+ ALL(BB(0)) /* 120 */
+ ' ', ' ', ' ', '\000', /* 121 */
+ ALL(BB(0)) /* 122 */
+ ALL(HOLE) /* 123 */
+ '<', '>', '|', '\034', /* 124 */
+ ALL(BF(14)) /* 125 */
+ ALL(ERROR) /* 126 */
+ ALL(IDLE) /* 127 */
diff --git a/sbin/kbd/tables/sparc/uk b/sbin/kbd/tables/sparc/uk
new file mode 100644
index 00000000000..49e814f40d8
--- /dev/null
+++ b/sbin/kbd/tables/sparc/uk
@@ -0,0 +1,163 @@
+/* $OpenBSD: uk,v 1.1 1999/07/18 17:21:13 maja Exp $ */
+
+/*
+ * Copyright (c) 1999 Mats O Jansson
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Mats O Jansson.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+ { "uk", "type_4_layout_0e" },
+/* unshift shift alt gr control */
+ ALL(HOLE) /* 0 */
+ ALL(BB(SYSTEMBIT)) /* 1 */
+ ALL(HOLE) /* 2 */
+ ALL(LF(2)) /* 3 */
+ ALL(HOLE) /* 4 */
+ ALL(TF(1)) /* 5 */
+ ALL(TF(2)) /* 6 */
+ ALL(TF(10)) /* 7 */
+ ALL(TF(3)) /* 8 */
+ ALL(TF(11)) /* 9 */
+ ALL(TF(4)) /* 10 */
+ ALL(TF(12)) /* 11 */
+ ALL(TF(5)) /* 12 */
+ ALL(SK(ALTGRAPH)) /* 13 */
+ ALL(TF(6)) /* 14 */
+ ALL(HOLE) /* 15 */
+ ALL(TF(7)) /* 16 */
+ ALL(TF(8)) /* 17 */
+ ALL(TF(9)) /* 18 */
+ ALL(SK(ALT)) /* 19 */
+ ALL(HOLE) /* 20 */
+ ALL(RF(1)) /* 21 */
+ ALL(RF(2)) /* 22 */
+ ALL(RF(3)) /* 23 */
+ ALL(HOLE) /* 24 */
+ ALL(LF(3)) /* 25 */
+ ALL(LF(4)) /* 26 */
+ ALL(HOLE) /* 27 */
+ ALL(HOLE) /* 28 */
+ ALL('\033') /* 29 */
+ '1', '!', '|', '1', /* 30 */
+ '2', '@', NOP, '\000', /* 31 */
+ '3', C8('£'),'#', '3', /* 32 */
+ '4', '$', NOP, '4', /* 33 */
+ '5', '%', NOP, '5', /* 34 */
+ '6', '^', NOP, '\036', /* 35 */
+ '7', '&', NOP, '7', /* 36 */
+ '8', '*', NOP, '8', /* 37 */
+ '9', '(', NOP, '9', /* 38 */
+ '0', ')', NOP, '0', /* 39 */
+ '-', '_', C8('¬'),'\037', /* 40 */
+ '=', '+', NOP, '=', /* 41 */
+ '`', '~', NOP, '\036', /* 42 */
+ ALL('\b') /* 43 */
+ ALL(HOLE) /* 44 */
+ ALL(RF(4)) /* 45 */
+ ALL(RF(5)) /* 46 */
+ ALL(RF(6)) /* 47 */
+ ALL(BF(13)) /* 48 */
+ ALL(LF(5)) /* 49 */
+ ALL(BF(10)) /* 50 */
+ ALL(LF(6)) /* 51 */
+ ALL(HOLE) /* 52 */
+ ALL('\t') /* 53 */
+ 'q', 'Q', NOP, '\021', /* 54 */
+ 'w', 'W', NOP, '\027', /* 55 */
+ 'e', 'E', NOP, '\005', /* 56 */
+ 'r', 'R', NOP, '\022', /* 57 */
+ 't', 'T', NOP, '\024', /* 58 */
+ 'y', 'Y', NOP, '\031', /* 59 */
+ 'u', 'U', NOP, '\025', /* 60 */
+ 'i', 'I', NOP, '\t', /* 61 */
+ 'o', 'O', NOP, '\017', /* 62 */
+ 'p', 'P', NOP, '\020', /* 63 */
+ '[', '{', NOP, '\033', /* 64 */
+ ']', '}', NOP, '\035', /* 65 */
+ ALL('\177') /* 66 */
+ ALL(COMPOSE) /* 67 */
+ ALL(RF(7)) /* 68 */
+ ALL(ST(1)) /* 69 */
+ ALL(RF(9)) /* 70 */
+ ALL(BF(15)) /* 71 */
+ ALL(LF(7)) /* 72 */
+ ALL(LF(8)) /* 73 */
+ ALL(HOLE) /* 74 */
+ ALL(HOLE) /* 75 */
+ ALL(SK(LEFTCTRL)) /* 76 */
+ 'a', 'A', NOP, '\001', /* 77 */
+ 's', 'S', NOP, '\023', /* 78 */
+ 'd', 'D', NOP, '\004', /* 79 */
+ 'f', 'F', NOP, '\006', /* 80 */
+ 'g', 'G', NOP, '\007', /* 81 */
+ 'h', 'H', NOP, '\b', /* 82 */
+ 'j', 'J', NOP, '\n', /* 83 */
+ 'k', 'K', NOP, '\013', /* 84 */
+ 'l', 'L', NOP, '\014', /* 85 */
+ ';', ':', NOP, ';', /* 86 */
+ '\'', '"', NOP, '\'', /* 87 */
+ '\\', '|', NOP, '\034', /* 88 */
+ ALL('\r') /* 89 */
+ ALL(BF(11)) /* 90 */
+ ALL(ST(3)) /* 91 */
+ ALL(RF(11)) /* 92 */
+ ALL(ST(4)) /* 93 */
+ ALL(BF(8)) /* 94 */
+ ALL(LF(9)) /* 95 */
+ ALL(HOLE) /* 96 */
+ ALL(LF(10)) /* 97 */
+ ALL(SK(NUMLOCK)) /* 98 */
+ ALL(SK(LEFTSHIFT)) /* 99 */
+ 'z', 'Z', NOP, '\032', /* 100 */
+ 'x', 'X', NOP, '\030', /* 101 */
+ 'c', 'C', NOP, '\003', /* 102 */
+ 'v', 'V', NOP, '\026', /* 103 */
+ 'b', 'B', NOP, '\002', /* 104 */
+ 'n', 'N', NOP, '\016', /* 105 */
+ 'm', 'M', NOP, '\r', /* 106 */
+ ',', '<', NOP, ',', /* 107 */
+ '.', '>', NOP, '.', /* 108 */
+ '/', '?', NOP, '\037', /* 109 */
+ ALL(SK(RIGHTSHIFT)) /* 110 */
+ ALL('\n') /* 111 */
+ ALL(RF(13)) /* 112 */
+ ALL(ST(2)) /* 113 */
+ ALL(RF(15)) /* 114 */
+ ALL(HOLE) /* 115 */
+ ALL(HOLE) /* 116 */
+ ALL(HOLE) /* 117 */
+ ALL(LF(16)) /* 118 */
+ ALL(SK(CAPSLOCK)) /* 119 */
+ ALL(BB(0)) /* 120 */
+ ' ', ' ', ' ', '\000', /* 121 */
+ ALL(BB(0)) /* 122 */
+ ALL(HOLE) /* 123 */
+ ALL(HOLE) /* 124 */
+ ALL(BF(14)) /* 125 */
+ ALL(ERROR) /* 126 */
+ ALL(IDLE) /* 127 */
diff --git a/sbin/kbd/tables/sparc/uk_5 b/sbin/kbd/tables/sparc/uk_5
new file mode 100644
index 00000000000..e6cfc3b60c1
--- /dev/null
+++ b/sbin/kbd/tables/sparc/uk_5
@@ -0,0 +1,163 @@
+/* $OpenBSD: uk_5,v 1.1 1999/07/18 17:21:13 maja Exp $ */
+
+/*
+ * Copyright (c) 1999 Mats O Jansson
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Mats O Jansson.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+ { "uk_5", "type_4_layout_2e" },
+/* unshift shift alt gr control */
+ ALL(HOLE) /* 0 */
+ ALL(BB(SYSTEMBIT)) /* 1 */
+ ALL(HOLE) /* 2 */
+ ALL(LF(2)) /* 3 */
+ ALL(HOLE) /* 4 */
+ ALL(TF(1)) /* 5 */
+ ALL(TF(2)) /* 6 */
+ ALL(TF(10)) /* 7 */
+ ALL(TF(3)) /* 8 */
+ ALL(TF(11)) /* 9 */
+ ALL(TF(4)) /* 10 */
+ ALL(TF(12)) /* 11 */
+ ALL(TF(5)) /* 12 */
+ ALL(SK(ALTGRAPH)) /* 13 */
+ ALL(TF(6)) /* 14 */
+ ALL(HOLE) /* 15 */
+ ALL(TF(7)) /* 16 */
+ ALL(TF(8)) /* 17 */
+ ALL(TF(9)) /* 18 */
+ ALL(SK(ALT)) /* 19 */
+ ALL(ST(1)) /* 20 */
+ ALL(RF(1)) /* 21 */
+ ALL(RF(2)) /* 22 */
+ ALL(RF(3)) /* 23 */
+ ALL(ST(3)) /* 24 */
+ ALL(LF(3)) /* 25 */
+ ALL(LF(4)) /* 26 */
+ ALL(ST(2)) /* 27 */
+ ALL(ST(4)) /* 28 */
+ ALL('\033') /* 29 */
+ '1', '!', NOP, '1', /* 30 */
+ '2', '"', NOP, '2', /* 31 */
+ '3', C8('£'),NOP, '3', /* 32 */
+ '4', '$', NOP, '4', /* 33 */
+ '5', '%', NOP, '5', /* 34 */
+ '6', '^', NOP, '\036', /* 35 */
+ '7', '&', NOP, '7', /* 36 */
+ '8', '*', NOP, '8', /* 37 */
+ '9', '(', NOP, '9', /* 38 */
+ '0', ')', NOP, '0', /* 39 */
+ '-', '_', NOP, '\037', /* 40 */
+ '=', '+', NOP, '=', /* 41 */
+ '`', C8('¬'),C8('¦'),'`', /* 42 */
+ ALL('\b') /* 43 */
+ ALL(BF(8)) /* 44 */
+ ALL(RF(4)) /* 45 */
+ ALL(RF(5)) /* 46 */
+ ALL(RF(6)) /* 47 */
+ ALL(BF(13)) /* 48 */
+ ALL(LF(5)) /* 49 */
+ ALL(BF(10)) /* 50 */
+ ALL(LF(6)) /* 51 */
+ ALL(RF(7)) /* 52 */
+ ALL('\t') /* 53 */
+ 'q', 'Q', NOP, '\021', /* 54 */
+ 'w', 'W', NOP, '\027', /* 55 */
+ 'e', 'E', NOP, '\005', /* 56 */
+ 'r', 'R', NOP, '\022', /* 57 */
+ 't', 'T', NOP, '\024', /* 58 */
+ 'y', 'Y', NOP, '\031', /* 59 */
+ 'u', 'U', NOP, '\025', /* 60 */
+ 'i', 'I', NOP, '\t', /* 61 */
+ 'o', 'O', NOP, '\017', /* 62 */
+ 'p', 'P', NOP, '\020', /* 63 */
+ '[', '{', NOP, '\033', /* 64 */
+ ']', '}', NOP, '\035', /* 65 */
+ ALL('\177') /* 66 */
+ ALL(COMPOSE) /* 67 */
+ ALL(RF(7)) /* 68 */
+ ALL(ST(1)) /* 69 */
+ ALL(RF(9)) /* 70 */
+ ALL(BF(15)) /* 71 */
+ ALL(LF(7)) /* 72 */
+ ALL(LF(8)) /* 73 */
+ ALL(RF(13)) /* 74 */
+ ALL(HOLE) /* 75 */
+ ALL(SK(LEFTCTRL)) /* 76 */
+ 'a', 'A', NOP, '\001', /* 77 */
+ 's', 'S', NOP, '\023', /* 78 */
+ 'd', 'D', NOP, '\004', /* 79 */
+ 'f', 'F', NOP, '\006', /* 80 */
+ 'g', 'G', NOP, '\007', /* 81 */
+ 'h', 'H', NOP, '\b', /* 82 */
+ 'j', 'J', NOP, '\n', /* 83 */
+ 'k', 'K', NOP, '\013', /* 84 */
+ 'l', 'L', NOP, '\014', /* 85 */
+ ';', ':', NOP, ';', /* 86 */
+ '\'', '@', NOP, '\000', /* 87 */
+ '#', '~', NOP, '#', /* 88 */
+ ALL('\r') /* 89 */
+ ALL(BF(11)) /* 90 */
+ ALL(ST(3)) /* 91 */
+ ALL(RF(11)) /* 92 */
+ ALL(ST(4)) /* 93 */
+ ALL(BF(8)) /* 94 */
+ ALL(LF(9)) /* 95 */
+ ALL(RF(9)) /* 96 */
+ ALL(LF(10)) /* 97 */
+ ALL(SK(NUMLOCK)) /* 98 */
+ ALL(SK(LEFTSHIFT)) /* 99 */
+ 'z', 'Z', NOP, '\032', /* 100 */
+ 'x', 'X', NOP, '\030', /* 101 */
+ 'c', 'C', NOP, '\003', /* 102 */
+ 'v', 'V', NOP, '\026', /* 103 */
+ 'b', 'B', NOP, '\002', /* 104 */
+ 'n', 'N', NOP, '\016', /* 105 */
+ 'm', 'M', NOP, '\r', /* 106 */
+ ',', '<', NOP, ',', /* 107 */
+ '.', '>', NOP, '.', /* 108 */
+ '/', '?', NOP, '\037', /* 109 */
+ ALL(SK(RIGHTSHIFT)) /* 110 */
+ ALL('\n') /* 111 */
+ ALL(RF(13)) /* 112 */
+ ALL(ST(2)) /* 113 */
+ ALL(RF(15)) /* 114 */
+ ALL(HOLE) /* 115 */
+ ALL(HOLE) /* 116 */
+ ALL(HOLE) /* 117 */
+ ALL(LF(16)) /* 118 */
+ ALL(SK(CAPSLOCK)) /* 119 */
+ ALL(BB(0)) /* 120 */
+ ' ', ' ', ' ', '\000', /* 121 */
+ ALL(BB(0)) /* 122 */
+ ALL(RF(15)) /* 123 */
+ '\\', '|', NOP, '\034', /* 124 */
+ ALL(BF(14)) /* 125 */
+ ALL(ERROR) /* 126 */
+ ALL(IDLE) /* 127 */
diff --git a/sbin/kbd/tables/sparc/us b/sbin/kbd/tables/sparc/us
new file mode 100644
index 00000000000..06873d76e0a
--- /dev/null
+++ b/sbin/kbd/tables/sparc/us
@@ -0,0 +1,163 @@
+/* $OpenBSD: us,v 1.1 1999/07/18 17:21:13 maja Exp $ */
+
+/*
+ * Copyright (c) 1999 Mats O Jansson
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Mats O Jansson.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+ { "us", "default", "reset", "type_4_layout_00", "type_4_layout_01" },
+/* unshift shift alt gr control */
+ ALL(HOLE) /* 0 */
+ ALL(BB(SYSTEMBIT)) /* 1 */
+ ALL(HOLE) /* 2 */
+ ALL(LF(2)) /* 3 */
+ ALL(HOLE) /* 4 */
+ ALL(TF(1)) /* 5 */
+ ALL(TF(2)) /* 6 */
+ ALL(TF(10)) /* 7 */
+ ALL(TF(3)) /* 8 */
+ ALL(TF(11)) /* 9 */
+ ALL(TF(4)) /* 10 */
+ ALL(TF(12)) /* 11 */
+ ALL(TF(5)) /* 12 */
+ ALL(SK(ALTGRAPH)) /* 13 */
+ ALL(TF(6)) /* 14 */
+ ALL(HOLE) /* 15 */
+ ALL(TF(7)) /* 16 */
+ ALL(TF(8)) /* 17 */
+ ALL(TF(9)) /* 18 */
+ ALL(SK(ALT)) /* 19 */
+ ALL(HOLE) /* 20 */
+ ALL(RF(1)) /* 21 */
+ ALL(RF(2)) /* 22 */
+ ALL(RF(3)) /* 23 */
+ ALL(HOLE) /* 24 */
+ ALL(LF(3)) /* 25 */
+ ALL(LF(4)) /* 26 */
+ ALL(HOLE) /* 27 */
+ ALL(HOLE) /* 28 */
+ ALL('\033') /* 29 */
+ '1', '!', NOP, '1', /* 30 */
+ '2', '@', NOP, '\000', /* 31 */
+ '3', '#', NOP, '3', /* 32 */
+ '4', '$', NOP, '4', /* 33 */
+ '5', '%', NOP, '5', /* 34 */
+ '6', '^', NOP, '\036', /* 35 */
+ '7', '&', NOP, '7', /* 36 */
+ '8', '*', NOP, '8', /* 37 */
+ '9', '(', NOP, '9', /* 38 */
+ '0', ')', NOP, '0', /* 39 */
+ '-', '_', NOP, '\037', /* 40 */
+ '=', '+', NOP, '=', /* 41 */
+ '`', '~', NOP, '\036', /* 42 */
+ ALL('\b') /* 43 */
+ ALL(HOLE) /* 44 */
+ ALL(RF(4)) /* 45 */
+ ALL(RF(5)) /* 46 */
+ ALL(RF(6)) /* 47 */
+ ALL(BF(13)) /* 48 */
+ ALL(LF(5)) /* 49 */
+ ALL(BF(10)) /* 50 */
+ ALL(LF(6)) /* 51 */
+ ALL(HOLE) /* 52 */
+ ALL('\t') /* 53 */
+ 'q', 'Q', NOP, '\021', /* 54 */
+ 'w', 'W', NOP, '\027', /* 55 */
+ 'e', 'E', NOP, '\005', /* 56 */
+ 'r', 'R', NOP, '\022', /* 57 */
+ 't', 'T', NOP, '\024', /* 58 */
+ 'y', 'Y', NOP, '\031', /* 59 */
+ 'u', 'U', NOP, '\025', /* 60 */
+ 'i', 'I', NOP, '\t', /* 61 */
+ 'o', 'O', NOP, '\017', /* 62 */
+ 'p', 'P', NOP, '\020', /* 63 */
+ '[', '{', NOP, '\033', /* 64 */
+ ']', '}', NOP, '\035', /* 65 */
+ ALL('\177') /* 66 */
+ ALL(COMPOSE) /* 67 */
+ ALL(RF(7)) /* 68 */
+ ALL(ST(1)) /* 69 */
+ ALL(RF(9)) /* 70 */
+ ALL(BF(15)) /* 71 */
+ ALL(LF(7)) /* 72 */
+ ALL(LF(8)) /* 73 */
+ ALL(HOLE) /* 74 */
+ ALL(HOLE) /* 75 */
+ ALL(SK(LEFTCTRL)) /* 76 */
+ 'a', 'A', NOP, '\001', /* 77 */
+ 's', 'S', NOP, '\023', /* 78 */
+ 'd', 'D', NOP, '\004', /* 79 */
+ 'f', 'F', NOP, '\006', /* 80 */
+ 'g', 'G', NOP, '\007', /* 81 */
+ 'h', 'H', NOP, '\b', /* 82 */
+ 'j', 'J', NOP, '\n', /* 83 */
+ 'k', 'K', NOP, '\013', /* 84 */
+ 'l', 'L', NOP, '\014', /* 85 */
+ ';', ':', NOP, ';', /* 86 */
+ '\'', '"', NOP, '\'', /* 87 */
+ '\\', '|', NOP, '\034', /* 88 */
+ ALL('\r') /* 89 */
+ ALL(BF(11)) /* 90 */
+ ALL(ST(3)) /* 91 */
+ ALL(RF(11)) /* 92 */
+ ALL(ST(4)) /* 93 */
+ ALL(BF(8)) /* 94 */
+ ALL(LF(9)) /* 95 */
+ ALL(HOLE) /* 96 */
+ ALL(LF(10)) /* 97 */
+ ALL(SK(NUMLOCK)) /* 98 */
+ ALL(SK(LEFTSHIFT)) /* 99 */
+ 'z', 'Z', NOP, '\032', /* 100 */
+ 'x', 'X', NOP, '\030', /* 101 */
+ 'c', 'C', NOP, '\003', /* 102 */
+ 'v', 'V', NOP, '\026', /* 103 */
+ 'b', 'B', NOP, '\002', /* 104 */
+ 'n', 'N', NOP, '\016', /* 105 */
+ 'm', 'M', NOP, '\r', /* 106 */
+ ',', '<', NOP, ',', /* 107 */
+ '.', '>', NOP, '.', /* 108 */
+ '/', '?', NOP, '\037', /* 109 */
+ ALL(SK(RIGHTSHIFT)) /* 110 */
+ ALL('\n') /* 111 */
+ ALL(RF(13)) /* 112 */
+ ALL(ST(2)) /* 113 */
+ ALL(RF(15)) /* 114 */
+ ALL(HOLE) /* 115 */
+ ALL(HOLE) /* 116 */
+ ALL(HOLE) /* 117 */
+ ALL(LF(16)) /* 118 */
+ ALL(SK(CAPSLOCK)) /* 119 */
+ ALL(BB(0)) /* 120 */
+ ' ', ' ', ' ', '\000', /* 121 */
+ ALL(BB(0)) /* 122 */
+ ALL(HOLE) /* 123 */
+ ALL(HOLE) /* 124 */
+ ALL(BF(14)) /* 125 */
+ ALL(ERROR) /* 126 */
+ ALL(IDLE) /* 127 */
diff --git a/sbin/kbd/tables/sparc/us_5 b/sbin/kbd/tables/sparc/us_5
new file mode 100644
index 00000000000..85ec2a5cd58
--- /dev/null
+++ b/sbin/kbd/tables/sparc/us_5
@@ -0,0 +1,163 @@
+/* $OpenBSD: us_5,v 1.1 1999/07/18 17:21:14 maja Exp $ */
+
+/*
+ * Copyright (c) 1999 Mats O Jansson
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by Mats O Jansson.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+ { "us_5", "type_4_layout_21", "type_4_layout_22" },
+/* unshift shift alt gr control */
+ ALL(HOLE) /* 0 */
+ ALL(BB(SYSTEMBIT)) /* 1 */
+ ALL(HOLE) /* 2 */
+ ALL(LF(2)) /* 3 */
+ ALL(HOLE) /* 4 */
+ ALL(TF(1)) /* 5 */
+ ALL(TF(2)) /* 6 */
+ ALL(TF(10)) /* 7 */
+ ALL(TF(3)) /* 8 */
+ ALL(TF(11)) /* 9 */
+ ALL(TF(4)) /* 10 */
+ ALL(TF(12)) /* 11 */
+ ALL(TF(5)) /* 12 */
+ ALL(SK(ALTGRAPH)) /* 13 */
+ ALL(TF(6)) /* 14 */
+ ALL(HOLE) /* 15 */
+ ALL(TF(7)) /* 16 */
+ ALL(TF(8)) /* 17 */
+ ALL(TF(9)) /* 18 */
+ ALL(SK(ALT)) /* 19 */
+ ALL(ST(1)) /* 20 */
+ ALL(RF(1)) /* 21 */
+ ALL(RF(2)) /* 22 */
+ ALL(RF(3)) /* 23 */
+ ALL(ST(3)) /* 24 */
+ ALL(LF(3)) /* 25 */
+ ALL(LF(4)) /* 26 */
+ ALL(ST(2)) /* 27 */
+ ALL(ST(4)) /* 28 */
+ ALL('\033') /* 29 */
+ '1', '!', NOP, '1', /* 30 */
+ '2', '@', NOP, '\000', /* 31 */
+ '3', '#', NOP, '3', /* 32 */
+ '4', '$', NOP, '4', /* 33 */
+ '5', '%', NOP, '5', /* 34 */
+ '6', '^', NOP, '\036', /* 35 */
+ '7', '&', NOP, '7', /* 36 */
+ '8', '*', NOP, '8', /* 37 */
+ '9', '(', NOP, '9', /* 38 */
+ '0', ')', NOP, '0', /* 39 */
+ '-', '_', NOP, '\037', /* 40 */
+ '=', '+', NOP, '=', /* 41 */
+ '`', '~', NOP, '\036', /* 42 */
+ ALL('\b') /* 43 */
+ ALL(BF(8)) /* 44 */
+ ALL(RF(4)) /* 45 */
+ ALL(RF(5)) /* 46 */
+ ALL(RF(6)) /* 47 */
+ ALL(BF(13)) /* 48 */
+ ALL(LF(5)) /* 49 */
+ ALL(BF(10)) /* 50 */
+ ALL(LF(6)) /* 51 */
+ ALL(RF(7)) /* 52 */
+ ALL('\t') /* 53 */
+ 'q', 'Q', NOP, '\021', /* 54 */
+ 'w', 'W', NOP, '\027', /* 55 */
+ 'e', 'E', NOP, '\005', /* 56 */
+ 'r', 'R', NOP, '\022', /* 57 */
+ 't', 'T', NOP, '\024', /* 58 */
+ 'y', 'Y', NOP, '\031', /* 59 */
+ 'u', 'U', NOP, '\025', /* 60 */
+ 'i', 'I', NOP, '\t', /* 61 */
+ 'o', 'O', NOP, '\017', /* 62 */
+ 'p', 'P', NOP, '\020', /* 63 */
+ '[', '{', NOP, '\033', /* 64 */
+ ']', '}', NOP, '\035', /* 65 */
+ ALL('\177') /* 66 */
+ ALL(COMPOSE) /* 67 */
+ ALL(RF(7)) /* 68 */
+ ALL(ST(1)) /* 69 */
+ ALL(RF(9)) /* 70 */
+ ALL(BF(15)) /* 71 */
+ ALL(LF(7)) /* 72 */
+ ALL(LF(8)) /* 73 */
+ ALL(RF(13)) /* 74 */
+ ALL(HOLE) /* 75 */
+ ALL(SK(LEFTCTRL)) /* 76 */
+ 'a', 'A', NOP, '\001', /* 77 */
+ 's', 'S', NOP, '\023', /* 78 */
+ 'd', 'D', NOP, '\004', /* 79 */
+ 'f', 'F', NOP, '\006', /* 80 */
+ 'g', 'G', NOP, '\007', /* 81 */
+ 'h', 'H', NOP, '\b', /* 82 */
+ 'j', 'J', NOP, '\n', /* 83 */
+ 'k', 'K', NOP, '\013', /* 84 */
+ 'l', 'L', NOP, '\014', /* 85 */
+ ';', ':', NOP, ';', /* 86 */
+ '\'', '"', NOP, '\'', /* 87 */
+ '\\', '|', NOP, '\034', /* 88 */
+ ALL('\r') /* 89 */
+ ALL(BF(11)) /* 90 */
+ ALL(ST(3)) /* 91 */
+ ALL(RF(11)) /* 92 */
+ ALL(ST(4)) /* 93 */
+ ALL(BF(8)) /* 94 */
+ ALL(LF(9)) /* 95 */
+ ALL(RF(9)) /* 96 */
+ ALL(LF(10)) /* 97 */
+ ALL(SK(NUMLOCK)) /* 98 */
+ ALL(SK(LEFTSHIFT)) /* 99 */
+ 'z', 'Z', NOP, '\032', /* 100 */
+ 'x', 'X', NOP, '\030', /* 101 */
+ 'c', 'C', NOP, '\003', /* 102 */
+ 'v', 'V', NOP, '\026', /* 103 */
+ 'b', 'B', NOP, '\002', /* 104 */
+ 'n', 'N', NOP, '\016', /* 105 */
+ 'm', 'M', NOP, '\r', /* 106 */
+ ',', '<', NOP, ',', /* 107 */
+ '.', '>', NOP, '.', /* 108 */
+ '/', '?', NOP, '\037', /* 109 */
+ ALL(SK(RIGHTSHIFT)) /* 110 */
+ ALL('\n') /* 111 */
+ ALL(RF(13)) /* 112 */
+ ALL(ST(2)) /* 113 */
+ ALL(RF(15)) /* 114 */
+ ALL(HOLE) /* 115 */
+ ALL(HOLE) /* 116 */
+ ALL(HOLE) /* 117 */
+ ALL(LF(16)) /* 118 */
+ ALL(SK(CAPSLOCK)) /* 119 */
+ ALL(BB(0)) /* 120 */
+ ' ', ' ', ' ', '\000', /* 121 */
+ ALL(BB(0)) /* 122 */
+ ALL(RF(15)) /* 123 */
+ ALL(HOLE) /* 124 */
+ ALL(BF(14)) /* 125 */
+ ALL(ERROR) /* 126 */
+ ALL(IDLE) /* 127 */