/* * sympathy.c: * * Copyright (c) 2008 James McKenzie , * All rights reserved. * */ static char rcsid[] = "$Id$"; /* * $Log$ * Revision 1.5 2008/02/13 18:05:06 james * *** empty log message *** * * 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 #include "client.h" #include "clients.h" int main (int argc,char *argv[]) { fd_set rfds, wfds; ANSI a = { 0 }; Context c; Socket *s, *cs; Clients *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 (&rfds); FD_ZERO (&wfds); tty_pre_select (c.t, &rfds,&wfds); tty_pre_select (a.terminal, &rfds,&wfds); socket_pre_select (s, &rfds, &wfds); clients_pre_select (clients,&rfds,&wfds); select (FD_SETSIZE, &rfds, NULL, NULL, &tv); cs = socket_post_select (s, &rfds, &wfds); if (cs) { /*New client connexion */ clients_new_client (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"); }