aboutsummaryrefslogtreecommitdiffstats
path: root/src/terminal.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/terminal.c')
-rw-r--r--src/terminal.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/src/terminal.c b/src/terminal.c
index 1223c0f..7bbc761 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -10,6 +10,9 @@ static char rcsid[] = "$Id$";
/*
* $Log$
+ * Revision 1.4 2008/02/13 16:57:29 james
+ * *** empty log message ***
+ *
* Revision 1.3 2008/02/13 09:12:21 james
* *** empty log message ***
*
@@ -58,6 +61,9 @@ int terminal_winches;
static void
terminal_close (TTY * _t)
{
+ char buf[32];
+ int i;
+
TERMINAL *t = (TERMINAL *) _t;
TERMINAL **ptr = &terminal_list;
@@ -73,6 +79,14 @@ terminal_close (TTY * _t)
tcsetattr (t->wfd, TCSANOW, &t->orig_termios);
+ set_nonblocking (t->wfd);
+
+
+ t->xmit (t, "\033[r", 3);
+ t->xmit (t, "\033[0m", 4);
+ i = sprintf (buf, "\033[%d;%dH", CRT_ROWS + 1, 1);
+ t->xmit (t, buf, i);
+
set_blocking (t->rfd);
set_blocking (t->wfd);
@@ -147,6 +161,7 @@ terminal_read (TTY * _t, void *buf, int len)
int red, done = 0;
terminal_dispatch ();
+ set_nonblocking (t->rfd);
do
{
@@ -176,14 +191,17 @@ terminal_write (TTY * _t, void *buf, int len)
terminal_dispatch ();
+ set_blocking (t->wfd);
+
do
{
writ = wrap_write (t->wfd, buf, len);
if (writ < 0)
return -1;
+
if (!writ)
- sleep (1);
+ usleep (1000);
buf += writ;
len -= writ;
@@ -234,7 +252,8 @@ terminal_open (int rfd, int wfd)
set_nonblocking (wfd);
- raw_termios (&termios);
+ cfmakeraw (&termios);
+ //raw_termios (&termios);
tcsetattr (wfd, TCSANOW, &termios);