chiark / gitweb /
Remove results of configure
[sympathy.git] / src / ptty.c
index dee241b8c1497c00c210ca728a6abc764089cedc..7d4c84bd719315cb3689854924b7e1b0917c2ed0 100644 (file)
@@ -1,4 +1,4 @@
-/*
+/* 
  * ptty.c:
  *
  * Copyright (c) 2008 James McKenzie <james@fishsoup.dhs.org>,
@@ -6,10 +6,76 @@
  *
  */
 
-static char rcsid[] = "$Id$";
+static char rcsid[] = "$Id: ptty.c,v 1.23 2008/03/12 01:30:23 james Exp $";
 
-/*
- * $Log$
+/* 
+ * $Log: ptty.c,v $
+ * Revision 1.23  2008/03/12 01:30:23  james
+ * *** empty log message ***
+ *
+ * Revision 1.22  2008/03/12 01:26:56  james
+ * *** empty log message ***
+ *
+ * Revision 1.21  2008/03/10 11:49:33  james
+ * *** empty log message ***
+ *
+ * Revision 1.20  2008/03/07 13:16:02  james
+ * *** empty log message ***
+ *
+ * Revision 1.19  2008/03/07 12:37:04  james
+ * *** empty log message ***
+ *
+ * Revision 1.18  2008/03/03 06:04:42  james
+ * *** empty log message ***
+ *
+ * Revision 1.17  2008/03/02 10:37:56  james
+ * *** empty log message ***
+ *
+ * Revision 1.16  2008/02/28 16:57:52  james
+ * *** empty log message ***
+ *
+ * Revision 1.15  2008/02/27 09:42:53  james
+ * *** empty log message ***
+ *
+ * Revision 1.14  2008/02/27 09:42:22  james
+ * *** empty log message ***
+ *
+ * Revision 1.13  2008/02/27 01:31:38  james
+ * *** empty log message ***
+ *
+ * Revision 1.12  2008/02/27 01:31:14  james
+ * *** empty log message ***
+ *
+ * Revision 1.11  2008/02/26 23:23:17  james
+ * *** empty log message ***
+ *
+ * Revision 1.10  2008/02/24 00:42:53  james
+ * *** empty log message ***
+ *
+ * Revision 1.9  2008/02/23 13:05:58  staffcvs
+ * *** empty log message ***
+ *
+ * Revision 1.8  2008/02/23 11:48:37  james
+ * *** empty log message ***
+ *
+ * Revision 1.7  2008/02/22 17:07:00  james
+ * *** empty log message ***
+ *
+ * Revision 1.6  2008/02/22 14:51:54  james
+ * *** empty log message ***
+ *
+ * Revision 1.5  2008/02/15 23:52:12  james
+ * *** empty log message ***
+ *
+ * Revision 1.4  2008/02/14 10:39:14  james
+ * *** empty log message ***
+ *
+ * Revision 1.3  2008/02/13 09:12:21  james
+ * *** empty log message ***
+ *
+ * Revision 1.2  2008/02/12 22:36:46  james
+ * *** empty log message ***
+ *
  * Revision 1.1  2008/02/09 15:47:28  james
  * *** empty log message ***
  *
@@ -34,20 +100,22 @@ static char rcsid[] = "$Id$";
 
 
 typedef struct {
-       TTY_SIGNATURE;
-       int fd;
-       pid_t child;
+  TTY_SIGNATURE;
+  int fd;
+  pid_t child;
 } PTTY;
 
 
-void ptty_close(TTY *_t)
+static void
+ptty_close (TTY * _t)
 {
-PTTY *t=(PTTY *) _t;
+  PTTY *t = (PTTY *) _t;
 
-if (!t) return;
+  if (!t)
+    return;
 
-close(t->fd);
-free(t);
+  close (t->fd);
+  free (t);
 }
 
 
@@ -55,22 +123,21 @@ free(t);
 static int
 ptty_read (TTY * _t, void *buf, int len)
 {
-PTTY *t=(PTTY *)_t;
+  PTTY *t = (PTTY *) _t;
   int red, done = 0;
 
-  do
-    {
+  do {
 
-      red = wrap_read (t->fd, buf, len);
-      if (red < 0)
-        return -1;
-      if (!red)
-        return done;
+    red = wrap_read (t->fd, buf, len);
+    if (red < 0)
+      return -1;
+    if (!red)
+      return done;
 
-      buf += red;
-      len -= red;
-      done += red;
-    }
+    buf += red;
+    len -= red;
+    done += red;
+  }
   while (len);
 
 
@@ -82,76 +149,91 @@ static int
 ptty_write (TTY * _t, void *buf, int len)
 {
   int writ, done = 0;
-  PTTY *t=(PTTY *) _t;
+  PTTY *t = (PTTY *) _t;
 
-  do
-    {
+  do {
 
-      writ = wrap_write (t->fd, buf, len);
-      if (writ < 0)
-        return -1;
-      if (!writ)
-        sleep (1);
+    writ = wrap_write (t->fd, buf, len);
+    if (writ < 0)
+      return -1;
+    if (!writ)
+      sleep (1);
 
-      buf += writ;
-      len -= writ;
-      done += writ;
-    }
+    buf += writ;
+    len -= writ;
+    done += writ;
+  }
   while (len);
 
 
   return done;
 }
 
-TTY * ptty_open(char *path,char *argv[])
+TTY *
+ptty_open (char *path, char *argv[], CRT_Pos * size)
 {
   PTTY *t;
   pid_t child;
   char name[1024];
   struct winsize winsize = { 0 };
-  struct termios termios;
+  struct termios ctermios = { 0 };
   int fd;
-  char *default_argv={"-",(char *) 0};
+  char *default_argv[] = { "-", (char *) 0 };
 
-  child = forkpty (&fd, name, &termios, &winsize);
 
-  switch (child)
-    {
-    case -1:                   /*boo hiss */
-      return -1;
-    case 0:                    /*waaah */
-      setenv ("TERM", "vt102", 1);
-      setenv ("LANG", "C", 1);
-       if (!path) 
-               path="/bin/sh";
-       if (!argv) 
-               argv=default_argv;
-               
-      execv (path,argv);
-      _exit (-1);
-    }
+  client_termios (&ctermios);
+  winsize.ws_row = size ? size->y : VT102_ROWS_24;
+  winsize.ws_col = size ? size->x : VT102_COLS_80;
 
