summaryrefslogtreecommitdiffstats
path: root/osdep
diff options
context:
space:
mode:
Diffstat (limited to 'osdep')
-rw-r--r--osdep/getch2-win.c11
-rw-r--r--osdep/getch2.c22
-rw-r--r--osdep/getch2.h2
3 files changed, 18 insertions, 17 deletions
diff --git a/osdep/getch2-win.c b/osdep/getch2-win.c
index 002d39d4a6..260c7c3f76 100644
--- a/osdep/getch2-win.c
+++ b/osdep/getch2-win.c
@@ -9,6 +9,7 @@
#include <windows.h>
#include "keycodes.h"
#include "input/input.h"
+#include "mp_fifo.h"
// HACK, stdin is used as something else below
#undef stdin
@@ -34,13 +35,13 @@ void get_screen_size(){
static HANDLE stdin;
static int getch2_status=0;
-int getch2(int time){
+static int getch2_internal(void)
+{
INPUT_RECORD eventbuffer[128];
DWORD retval;
int i=0;
if(!getch2_status)return -1;
/*check if there are input events*/
- WaitForSingleObject(stdin, time);
if(!GetNumberOfConsoleInputEvents(stdin,&retval))
{
printf("getch2: can't get number of input events: %i\n",GetLastError());
@@ -118,6 +119,12 @@ int getch2(int time){
return -1;
}
+void getch2(void)
+{
+ int r = getch2_internal();
+ if (r >= 0)
+ mplayer_put_key(r);
+}
void getch2_enable(){
DWORD retval;
diff --git a/osdep/getch2.c b/osdep/getch2.c
index 0d04de87b5..e204fa4c03 100644
--- a/osdep/getch2.c
+++ b/osdep/getch2.c
@@ -35,6 +35,7 @@
#include <unistd.h>
+#include "mp_fifo.h"
#include "keycodes.h"
#ifdef HAVE_TERMIOS
@@ -133,27 +134,19 @@ void get_screen_size(void){
#endif
}
-int getch2(int time){
+void getch2(void)
+{
int len=0;
int code=0;
int i=0;
- while(!getch2_len || (getch2_len==1 && getch2_buf[0]==27)){
- fd_set rfds;
- struct timeval tv;
int retval;
- /* Watch stdin (fd 0) to see when it has input. */
- FD_ZERO(&rfds); FD_SET(0,&rfds);
- /* Wait up to 'time' microseconds. */
- tv.tv_sec=time/1000; tv.tv_usec = (time%1000)*1000;
- retval=select(1, &rfds, NULL, NULL, &tv);
- if(retval<=0) return -1;
- /* Data is available now. */
retval=read(0,&getch2_buf[getch2_len],BUF_LEN-getch2_len);
- if(retval<1) return -1;
+ if (retval < 1)
+ return;
getch2_len+=retval;
- }
+ while (getch2_len > 0 && (getch2_len > 1 || getch2_buf[0] != 27)) {
/* First find in the TERMCAP database: */
for(i=0;i<getch2_key_db;i++){
if((len=getch2_keys[i].len)<=getch2_len)
@@ -217,7 +210,8 @@ found:
int i;
for(i=0;i<getch2_len;i++) getch2_buf[i]=getch2_buf[len+i];
}
- return code;
+ mplayer_put_key(code);
+ }
}
static int getch2_status=0;
diff --git a/osdep/getch2.h b/osdep/getch2.h
index 66ace32da0..eb1ae49fa3 100644
--- a/osdep/getch2.h
+++ b/osdep/getch2.h
@@ -19,7 +19,7 @@ extern void getch2_enable(void);
extern void getch2_disable(void);
/* Read a character or a special key code (see keycodes.h) */
-extern int getch2(int halfdelay_time);
+extern void getch2(void);
#ifdef __MINGW32__
extern int mp_input_win32_slave_cmd_func(int fd,char* dest,int size);