diff options
Diffstat (limited to 'contrib/ncurses/ncurses/tinfo/lib_ttyflags.c')
-rw-r--r-- | contrib/ncurses/ncurses/tinfo/lib_ttyflags.c | 94 |
1 files changed, 56 insertions, 38 deletions
diff --git a/contrib/ncurses/ncurses/tinfo/lib_ttyflags.c b/contrib/ncurses/ncurses/tinfo/lib_ttyflags.c index 385166e..77c35fa 100644 --- a/contrib/ncurses/ncurses/tinfo/lib_ttyflags.c +++ b/contrib/ncurses/ncurses/tinfo/lib_ttyflags.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998-2001,2002 Free Software Foundation, Inc. * + * Copyright (c) 1998-2005,2006 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * @@ -38,42 +38,56 @@ #include <curses.priv.h> #include <term.h> /* cur_term */ -MODULE_ID("$Id: lib_ttyflags.c,v 1.7 2002/05/25 14:50:00 tom Exp $") - -#undef tabs - -#ifdef TAB3 -# define tabs TAB3 -#else -# ifdef XTABS -# define tabs XTABS -# else -# ifdef OXTABS -# define tabs OXTABS -# else -# define tabs 0 -# endif -# endif -#endif +MODULE_ID("$Id: lib_ttyflags.c,v 1.13 2006/12/10 01:31:54 tom Exp $") NCURSES_EXPORT(int) _nc_get_tty_mode(TTY * buf) { - if (cur_term == 0 - || GET_TTY(cur_term->Filedes, buf) != 0) - return (ERR); - TR(TRACE_BITS, ("_nc_get_tty_mode: %s", _nc_trace_ttymode(buf))); - return (OK); + int result = OK; + + if (cur_term == 0) { + result = ERR; + } else { + for (;;) { + if (GET_TTY(cur_term->Filedes, buf) != 0) { + if (errno == EINTR) + continue; + result = ERR; + } + break; + } + } + + if (result == ERR) + memset(buf, 0, sizeof(*buf)); + + TR(TRACE_BITS, ("_nc_get_tty_mode(%d): %s", + cur_term->Filedes, _nc_trace_ttymode(buf))); + return (result); } NCURSES_EXPORT(int) _nc_set_tty_mode(TTY * buf) { - if (cur_term == 0 - || SET_TTY(cur_term->Filedes, buf) != 0) - return (ERR); - TR(TRACE_BITS, ("_nc_set_tty_mode: %s", _nc_trace_ttymode(buf))); - return (OK); + int result = OK; + + if (cur_term == 0) { + result = ERR; + } else { + for (;;) { + if (SET_TTY(cur_term->Filedes, buf) != 0) { + if (errno == EINTR) + continue; + if ((errno == ENOTTY) && (SP != 0)) + SP->_notty = TRUE; + result = ERR; + } + break; + } + } + TR(TRACE_BITS, ("_nc_set_tty_mode(%d): %s", + cur_term->Filedes, _nc_trace_ttymode(buf))); + return (result); } NCURSES_EXPORT(int) @@ -82,14 +96,13 @@ def_shell_mode(void) T((T_CALLED("def_shell_mode()"))); /* - * Turn off the XTABS bit in the tty structure if it was on. If XTABS - * was on, remove the tab and backtab capabilities. + * If XTABS was on, remove the tab and backtab capabilities. */ if (_nc_get_tty_mode(&cur_term->Ottyb) != OK) returnCode(ERR); #ifdef TERMIOS - if (cur_term->Ottyb.c_oflag & tabs) + if (cur_term->Ottyb.c_oflag & OFLAGS_TABS) tab = back_tab = NULL; #else if (cur_term->Ottyb.sg_flags & XTABS) @@ -103,10 +116,14 @@ def_prog_mode(void) { T((T_CALLED("def_prog_mode()"))); + /* + * Turn off the XTABS bit in the tty structure if it was on. + */ + if (_nc_get_tty_mode(&cur_term->Nttyb) != OK) returnCode(ERR); #ifdef TERMIOS - cur_term->Nttyb.c_oflag &= ~tabs; + cur_term->Nttyb.c_oflag &= ~OFLAGS_TABS; #else cur_term->Nttyb.sg_flags &= ~XTABS; #endif @@ -119,13 +136,14 @@ reset_prog_mode(void) T((T_CALLED("reset_prog_mode()"))); if (cur_term != 0) { - _nc_set_tty_mode(&cur_term->Nttyb); - if (SP) { - if (SP->_keypad_on) - _nc_keypad(TRUE); - NC_BUFFERED(TRUE); + if (_nc_set_tty_mode(&cur_term->Nttyb) == OK) { + if (SP) { + if (SP->_keypad_on) + _nc_keypad(TRUE); + NC_BUFFERED(TRUE); + } + returnCode(OK); } - returnCode(OK); } returnCode(ERR); } |