-  set_nonblocking (fd);
+  child = forkpty (&fd, name, &ctermios, &winsize);
 
-  t=(PTTY*) malloc(sizeof(PTTY));
+  switch (child) {
+  case -1:                     /* boo hiss */
+    return NULL;
+  case 0:                      /* waaah */
+    setenv ("TERM", "xterm", 1);
+    if (!path)
+      path = "/bin/sh";
 
-  strncpy(t->name,name,sizeof(t->name));
-  t->name[sizeof(t->name)-1]=0;
+    if (!argv)
+      argv = default_argv;
 
-  t->read=ptty_read;
-  t->write=ptty_write;
-  t->close=ptty_close;
+    if (path[0] == '/')
+      execv (path, argv);
+    else
+      execvp (path, argv);
 
-  default_termios (&termios);
+    _exit (-1);
+  }
 
-  winsize.ws_row = VT102_ROWS;
-  winsize.ws_col = VT102_COLS;
+  set_nonblocking (fd);
 
-  t->fd = open_fd_to_pty (path,argv);
-  t->pid=child;
-  t->rfd=t->fd;
-  t->wfd=0;
+#if 0
+  {
+    struct termios termios = { 0 };
+
+    tcgetattr (fd, &termios);
+    default_termios (&termios);
+    tcsetattr (fd, TCSANOW, &termios);
+  }
+#endif
+
+  t = (PTTY *) xmalloc (sizeof (PTTY));
+
+  strncpy (t->name, name, sizeof (t->name));
+  t->name[sizeof (t->name) - 1] = 0;
+
+  t->recv = ptty_read;
+  t->xmit = ptty_write;
+  t->close = ptty_close;
+  t->fd = fd;
+  t->child = child;
+  t->rfd = t->fd;
+  t->wfd = t->fd;
+  t->size.x = winsize.ws_row;
+  t->size.y = winsize.ws_col;
+  t->blocked = 0;
+  t->hanging_up = 0;
 
   return (TTY *) t;
 }