From: Claudio C. <kl...@us...> - 2006-01-30 11:31:40
|
Update of /cvsroot/xine/xine-ui/src/fb In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12215 Modified Files: Makefile.am keys.c main.c main.h Log Message: Use termios instead of ncurses (doesn't fake console output). Index: Makefile.am =================================================================== RCS file: /cvsroot/xine/xine-ui/src/fb/Makefile.am,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- Makefile.am 8 Nov 2003 10:14:49 -0000 1.6 +++ Makefile.am 30 Jan 2006 11:31:28 -0000 1.7 @@ -2,14 +2,10 @@ DEBUG_CFLAGS = @BUILD_LIB_STATIC@ @DEBUG_CFLAGS@ @XINE_CFLAGS@ -if HAVE_NCURSES -fb_programs = fbxine -endif - -bin_PROGRAMS = ${fb_programs} +bin_PROGRAMS = fbxine fbxine_DEPENDENCIES = $(top_builddir)/src/common/libcommon.la -fbxine_LDADD = @XINE_LIBS@ $(LIRC_LIBS) $(DYNAMIC_LD_LIBS) -lm $(top_builddir)/src/common/libcommon.la $(NCURSES_LIB) +fbxine_LDADD = @XINE_LIBS@ $(LIRC_LIBS) $(DYNAMIC_LD_LIBS) -lm $(top_builddir)/src/common/libcommon.la fbxine_SOURCES = main.c lirc.c actions.c keys.c options.c callback.c stdctl.c post.c osd.c config_wrapper.c noinst_HEADERS = main.h lirc.h actions.h keys.h options.h callback.h stdctl.h post.h osd.h config_wrapper.h Index: keys.c =================================================================== RCS file: /cvsroot/xine/xine-ui/src/fb/keys.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- keys.c 14 Sep 2005 21:18:41 -0000 1.5 +++ keys.c 30 Jan 2006 11:31:28 -0000 1.6 @@ -33,24 +33,41 @@ #include <linux/kd.h> #endif -#ifdef HAVE_CURSES_H -#include <curses.h> -#endif - #include "keys.h" +#define K_PPAGE ('\033' | ('\133'<<8) | ('\065'<<16) | ('\176'<<24)) +#define K_NPAGE ('\033' | ('\133'<<8) | ('\066'<<16) | ('\176'<<24)) +#define K_UP ('\033' | ('\133'<<8) | ('\101'<<16)) +#define K_DOWN ('\033' | ('\133'<<8) | ('\102'<<16)) +#define K_RIGHT ('\033' | ('\133'<<8) | ('\103'<<16)) +#define K_LEFT ('\033' | ('\133'<<8) | ('\104'<<16)) +#define K_ENTER ('\015') +#define K_CTRLZ ('\032') + +static int do_getc(void) +{ + unsigned char c[4]; + int n, i, k; + + n = read(fbxine.tty_fd, c, 4 ); + for (k = 0, i = 0; i < n; i++) + k |= c[i] << (i << 3); + + return k; +} + static int default_key_action(int key) { switch(key) { - case KEY_PPAGE: return ACTID_SEEK_REL_p600; - case KEY_NPAGE: return ACTID_SEEK_REL_m600; - case KEY_UP: return ACTID_SEEK_REL_p60; - case KEY_DOWN: return ACTID_SEEK_REL_m60; - case KEY_RIGHT: return ACTID_SEEK_REL_p10; - case KEY_LEFT: return ACTID_SEEK_REL_m10; + case K_PPAGE: return ACTID_SEEK_REL_p600; + case K_NPAGE: return ACTID_SEEK_REL_m600; + case K_UP: return ACTID_SEEK_REL_p60; + case K_DOWN: return ACTID_SEEK_REL_m60; + case K_RIGHT: return ACTID_SEEK_REL_p10; + case K_LEFT: return ACTID_SEEK_REL_m10; - case KEY_ENTER: return ACTID_PLAY; + case K_ENTER: return ACTID_PLAY; case 'q': case 'Q': return ACTID_QUIT; @@ -77,9 +94,9 @@ case 'S': return ACTID_EVENT_SELECT; case 'i': return ACTID_TOGGLE_INTERLEAVE; - case 'z': return ACTID_ZOOM_IN; - case 'Z': return ACTID_ZOOM_OUT; - case '\032': return ACTID_ZOOM_RESET; /* This is ^Z */ + case 'z': return ACTID_ZOOM_IN; + case 'Z': return ACTID_ZOOM_OUT; + case K_CTRLZ: return ACTID_ZOOM_RESET; /* This is ^Z */ } return 0; @@ -89,8 +106,10 @@ { pthread_detach(pthread_self()); - for(;;) - do_action(default_key_action(getch())); + for(;;) { + pthread_testcancel(); + do_action(default_key_action(do_getc())); + } return 0; } @@ -100,7 +119,7 @@ if (fbxine.keyboard_thread) pthread_cancel(fbxine.keyboard_thread); - endwin(); + tcsetattr(fbxine.tty_fd, TCSANOW, &fbxine.ti_save); #ifdef HAVE_LINUX_KD_H if(ioctl(fbxine.tty_fd, KDSETMODE, KD_TEXT) == -1) @@ -116,17 +135,10 @@ fbxine_register_exit(&exit_callback, (fbxine_callback_t)exit_keyboard); fbxine_register_abort(&exit_callback,(fbxine_callback_t)exit_keyboard); - - initscr(); - keypad(stdscr, TRUE); - cbreak(); - noecho(); - intrflush(stdscr, FALSE); - meta(stdscr, TRUE); fbxine.tty_fd = open("/dev/tty", O_RDWR); if(fbxine.tty_fd == -1) - { + { perror("Failed to open /dev/tty"); return 0; } @@ -135,9 +147,27 @@ if(ioctl(fbxine.tty_fd, KDSETMODE, KD_GRAPHICS) == -1) { perror("Failed to set /dev/tty to graphics mode"); + close(fbxine.tty_fd); return 0; - } + } #endif + + tcgetattr(fbxine.tty_fd, &fbxine.ti_save); + + fbxine.ti_cur = fbxine.ti_save; + fbxine.ti_cur.c_cc[VMIN] = 1; + fbxine.ti_cur.c_cc[VTIME] = 0; + fbxine.ti_cur.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | + INLCR | IGNCR | ICRNL | IXON); + fbxine.ti_cur.c_lflag &= ~(ECHO | ECHONL | ICANON); + + if (tcsetattr(fbxine.tty_fd, TCSAFLUSH, &fbxine.ti_cur) == -1) + { + perror("Failed to change terminal attributes"); + close(fbxine.tty_fd); + return 0; + } + pthread_create(&fbxine.keyboard_thread, 0, fbxine_keyboard_loop, 0); return 1; } Index: main.c =================================================================== RCS file: /cvsroot/xine/xine-ui/src/fb/main.c,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- main.c 14 Sep 2005 21:18:41 -0000 1.20 +++ main.c 30 Jan 2006 11:31:28 -0000 1.21 @@ -202,6 +202,8 @@ fbxine.stream = xine_stream_new(fbxine.xine, fbxine.audio_port, fbxine.video_port); + xine_set_param(fbxine.stream, XINE_PARAM_VERBOSITY, fbxine.verbosity); + fbxine.event_queue = xine_event_new_queue(fbxine.stream); xine_event_create_listener_thread(fbxine.event_queue, Index: main.h =================================================================== RCS file: /cvsroot/xine/xine-ui/src/fb/main.h,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- main.h 16 Jul 2005 19:05:30 -0000 1.9 +++ main.h 30 Jan 2006 11:31:28 -0000 1.10 @@ -29,6 +29,7 @@ #include <stdarg.h> #include <string.h> #include <unistd.h> +#include <termios.h> #include <errno.h> #include <sys/types.h> #include <sys/stat.h> @@ -53,12 +54,14 @@ xine_t *xine; xine_stream_t *stream; xine_video_port_t *video_port; - xine_audio_port_t *audio_port; + xine_audio_port_t *audio_port; xine_event_queue_t *event_queue; - int tty_fd; + int tty_fd; + struct termios ti_save; + struct termios ti_cur; - int lirc_enable; + int lirc_enable; char *configfile; |