X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=apps%2Fclient.c;h=90bcf609bd2528e7000db6295082d92137b9eca6;hb=d20265fbf33e22b30b5c2879cff7ae5c22d3fc29;hp=54f4c337ba57e9183cb653837d6e11e13c8843a7;hpb=ca18756e89e072fa067751f421a4f9879596e70b;p=sympathy.git 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 #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"); + }