aboutsummaryrefslogtreecommitdiffstats
path: root/apps/client.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/client.c')
-rw-r--r--apps/client.c64
1 files changed, 56 insertions, 8 deletions
diff --git a/apps/client.c b/apps/client.c
index 54f4c33..90bcf60 100644
--- a/apps/client.c
+++ b/apps/client.c
@@ -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");
+
}