chiark / gitweb /
*** empty log message ***
[sympathy.git] / src / libsympathy.c
index 40f8a9d247498b867d1bf21f5116dd2e1d8f3f20..d8eb76fc39962c5f741b5d0d4ffd82e1792a6171 100644 (file)
@@ -6,10 +6,23 @@
  *
  */
 
-static char rcsid[] = "$Id$";
+static char rcsid[] =
+  "$Id$";
 
 /*
  * $Log$
+ * Revision 1.5  2008/02/06 17:53:28  james
+ * *** empty log message ***
+ *
+ * Revision 1.4  2008/02/04 20:23:55  james
+ * *** empty log message ***
+ *
+ * Revision 1.3  2008/02/04 05:45:55  james
+ * ::
+ *
+ * Revision 1.2  2008/02/04 02:05:06  james
+ * *** empty log message ***
+ *
  * Revision 1.1  2008/02/03 16:20:24  james
  * *** empty log message ***
  *
@@ -18,3 +31,88 @@ static char rcsid[] = "$Id$";
 
 #include "project.h"
 
+struct termios old = { 0 };
+static int had_winch=0;
+
+static void quit (int not)
+{
+  tcsetattr (0, TCSANOW, &old);
+  exit (1);
+}
+
+static void winch (int not)
+{
+  had_winch++;
+}
+
+
+void
+testy (void)
+{
+  struct termios raw = { 0 };
+  VT102 v = { 0 };
+  ANSI a = { 0 };
+  fd_set rfd;
+  int fd;
+  char c;
+
+
+  signal (SIGINT, quit);
+{
+struct sigaction sa={0};
+
+sa.sa_handler=winch;
+sa.sa_flags=SA_RESTART;
+sigaction(SIGWINCH,&sa,NULL);
+}
+  
+
+  tcgetattr (0, &old);
+  tcgetattr (0, &raw);
+  cfmakeraw (&raw);
+  tcsetattr (0, TCSANOW, &raw);
+
+  a.fd = 1;
+
+  vt102_reset (&v);
+  ansi_reset (&a);
+
+
+  fd = open_fd_to_bash ();
+
+  FD_ZERO (&rfd);
+
+
+  for (;;)
+    {
+       struct timeval tv={0,100000};
+
+      FD_SET (fd, &rfd);
+      FD_SET (0, &rfd);
+      if (select (fd + 1, &rfd, NULL, NULL, &tv)<0) continue; 
+
+      if (FD_ISSET (0, &rfd))
+        {
+          if ((read (0, &c, 1) <= 0) || (c == 3))
+            break;
+
+          write (fd, &c, 1);
+        }
+      if (FD_ISSET (fd, &rfd))
+        {
+          if ((read (fd, &c, 1) <= 0))
+            break;
+          //write (1, &c, 1);
+          vt102_parse_char (&v, c);
+          ansi_draw (&a, &v.crt);
+        }
+       if (had_winch) {
+               had_winch=0;
+               ansi_getsize(&a);
+               ansi_reset(&a);
+               ansi_draw (&a, &v.crt);
+       }
+    }
+  tcsetattr (0, TCSANOW, &old);
+  printf ("QUAT\n");
+}