--- fhandler.cc 1997/03/05 22:43:17 1.2 +++ fhandler.cc 1997/03/17 21:57:47 @@ -180,18 +180,13 @@ int fhandler_tty::linearize(unsigned char *buf) { - int len = sizeof(vmin_) + sizeof(vtime_); + int len = 0 ; if(buf == 0) { len += this->fhandler_base::linearize(buf); return len; } - memcpy(buf,(char *)&vmin_, sizeof(vmin_)); - buf += sizeof(vmin_); - memcpy(buf,(char *)&vtime_, sizeof(vtime_)); - buf += sizeof(vtime_); - len += this->fhandler_base::linearize(buf); return len; } @@ -200,11 +195,6 @@ { const unsigned char *orig_buf = buf; - memcpy((char *)&vmin_, buf, sizeof(vmin_)); - buf += sizeof(vmin_); - memcpy((char *)&vtime_, buf, sizeof(vtime_)); - buf += sizeof(vtime_); - int len = buf - orig_buf; return (len + this->fhandler_base::de_linearize(buf)); } @@ -212,12 +202,17 @@ int fhandler_tty::raw_read (void *ptr, size_t ulen) { - if (vtime_ || vmin_) +if (s->c_cc_[VMIN] || s->c_cc_[VTIME]) + { + if (s->c_cc_[VMIN] == 0) { - if (vmin_ == 0) ulen = 1; - else if (vmin_ < ulen) - ulen = vmin_; + } + else + { + if (s->c_cc_[VMIN] < ulen) + ulen = s->c_cc_[VMIN]; + } syscall_printf ("timeout len %d\n", ulen); } return fhandler_base::raw_read (ptr, ulen); @@ -1235,8 +1230,8 @@ fhandler_tty::fhandler_tty (const char *name) : fhandler_base(name) { - vmin_ = 0; - vtime_ = 0; + s->c_cc_[VMIN] = 0; + s->c_cc_[VTIME] = 0; } int @@ -1376,13 +1371,14 @@ set_r_binary ((t->c_iflag & IGNCR) ? 0 : 1); set_w_binary ((t->c_oflag & ONLCR) ? 0 : 1); - vtime_ = t->c_cc[VTIME]; - vmin_ = t->c_cc[VMIN]; +for (int i=0;i<=NCCS;i++) + { + s->c_cc_[i] = t->c_cc[i]; + } memset (&to, 0, sizeof (to)); - to.ReadTotalTimeoutConstant = vtime_ * 100; - + to.ReadTotalTimeoutConstant = s->c_cc_[VTIME] * 100; int res = SetCommTimeouts (get_handle (), &to); if (!res) { @@ -1467,8 +1463,10 @@ if (!get_w_binary ()) t->c_oflag |= ONLCR; - t->c_cc[VTIME] =vtime_; - t->c_cc[VMIN] = vmin_; +for (int i=0;i<=NCCS;i++) + { + t->c_cc[i] = s->c_cc_[i]; + } // tdump (fd); return 0; @@ -1722,6 +1720,11 @@ /* What about ENABLE_WINDOW_INPUT and ENABLE_MOUSE_INPUT ? */ +for (int i=0;i<=NCCS;i++) + { + s->c_cc_[i] = t->c_cc[i]; + } + int res = SetConsoleMode (get_input_handle (), flags) ? 0 : -1; if (res < 0) __seterrno (); @@ -1778,7 +1781,10 @@ /* What about ENABLE_WINDOW_INPUT and ENABLE_MOUSE_INPUT ? */ - + for (int i=0;i<=NCCS;i++) + { + t->c_cc[i] = s->c_cc_[i]; + } /* All the output bits we can ignore */ res = 0; } @@ -2836,7 +2864,19 @@ /* Ensure both input and output console handles are open */ open(0,0); - + debug_printf("fhandler_console::init"); + memset (&t, 0, sizeof (t)); + t.c_cc[VEOF] = '\004'; /* ^D */ + t.c_cc[VEOL] = '\012'; /* ^J */ + t.c_cc[VERASE] = '\010'; /* ^H */ + t.c_cc[VINTR] = '\003'; /* ^C */ + t.c_cc[VKILL] = '\025'; /* ^U */ + t.c_cc[VQUIT] = '\034'; /* FS or ^\ */ + t.c_cc[VSUSP] = '\032'; /* ^Z */ + t.c_cc[VSTART] = '\021'; /* ^Q */ + t.c_cc[VSTOP] = '\023'; /* ^S */ + t.c_cc[VMIN] = 1; + t.c_cc[VTIME] = 0; /* IGNCR doesn't work yet */ t.c_iflag = ICRNL /* | IGNCR */; t.c_oflag = bin ? 0 : ONLCR; --- fhandler.h 1997/03/05 22:43:17 1.2 +++ fhandler.h 1997/03/17 22:05:19 @@ -186,10 +190,6 @@ class fhandler_tty: public fhandler_base { -private: - unsigned int vmin_; /* from termios */ - unsigned int vtime_; /* from termios */ - public: /* Constructor */ fhandler_tty (const char *name = 0); --- winsup.h 1997/03/17 22:00:09 1.1 +++ winsup.h 1997/03/17 22:01:47 @@ -27,7 +27,7 @@ #undef sigaddset #include - +#include /* for cc_t */ #include "syscalls.h" #include "fhandler.h" #include "path.h" @@ -322,6 +322,7 @@ delqueue_list delqueue; void initialize (); + cc_t c_cc_[NCCS]; /* probably should be in registry */ }; extern shared_info *s;