Fixed bug 5473 - Add WSCONS support for NetBSD wahil1976 This patch adds WSCONS support for NetBSD.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
diff --git a/configure b/configure
index 49fb94d..8ea32a1 100755
--- a/configure
+++ b/configure
@@ -24902,7 +24902,7 @@ $as_echo "#define SDL_VIDEO_DRIVER_ANDROID 1" >>confdefs.h
freebsd)
CheckInputKBIO
;;
- openbsd)
+ openbsd|netbsd)
CheckInputWSCONS
;;
esac
diff --git a/configure.ac b/configure.ac
index b47c75b..f9a8802 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3626,7 +3626,7 @@ case "$host" in
freebsd)
CheckInputKBIO
;;
- openbsd)
+ openbsd|netbsd)
CheckInputWSCONS
;;
esac
diff --git a/src/core/openbsd/SDL_wscons_kbd.c b/src/core/openbsd/SDL_wscons_kbd.c
index 52dfe8a..23c8bd0 100644
--- a/src/core/openbsd/SDL_wscons_kbd.c
+++ b/src/core/openbsd/SDL_wscons_kbd.c
@@ -38,6 +38,12 @@
#include "../../events/SDL_events_c.h"
+#ifdef __NetBSD__
+#define KS_GROUP_Ascii KS_GROUP_Plain
+#define KS_Cmd_ScrollBack KS_Cmd_ScrollFastUp
+#define KS_Cmd_ScrollFwd KS_Cmd_ScrollFastDown
+#endif
+
#define RETIFIOCTLERR(x) if (x == -1) { free(input); input = NULL; return NULL;}
typedef struct SDL_WSCONS_mouse_input_data SDL_WSCONS_mouse_input_data;
@@ -216,11 +222,13 @@ static struct SDL_wscons_compose_tab_s {
{ { KS_asciicircum, KS_u }, KS_ucircumflex },
{ { KS_grave, KS_u }, KS_ugrave },
{ { KS_acute, KS_y }, KS_yacute },
+#ifndef __NetBSD__
{ { KS_dead_caron, KS_space }, KS_L2_caron },
{ { KS_dead_caron, KS_S }, KS_L2_Scaron },
{ { KS_dead_caron, KS_Z }, KS_L2_Zcaron },
{ { KS_dead_caron, KS_s }, KS_L2_scaron },
{ { KS_dead_caron, KS_z }, KS_L2_zcaron }
+#endif
};
static keysym_t ksym_upcase(keysym_t ksym)
@@ -306,10 +314,12 @@ static struct wscons_keycode_to_SDL {
{KS_f18, SDL_SCANCODE_F18},
{KS_f19, SDL_SCANCODE_F19},
{KS_f20, SDL_SCANCODE_F20},
+#if !defined(__NetBSD__)
{KS_f21, SDL_SCANCODE_F21},
{KS_f22, SDL_SCANCODE_F22},
{KS_f23, SDL_SCANCODE_F23},
{KS_f24, SDL_SCANCODE_F24},
+#endif
{KS_Meta_L, SDL_SCANCODE_LGUI},
{KS_Meta_R, SDL_SCANCODE_RGUI},
{KS_Zenkaku_Hankaku, SDL_SCANCODE_LANG5},
@@ -397,6 +407,9 @@ static SDL_WSCONS_mouse_input_data* mouseInputData = NULL;
#define IS_CAPSLOCK_ON (input->ledstate & LED_CAP)
static SDL_WSCONS_input_data* SDL_WSCONS_Init_Keyboard(const char* dev)
{
+#ifdef WSKBDIO_SETVERSION
+ int version = WSKBDIO_EVENT_VERSION;
+#endif
SDL_WSCONS_input_data* input = (SDL_WSCONS_input_data*)SDL_calloc(1, sizeof(SDL_WSCONS_input_data));
if (!input) {
@@ -419,7 +432,6 @@ static SDL_WSCONS_input_data* SDL_WSCONS_Init_Keyboard(const char* dev)
input->origledstate = input->ledstate;
RETIFIOCTLERR(ioctl(input->fd, WSKBDIO_GETENCODING, &input->encoding));
#ifdef WSKBDIO_SETVERSION
- int version = WSKBDIO_EVENT_VERSION;
RETIFIOCTLERR(ioctl(input->fd, WSKBDIO_SETVERSION, &version));
#endif
return input;
@@ -583,6 +595,7 @@ static void updateKeyboard(SDL_WSCONS_input_data* input)
input->lockheldstate[2] = 1;
break;
}
+#ifndef __NetBSD__
case KS_Mode_Lock: {
if (input->lockheldstate[3] >= 1) break;
input->ledstate ^= 1 << 4;
@@ -590,6 +603,7 @@ static void updateKeyboard(SDL_WSCONS_input_data* input)
input->lockheldstate[3] = 1;
break;
}
+#endif
case KS_Shift_Lock: {
if (input->lockheldstate[4] >= 1) break;
input->ledstate ^= 1 << 5;
@@ -656,10 +670,12 @@ static void updateKeyboard(SDL_WSCONS_input_data* input)
if (input->lockheldstate[2]) input->lockheldstate[2] = 0;
}
break;
+#ifndef __NetBSD__
case KS_Mode_Lock: {
if (input->lockheldstate[3]) input->lockheldstate[3] = 0;
}
break;
+#endif
case KS_Shift_Lock: {
if (input->lockheldstate[4]) input->lockheldstate[4] = 0;
}
@@ -770,7 +786,7 @@ static void updateKeyboard(SDL_WSCONS_input_data* input)
result = KS_voidSymbol;
input->ledstate &= ~WSKBD_LED_COMPOSE;
ioctl(input->fd,WSKBDIO_SETLEDS, &input->ledstate);
- for (acc_i = 0; acc_i < nitems(compose_tab); acc_i++) {
+ for (acc_i = 0; acc_i < SDL_arraysize(compose_tab); acc_i++) {
if ((compose_tab[acc_i].elem[0] == input->composebuffer[0]
&& compose_tab[acc_i].elem[1] == input->composebuffer[1])
|| (compose_tab[acc_i].elem[0] == input->composebuffer[1]
diff --git a/src/core/openbsd/SDL_wscons_mouse.c b/src/core/openbsd/SDL_wscons_mouse.c
index bda7ca6..4df927b 100644
--- a/src/core/openbsd/SDL_wscons_mouse.c
+++ b/src/core/openbsd/SDL_wscons_mouse.c
@@ -37,16 +37,20 @@ typedef struct SDL_WSCONS_mouse_input_data
SDL_WSCONS_mouse_input_data* SDL_WSCONS_Init_Mouse()
{
+#ifdef WSMOUSEIO_SETVERSION
+ int version = WSMOUSE_EVENT_VERSION;
+#endif
SDL_WSCONS_mouse_input_data* mouseInputData = SDL_calloc(1, sizeof(SDL_WSCONS_mouse_input_data));
if (!mouseInputData) return NULL;
mouseInputData->fd = open("/dev/wsmouse",O_RDWR | O_NONBLOCK);
if (mouseInputData->fd == -1) {free(mouseInputData); return NULL; }
+#ifdef WSMOUSEIO_SETMODE
ioctl(mouseInputData->fd, WSMOUSEIO_SETMODE, WSMOUSE_COMPAT);
- #ifdef WSMOUSEIO_SETVERSION
- int version = WSMOUSEIO_EVENT_VERSION;
- ioctl(inputData->fd, WSMOUSEIO_SETVERSION, &version);
- #endif
+#endif
+#ifdef WSMOUSEIO_SETVERSION
+ ioctl(mouseInputData->fd, WSMOUSEIO_SETVERSION, &version);
+#endif
return mouseInputData;
}