/* * sympathy.c: * * Copyright (c) 2008 James McKenzie , * All rights reserved. * */ static char rcsid[] = "$Id$"; /* * $Log$ * Revision 1.4 2008/02/13 17:21:55 james * *** empty log message *** * * Revision 1.3 2008/02/08 15:06:52 james * *** empty log message *** * * Revision 1.2 2008/02/07 15:42:49 james * *** empty log message *** * * Revision 1.1 2008/02/05 14:25:49 james * *** empty log message *** * */ #include "sympathy.h" #include void main (int argc,char *argv[]) { fd_set rfd, wfd; ANSI a = { 0 }; Context c; Socket *s, *cs; Client **clients; s = socket_listen ("socket"); c.t = ptty_open (NULL, NULL); c.v = vt102_new (); c.h = history_new (200); c.l = file_log_new ("log"); terminal_register_handlers (); a.terminal = terminal_open (0, 1); ansi_reset (&a, NULL); clients=clients_new(); for (;;) { struct timeval tv = { 0, 100000 }; FD_ZERO (&rfd); FD_ZERO (&wfd); tty_pre_select (c.t, &rfd); tty_pre_select (a.terminal, &rfd); socket_pre_select (s, &rfd, &wfd); client_pre_select (clients); select (FD_SETSIZE, &rfd, NULL, NULL, &tv); cs = socket_post_select (s, &rfd, &wfd); if (cs) { /*New client connexion */ clients_new (clients, cs, c); } clients_post_select (clients, c, &rfds, &wfds); if (FD_ISSET (c->t->rfd, &rfds)) { char buf[1024]; int red; red = c->t->recv (c->t, buf, sizeof (buf)); if (red < 0) break; if (red) { clients_output (clients, buf, red); vt102_parse (c, buf, red); } } ansi_dispatch (&a, &c); ansi_update (&a, &c); } clients_shutdown (clients); ansi_terminal_reset (&a); terminal_atexit (); printf ("QUAT\n"); }