From cd94b71c1b254eb9f2d0ef8cfe99f100430cd86a Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Wed, 9 May 2001 18:53:55 +0000 Subject: [PATCH] * fhandler.h (fhandler_termios::echo_erase): Declare new method. * fhandler_termios.cc (fhandler_termios::echo_erase): New method for echoing erase characters. (fhandler_termios::line_edit): Check the echo flag before echoing control characters (from Kazuhiro Fujieda ). --- winsup/cygwin/ChangeLog | 8 ++++++++ winsup/cygwin/fhandler.h | 1 + winsup/cygwin/fhandler_termios.cc | 24 ++++++++++++++++++------ 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index b46bf9c40..0c983617f 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,11 @@ +Wed May 9 14:46:32 2001 Christopher Faylor + + * fhandler.h (fhandler_termios::echo_erase): Declare new method. + * fhandler_termios.cc (fhandler_termios::echo_erase): New method for + echoing erase characters. + (fhandler_termios::line_edit): Check the echo flag before echoing + control characters (from Kazuhiro Fujieda ). + Wed May 9 10:43:30 2001 Christopher Faylor * include/pthread.h: Remove C++ comment. diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h index 4101da545..7ed4d203a 100644 --- a/winsup/cygwin/fhandler.h +++ b/winsup/cygwin/fhandler.h @@ -600,6 +600,7 @@ public: virtual void __release_output_mutex (const char *fn, int ln) {} void fixup_after_fork (HANDLE); void fixup_after_exec (HANDLE parent) { fixup_after_fork (parent); } + void echo_erase (int force = 0); }; enum ansi_intensity diff --git a/winsup/cygwin/fhandler_termios.cc b/winsup/cygwin/fhandler_termios.cc index 058410d9d..6082c2b6d 100644 --- a/winsup/cygwin/fhandler_termios.cc +++ b/winsup/cygwin/fhandler_termios.cc @@ -17,6 +17,7 @@ details. */ #include "cygerrno.h" #include "fhandler.h" #include "sync.h" +#include "interlock.h" #include "sigproc.h" #include "pinfo.h" #include "tty.h" @@ -160,6 +161,13 @@ setEIO: #define set_input_done(x) input_done = input_done || (x) +inline void +fhandler_termios::echo_erase (int force) +{ + if (force || tc->ti.c_lflag & ECHO) + doecho ("\b \b", 3); +} + int fhandler_termios::line_edit (const char *rptr, int nread, int always_accept) { @@ -247,7 +255,7 @@ fhandler_termios::line_edit (const char *rptr, int nread, int always_accept) else if (c == tc->ti.c_cc[VERASE]) { if (eat_readahead (1)) - doecho ("\b \b", 3); + echo_erase (); continue; } else if (c == tc->ti.c_cc[VWERASE]) @@ -257,21 +265,25 @@ fhandler_termios::line_edit (const char *rptr, int nread, int always_accept) if (!eat_readahead (1)) break; else - doecho ("\b \b", 3); + echo_erase (); while ((ch = peek_readahead (1)) >= 0 && !isspace (ch)); continue; } else if (c == tc->ti.c_cc[VKILL]) { int nchars = eat_readahead (-1); - while (nchars--) - doecho ("\b \b", 3); + if (tc->ti.c_lflag & ECHO) + while (nchars--) + echo_erase (1); continue; } else if (c == tc->ti.c_cc[VREPRINT]) { - doecho ("\n\r", 2); - doecho (rabuf, ralen); + if (tc->ti.c_lflag & ECHO) + { + doecho ("\n\r", 2); + doecho (rabuf, ralen); + } continue; } else if (c == tc->ti.c_cc[VEOF])