You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/sys-libs/libkudzu/files/kudzu-1.2.57.1-sparc-keyboa...

196 lines
5.3 KiB

--- a/keyboard.c
+++ b/keyboard.c
@@ -21,7 +21,6 @@
#include "keyboard.h"
#ifdef __sparc__
-#include <asm/kbio.h>
#include <asm/openpromio.h>
#include <asm/types.h>
#endif
@@ -96,7 +95,15 @@
{0, 0}
};
-#if !defined(__s390__) && !defined(__s390x__)
+#if defined(__sparc__)
+static int termcmp(struct termios *a, struct termios *b)
+{
+ if (a->c_iflag != b->c_iflag || a->c_oflag != b->c_oflag ||
+ a->c_cflag != b->c_cflag || a->c_lflag != b->c_lflag)
+ return 1;
+ return memcmp(a->c_cc, b->c_cc, sizeof(a->c_cc));
+}
+#elif !defined(__s390__) && !defined(__s390x__)
static int termcmp(struct termios *a, struct termios *b)
{
if (a->c_iflag != b->c_iflag || a->c_oflag != b->c_oflag ||
@@ -110,150 +117,6 @@
struct device *keyboardProbe(enum deviceClass probeClass, int probeFlags,
struct device *devlist)
{
-#ifdef __sparc__
- int fd;
- char buf[256];
- struct keyboardDevice *kbddev;
-
- if (probeClass & CLASS_KEYBOARD) {
- static struct {
- int layout0, layout1, layout2;
- char *symbols;
- int use_iso9995_3;
- } sunkbd_translate[] = {
- { 0, 33, 80, "", 0, },
- { 1, 34, 81, "", 0, },
- { 2, -1, -1, "fr_BE", 0, },
- { 3, -1, -1, "ca", 0, },
- { 4, 36, 83, "dk", 1, },
- { 5, 37, 84, "de", 1, },
- { 6, 38, 85, "it", 1, },
- { 7, 39, 86, "nl", 0, },
- { 8, 40, 87, "no", 1, },
- { 9, 41, 88, "pt", 1, },
- { 10, 42, 89, "es", 1, },
- { 11, 43, 90, "se", 1, },
- { 12, 44, 91, "fr_CH",1, },
- { 13, 45, 92, "de_CH",1, },
- { 14, 46, 93, "gb", 1, },
- { 16, 47, 94, "ko", 0, },
- { 17, 48, 95, "tw", 0, },
- { 32, 49, 96, "jp", 0, },
- { 50, 97, -1, "fr_CA",0, },
- { 51, -1, -1, "hu", 0, },
- { 52, -1, -1, "pl", 0, },
- { 53, -1, -1, "cs", 0, },
- { 54, -1, -1, "ru", 0, },
- { -1, -1, -1, NULL, 0, }
- };
-
- char twelve = 12;
- int fdstd = 0;
- char buf[4096];
-
- for (fd = 0; fd <= 2; fd++) {
- sprintf (buf, "/proc/self/fd/%d", fd);
- if (readlink (buf, buf, 4096) == 12 &&
- !strncmp (buf, "/dev/console", 12)) {
- fdstd = 1;
- break;
- }
- }
- if (!fdstd) {
- fd = open("/dev/console", O_RDWR);
- if (fd < 0) return devlist;
- }
-
- kbddev=keyboardNewDevice(NULL);
- kbddev->type=CLASS_KEYBOARD;
- if (devlist)
- kbddev->next = devlist;
- devlist = (struct device *) kbddev;
-
- if (ioctl (fd, TIOCLINUX, &twelve) < 0) {
- /* Serial console */
- char desc[64];
- struct serial_struct si;
- int line = 0;
-
- if (ioctl (fd, TIOCGSERIAL, &si) >= 0) {
- if (si.line & 1)
- /* ttyb */
- line = 1;
- }
- if (!fdstd) close(fd);
- sprintf (desc, "Serial console tty%c", line + 'a');
- fd = open("/dev/openprom", O_RDONLY);
- if (fd >= 0) {
- struct openpromio *op = (struct openpromio *)buf;
- sprintf (op->oprom_array, "tty%c-mode", line + 'a');
- op->oprom_size = 4096-128-4;
- if (ioctl (fd, OPROMGETOPT, op) >= 0 &&
- op->oprom_size > 0 && op->oprom_size < 40) {
- strcat (desc, " ");
- op->oprom_array [op->oprom_size] = 0;
- strcat (desc, op->oprom_array);
- }
- close (fd);
- }
- kbddev->desc=strdup(desc);
- kbddev->device=strdup("console");
- return devlist;
- }
-
- if (!fdstd) close(fd);
- fd=open("/dev/kbd", O_RDWR);
- if (fd < 0) {
- /* PS/2 keyboard */
- kbddev->desc=strdup("Generic PS/2 Keyboard");
- } else {
- /* Sun keyboard */
- int kbdtype, kbdlayout, i;
- char *desc, *desclayout = NULL;
-
- kbddev->device=strdup("kbd");
- desc = "Sun Type4 ";
- if (ioctl(fd, KIOCTYPE, &kbdtype) >= 0)
- switch (kbdtype) {
- case 2: desc = "Sun Type2 "; break;
- case 3: desc = "Sun Type3 "; break;
- case 4: ioctl(fd, KIOCLAYOUT, &kbdlayout);
- if (kbdlayout < 33)
- desc = "Sun Type4 ";
- else switch (kbdlayout) {
- case 33: case 47: case 48: case 49:
- case 80: case 94: case 95: case 96:
- desc = "Sun Type5 "; break;
- case 34: case 81:
- desc = "Sun Type5 Unix "; break;
- default:
- desc = "Sun Type5 Euro "; break;
- }
- for (i = 0; sunkbd_translate[i].layout0 != -1; i++) {
- if (sunkbd_translate[i].layout0 == kbdlayout ||
- sunkbd_translate[i].layout1 == kbdlayout ||
- sunkbd_translate[i].layout2 == kbdlayout)
- break;
- }
- if (sunkbd_translate[i].layout0 != -1 &&
- sunkbd_translate[i].symbols[0])
- desclayout = sunkbd_translate[i].symbols;
- break;
- }
- if (desclayout) {
- kbddev->desc = malloc(strlen(desc) + strlen(desclayout) + 1 + strlen("Keyboard") + 1);
- strcpy (kbddev->desc, desc);
- strcat (kbddev->desc, desclayout);
- strcat (kbddev->desc, " Keyboard");
- } else {
- kbddev->desc = malloc(strlen(desc) + strlen("Keyboard") + 1);
- strcpy (kbddev->desc, desc);
- strcat (kbddev->desc, "Keyboard");
- }
- }
- close (fd);
- }
-#else
int fd;
char twelve = 12;
int fdstd = 0;
@@ -311,7 +174,7 @@
kbddev->device = strdup("ttySG0");
}
#endif
-#if defined(__i386__) || defined(__x86_64__) || defined(__ia64__)
+#if defined(__i386__) || defined(__x86_64__) || defined(__ia64__) || defined(__sparc__)
int cfd;
struct termios cmode, mode;
@@ -397,7 +260,6 @@
kbddev->device=strdup(desc);
}
}
-#endif
out:
return devlist;
}