chiark / gitweb /
*** empty log message ***
[sympathy.git] / apps / client.c
index 54f4c337ba57e9183cb653837d6e11e13c8843a7..90bcf609bd2528e7000db6295082d92137b9eca6 100644 (file)
@@ -10,6 +10,9 @@ static char rcsid[] = "$Id$";
 
 /*
  * $Log$
+ * Revision 1.3  2008/02/14 02:46:44  james
+ * *** empty log message ***
+ *
  * Revision 1.2  2008/02/14 00:57:58  james
  * *** empty log message ***
  *
@@ -21,21 +24,44 @@ static char rcsid[] = "$Id$";
 #include <sympathy.h>
 #include "client.h"
 
-static void client_msg(s)
+static void
+server_msg (IPC_Msg * m, Context * c)
 {
-          printf ("%p [%d] %s\n", s->msg, s->msg->hdr.size , s->msg->debug.msg );
-
-
+  switch (m->hdr.type)
+    {
 
+    case IPC_MSG_TYPE_NOOP:
+      break;
+    case IPC_MSG_TYPE_DEBUG:
+//          fprintf (stderr,"%p [%d] %s\n", m, m->hdr.size , m->debug.msg );
+      break;
+    case IPC_MSG_TYPE_HISTORY:
+      history_add (c->h, m->history.history.line);
+      break;
+    case IPC_MSG_TYPE_VT102:
+      if (sizeof (VT102) != m->vt102.len)
+        abort ();
+
+      *(c->v) = m->vt102.vt102;
+      break;
+    case IPC_MSG_TYPE_TERM:
+      vt102_parse (c, m->term.term, m->term.len);
+      break;
+    default:
+      fprintf (stderr, "Unhandeled message type %d\n", m->hdr.type);
+    }
 }
+
 void
 client (void)
 {
   Socket *s;
   fd_set rfds, wfds;
 
-  s = socket_connect ("socket");
+  ANSI a = { 0 };
+  Context c;
 
+  s = socket_connect ("socket");
 
   if (!s)
     {
@@ -43,25 +69,47 @@ client (void)
       return;
     }
 
+  c.t = NULL;
+  c.v = vt102_new ();
+  c.h = history_new (200);
+  c.l = NULL;
+  c.k = keydis_ipc_new (s);
+
+  terminal_register_handlers ();
+  a.terminal = terminal_open (0, 1);
+
+  ansi_reset (&a, NULL);
+
   for (;;)
     {
       struct timeval tv = { 0, 100000 };
 
-
       FD_ZERO (&rfds);
       FD_ZERO (&wfds);
 
       socket_pre_select (s, &rfds, &wfds);
+      tty_pre_select (a.terminal, &rfds, &wfds);
 
       select (FD_SETSIZE, &rfds, &wfds, NULL, &tv);
 
-      socket_post_select (s, &rfds, &wfds);
+      if (socket_post_select (s, &rfds, &wfds))
+        break;
 
       while (s->msg)
         {
-         client_msg(s);
+          server_msg (s->msg, &c);
           socket_consume_msg (s);
         }
+
+      if (ansi_dispatch (&a, &c))
+        break;
+
+      ansi_update (&a, &c);
+
     }
+  ansi_terminal_reset (&a);
+  terminal_atexit ();
+  printf ("QUAT\n");
+
 
 }