changeset 24132:9f234010c4be

Add separate event input type for terminal+vo Add an input/input.c fd type whose read function takes no arguments and returns no value. If such a function reads key or command events it'll add them to the queues itself. Use this type for terminal input which was special-cased before. The event function for X11-based VOs will use the same type later.
author uau
date Sat, 25 Aug 2007 04:28:14 +0000
parents 30028bbcb9e8
children d43cda21236d
files input/input.c input/input.h mplayer.c
diffstat 3 files changed, 30 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/input/input.c	Sat Aug 25 04:28:11 2007 +0000
+++ b/input/input.c	Sat Aug 25 04:28:14 2007 +0000
@@ -500,6 +500,7 @@
   int dead : 1;
   int got_cmd : 1;
   int no_select : 1;
+  int no_readfunc_retval : 1;
   // These fields are for the cmd fds.
   char* buffer;
   int pos,size;
@@ -665,6 +666,28 @@
   return 1;
 }
 
+int
+mp_input_add_event_fd(int fd, void (*read_func)(void))
+{
+  if(num_key_fd == MP_MAX_KEY_FD) {
+    mp_msg(MSGT_INPUT,MSGL_ERR,MSGTR_INPUT_INPUT_ErrCantRegister2ManyKeyFds,fd);
+    return 0;
+  }
+
+  memset(&key_fds[num_key_fd],0,sizeof(mp_input_fd_t));
+  key_fds[num_key_fd].fd = fd;
+  key_fds[num_key_fd].read_func = read_func;
+  key_fds[num_key_fd].close_func = NULL;
+  key_fds[num_key_fd].no_readfunc_retval = 1;
+  num_key_fd++;
+
+  return 1;
+}
+
+void mp_input_rm_event_fd(int fd)
+{
+    mp_input_rm_key_fd(fd);
+}
 
 
 mp_cmd_t*
@@ -1148,8 +1171,8 @@
 #endif
 
 	int code;
-	if (key_fds[i].fd == 0) {   // getch2 handler special-cased for now
-	    getch2();
+	if (key_fds[i].no_readfunc_retval) {   // getch2 handler special-cased for now
+	    ((void (*)(void))key_fds[i].read_func)();
 	    code = mplayer_get_key(0);
 	    if (code < 0)
 		code = MP_INPUT_NOTHING;
--- a/input/input.h	Sat Aug 25 04:28:11 2007 +0000
+++ b/input/input.h	Sat Aug 25 04:28:14 2007 +0000
@@ -230,6 +230,10 @@
 void
 mp_input_rm_key_fd(int fd);
 
+int mp_input_add_event_fd(int fd, void (*read_func)(void));
+
+void mp_input_rm_event_fd(int fd);
+
 // This function can be used to put a command in the system again. It's used by libmpdemux
 // when it performs a blocking operation to resend the command it received to the main
 // loop.
--- a/mplayer.c	Sat Aug 25 04:28:11 2007 +0000
+++ b/mplayer.c	Sat Aug 25 04:28:14 2007 +0000
@@ -2605,7 +2605,7 @@
   mp_input_add_cmd_fd(0,0,mp_input_win32_slave_cmd_func,NULL);
 #endif
 else if(!noconsolecontrols)
-  mp_input_add_key_fd(0,1,NULL,NULL);
+    mp_input_add_event_fd(0, getch2);
 
 inited_flags|=INITED_INPUT;
 current_module = NULL;