summaryrefslogtreecommitdiffstats
path: root/osdep/terminal-win.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-12-21 19:33:45 +0100
committerwm4 <wm4@nowhere>2013-12-21 20:50:13 +0100
commited71606e65e697ea6bc9fc78caf2dd4089dc0aeb (patch)
treed3b80546a8e40c821ee7575c236d813021b8b7c8 /osdep/terminal-win.c
parentdadf3a9a46d31a101aeaa1256b0d6f914eb32f1e (diff)
downloadmpv-ed71606e65e697ea6bc9fc78caf2dd4089dc0aeb.tar.bz2
mpv-ed71606e65e697ea6bc9fc78caf2dd4089dc0aeb.tar.xz
input: rework how input sources are added
Until now, there were two functions to add input sources (stuff like stdin input, slave mode, lirc, joystick). Unify them to a single function (mp_input_add_fd()), and make sure the associated callbacks always have a context parameter. Change the lirc and joystick code such that they take store their state in a context struct (probably worthless), and use the new mp_msg replacements (the point of this refactoring). Additionally, get rid of the ugly USE_FD0_CMD_SELECT etc. ifdeffery in the terminal handling code.
Diffstat (limited to 'osdep/terminal-win.c')
-rw-r--r--osdep/terminal-win.c27
1 files changed, 22 insertions, 5 deletions
diff --git a/osdep/terminal-win.c b/osdep/terminal-win.c
index cee2ab395a..5186c301f2 100644
--- a/osdep/terminal-win.c
+++ b/osdep/terminal-win.c
@@ -33,6 +33,10 @@
#include "input/input.h"
#include "terminal.h"
+int screen_width = 80;
+int screen_height = 24;
+char *erase_to_end_of_line = NULL;
+
#define hSTDOUT GetStdHandle(STD_OUTPUT_HANDLE)
#define hSTDERR GetStdHandle(STD_ERROR_HANDLE)
static short stdoutAttrs = 0;
@@ -47,7 +51,7 @@ static const unsigned char ansi2win32[8] = {
FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED,
};
-int mp_input_slave_cmd_func(int fd, char *dest, int size)
+static int mp_input_slave_cmd_func(void *ctx, int fd, char *dest, int size)
{
DWORD retval;
HANDLE in = GetStdHandle(STD_INPUT_HANDLE);
@@ -66,9 +70,10 @@ int mp_input_slave_cmd_func(int fd, char *dest, int size)
return MP_INPUT_NOTHING;
}
-int screen_width = 80;
-int screen_height = 24;
-char *erase_to_end_of_line = NULL;
+void terminal_setup_stdin_cmd_input(struct input_ctx *ictx)
+{
+ mp_input_add_fd(ictx, 0, 0, mp_input_slave_cmd_func, NULL, NULL, NULL);
+}
void get_screen_size(void)
{
@@ -172,7 +177,7 @@ static int getch2_internal(void)
return -1;
}
-bool getch2(struct input_ctx *ctx)
+static bool getch2(struct input_ctx *ctx)
{
int r = getch2_internal();
if (r >= 0)
@@ -180,6 +185,18 @@ bool getch2(struct input_ctx *ctx)
return true;
}
+static int read_keys(void *ctx, int fd)
+{
+ if (getch2(ctx))
+ return MP_INPUT_NOTHING;
+ return MP_INPUT_DEAD;
+}
+
+void terminal_setup_getch(struct input_ctx *ictx)
+{
+ mp_input_add_fd(ictx, 0, 1, NULL, read_keys, NULL, ictx);
+}
+
void getch2_poll(void)
{
}