# HG changeset patch # User aurel # Date 1121525361 0 # Node ID 85fd2ee1c094ee04f130f436992cf94506bea693 # Parent 578cc440956cdbd8109b35c75b0f1ff63d75ffed proper disabling/enabling of console output for vo_vesa diff -r 578cc440956c -r 85fd2ee1c094 osdep/vbelib.c --- a/osdep/vbelib.c Fri Jul 15 22:12:34 2005 +0000 +++ b/osdep/vbelib.c Sat Jul 16 14:49:21 2005 +0000 @@ -24,6 +24,8 @@ #include #include #include +#include +#include static struct VesaProtModeInterface vbe_pm_info; static struct VesaModeInfoBlock curr_mode_info; @@ -94,25 +96,28 @@ #define VBE_LRMI_int(int_no,regs) (VBE_LRMI_int(int_no,regs)) #endif -static FILE *my_stdin; -static FILE *my_stdout; -static FILE *my_stderr; - -static void __set_cursor_type(FILE *stdout_fd,int cursor_on) +/** + * Set console to graphics or text mode. + * This is a clean way to enable/disable console text output + * and cursor blinking. + * + * @param mode The new wanted mode. Can be either KD_GRAPHICS to switch + * to graphics mode or anything else to switch back to the + * original mode. + */ +static void kd_set_mode(int mode) { - fprintf(stdout_fd,"\033[?25%c",cursor_on?'h':'l'); -} + static int old_mode = KD_TEXT; + int fd; -/* TODO: do it only on LCD or DFP. We should extract such info from DDC */ -static void hide_terminal_output( void ) -{ - my_stdin = fopen(ttyname(fileno(stdin )),"r"); - my_stdout = fopen(ttyname(fileno(stdout)),"w"); - my_stderr = fopen(ttyname(fileno(stderr)),"w"); - __set_cursor_type(stdout,0); -/*if(isatty(fileno(stdin ))) stdin =freopen("/dev/null","r",stdin );*/ - if(isatty(fileno(stdout))) freopen("/dev/null","w",stdout); - if(isatty(fileno(stderr))) freopen("/dev/null","w",stderr); + if ((fd = open("/dev/tty0", O_RDWR)) < 0) + return; + if(mode == KD_GRAPHICS) + old_mode = ioctl(fd, KDGETMODE); + else + mode = old_mode; + ioctl(fd, KDSETMODE, mode); + close(fd); } static unsigned hh_int_10_seg; @@ -147,13 +152,13 @@ && vbe_pm_info.iopl_ports[i++] > 1023) ioperm(iopl_port,1,1); iopl(3); fd_mem = open("/dev/mem",O_RDWR); - hide_terminal_output(); + kd_set_mode(KD_GRAPHICS); return VBE_OK; } int vbeDestroy( void ) { - if (my_stdout) __set_cursor_type(my_stdout,1); + kd_set_mode(KD_TEXT); close(fd_mem); LRMI_free_real(controller_info); return VBE_OK;