OSDN Git Service

* fhandler.h (fhandler_termios::echo_erase): Declare new method.
authorcgf <cgf>
Wed, 9 May 2001 18:53:55 +0000 (18:53 +0000)
committercgf <cgf>
Wed, 9 May 2001 18:53:55 +0000 (18:53 +0000)
* 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 <fujieda@jaist.ac.jp>).

winsup/cygwin/ChangeLog
winsup/cygwin/fhandler.h
winsup/cygwin/fhandler_termios.cc

index b46bf9c..0c98361 100644 (file)
@@ -1,3 +1,11 @@
+Wed May  9 14:46:32 2001  Christopher Faylor <cgf@cygnus.com>
+
+       * 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 <fujieda@jaist.ac.jp>).
+
 Wed May  9 10:43:30 2001  Christopher Faylor <cgf@cygnus.com>
 
        * include/pthread.h: Remove C++ comment.
index 4101da5..7ed4d20 100644 (file)
@@ -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
index 058410d..6082c2b 100644 (file)
@@ -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])