diff input/input.c @ 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 e18a800a02e7
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;