chiark / gitweb /
*** empty log message ***
[sympathy.git] / apps / mainloop.c
index fd8f9821525d0d98b15f316203770e39c5c40122..9737bd29439f545c8a3ebc162708715bf74615a0 100644 (file)
@@ -6,10 +6,50 @@
  *
  */
 
-static char rcsid[] = "$Id$";
+static char rcsid[] =
+  "$Id$";
 
 /*
  * $Log$
+ * Revision 1.20  2008/02/28 16:57:51  james
+ * *** empty log message ***
+ *
+ * Revision 1.19  2008/02/28 16:37:16  james
+ * *** empty log message ***
+ *
+ * Revision 1.18  2008/02/28 11:27:48  james
+ * *** empty log message ***
+ *
+ * Revision 1.17  2008/02/27 09:42:53  james
+ * *** empty log message ***
+ *
+ * Revision 1.16  2008/02/27 09:42:21  james
+ * *** empty log message ***
+ *
+ * Revision 1.15  2008/02/27 01:31:38  james
+ * *** empty log message ***
+ *
+ * Revision 1.14  2008/02/27 01:31:14  james
+ * *** empty log message ***
+ *
+ * Revision 1.13  2008/02/26 23:56:12  james
+ * *** empty log message ***
+ *
+ * Revision 1.12  2008/02/26 23:23:16  james
+ * *** empty log message ***
+ *
+ * Revision 1.11  2008/02/24 00:43:55  james
+ * *** empty log message ***
+ *
+ * Revision 1.10  2008/02/23 13:05:57  staffcvs
+ * *** empty log message ***
+ *
+ * Revision 1.9  2008/02/23 11:48:51  james
+ * *** empty log message ***
+ *
+ * Revision 1.8  2008/02/22 23:39:30  james
+ * *** empty log message ***
+ *
  * Revision 1.7  2008/02/20 20:16:07  james
  * *** empty log message ***
  *
@@ -75,6 +115,8 @@ static char rcsid[] = "$Id$";
 
 #include "clients.h"
 
+Context *context;
+
 typedef struct
 {
   int nclients;
@@ -297,8 +339,29 @@ check_status (Context * c, Clients * cs)
     sprintf (ptr, ", %d client%s", status.nclients,
              (status.nclients == 1) ? "" : "s");
 
+  if (c->tp->biterrs)
+    {
+
+      ptr +=
+        sprintf (ptr, ", %d err%s", c->tp->biterrs,
+                 (c->tp->biterrs == 1) ? "" : "s");
+
+      if (c->tp->guessed_baud == -1)
+        {
+          ptr += sprintf (ptr, " try higher");
+        }
+      else if (c->tp->guessed_baud > 0)
+        {
+          ptr += sprintf (ptr, " try %db", c->tp->guessed_baud);
+        }
+    }
+
   *ptr = 0;
 
+#if 0
+  log_f (c->l, "%s:%d %s", __FILE__, __LINE__, buf);
+#endif
+
   if (cs)
     send_status (cs, buf);
   else
@@ -308,7 +371,7 @@ check_status (Context * c, Clients * cs)
 
 
 static int
-msg_from_server (ANSI *a,IPC_Msg * m, Context * c)
+msg_from_server (ANSI * a, IPC_Msg * m, Context * c)
 {
   switch (m->hdr.type)
     {
@@ -327,14 +390,14 @@ msg_from_server (ANSI *a,IPC_Msg * m, Context * c)
 
       *(c->v) = m->vt102.vt102;
 
-      if (a->one_shot) {
-               a->one_shot(a,&c->v->crt);
-               return 1;
-       }
-      //FIXME HTML hook
+      if (a->one_shot)
+        {
+          a->one_shot (a, &c->v->crt);
+          return 1;
+        }
       break;
     case IPC_MSG_TYPE_TERM:
-      vt102_parse (c, m->term.term, m->term.len);
+      tty_parse (c, m->term.term, m->term.len);
       break;
     case IPC_MSG_TYPE_STATUS:
       cmd_new_status (c->d, c, m->status.status);
@@ -342,20 +405,24 @@ msg_from_server (ANSI *a,IPC_Msg * m, Context * c)
     default:
       fprintf (stderr, "Unhandeled message type %d\n", m->hdr.type);
     }
-return 0;
+  return 0;
 }
 
 
 void
 mainloop (TTY * tty, Socket * server_socket, Socket * client_socket,
-          ANSI * ansi, Log * log, int nhistory)
+          ANSI * ansi, Log * log, int nhistory, CRT_Pos * size)
 {
   fd_set rfds, wfds;
   Context c = { 0 };
   Clients *clients;
 
+  context = &c;
 
-  c.v = vt102_new ();
+  c.tp = tty_parser_new ();
+  c.u = utf8_new ();
+
+  c.v = vt102_new (size);
   c.h = history_new (nhistory);
   c.l = log;
   /* are we being fed by a tty or a socket */
@@ -385,6 +452,9 @@ mainloop (TTY * tty, Socket * server_socket, Socket * client_socket,
     }
 
 
+  vt102_reset (&c);
+
+
   if (server_socket)
     {
       if (client_socket)
@@ -398,7 +468,7 @@ mainloop (TTY * tty, Socket * server_socket, Socket * client_socket,
 
   for (;;)
     {
-      struct timeval tv = { 1, 0 };
+      struct timeval tv = { 0, 250000 };
 
       if ((c.d) && (c.d->disconnect))
         break;
@@ -464,7 +534,7 @@ mainloop (TTY * tty, Socket * server_socket, Socket * client_socket,
             {
               if (clients)
                 send_output (clients, buf, red);
-              vt102_parse (&c, buf, red);
+              tty_parse (&c, buf, red);
             }
         }
 
@@ -473,18 +543,19 @@ mainloop (TTY * tty, Socket * server_socket, Socket * client_socket,
       /*any data from the server */
       if (client_socket)
         {
-         int one_shot;
+          int one_shot;
           if (socket_post_select (client_socket, &rfds, &wfds))
             break;
 
           while (client_socket->msg)
             {
-              if (msg_from_server (ansi,client_socket->msg, &c))
-               one_shot++;
-               
+              if (msg_from_server (ansi, client_socket->msg, &c))
+                one_shot++;
+
               socket_consume_msg (client_socket);
             }
-               if (one_shot) break;
+          if (one_shot)
+            break;
         }
 
 
@@ -492,10 +563,10 @@ mainloop (TTY * tty, Socket * server_socket, Socket * client_socket,
       if (ansi)
         {
           if (ansi->dispatch)
-               ansi->dispatch (ansi, &c);
+            ansi->dispatch (ansi, &c);
 
-         if (ansi->update)
-          ansi->update (ansi, &c);
+          if (ansi->update)
+            ansi->update (ansi, &c);
         }
     }