diff options
author | james <> | 2008-02-14 02:46:45 +0000 |
---|---|---|
committer | james <> | 2008-02-14 02:46:45 +0000 |
commit | bc6a29d06c22bdcada4cb18d8401e5d37f46fd36 (patch) | |
tree | cbe671b5cad8d7af21450915e2e312119ef0406d /apps/client.c | |
parent | e65130e63d050d37b9605339c0abfdcef73c4472 (diff) | |
download | sympathy-bc6a29d06c22bdcada4cb18d8401e5d37f46fd36.tar.gz sympathy-bc6a29d06c22bdcada4cb18d8401e5d37f46fd36.tar.bz2 sympathy-bc6a29d06c22bdcada4cb18d8401e5d37f46fd36.zip |
*** empty log message ***
Diffstat (limited to 'apps/client.c')
-rw-r--r-- | apps/client.c | 64 |
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"); + } |