Jabber WindowGram Client (JWGC)

Introduction Screenshots Installation Downloads
Documentation Browse Source Resources Project Site

Stable Version
-none-

Latest Version
beta5



Main Page | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals

mux.c File Reference

#include "mit-copyright.h"
#include "mux.h"
#include "error.h"
#include "main.h"
#include "pointer.h"

Go to the source code of this file.

Functions

void mux_init ()
void mux_add_input_source (int descriptor, void(*)() handler, pointer arg)
void mux_delete_input_source (int descriptor)
void mux_loop ()

Variables

int mux_end_loop_p


Function Documentation

void mux_add_input_source int  descriptor,
void (*) ()  handler,
pointer  arg
 

Definition at line 90 of file mux.c.

References dPoll, and dprintf().

00094 {
00095         dprintf(dPoll, "Adding handler on fd %d, will call %x(%x)\n",
00096                                 descriptor, handler, arg);
00097         input_handler[descriptor] = handler;
00098         input_handler_arg[descriptor] = arg;
00099         FD_SET(descriptor, &input_sources);
00100         if (descriptor > max_source)
00101                 max_source = descriptor;
00102 }

void mux_delete_input_source int  descriptor  ) 
 

Definition at line 105 of file mux.c.

00107 {
00108         input_handler[descriptor] = NULL;
00109         input_handler_arg[descriptor] = NULL;
00110         FD_CLR(descriptor, &input_sources);
00111 }

void mux_init  ) 
 

Definition at line 67 of file mux.c.

Referenced by main().

00068 {
00069         int i;
00070 
00071         FD_ZERO(&input_sources);
00072 
00073         for (i = 0; i < MAX_SOURCES; i++)
00074                 input_handler[i] = NULL;
00075 
00076         have_tty = check_tty();
00077 }

void mux_loop  ) 
 

Definition at line 129 of file mux.c.

References dPoll, dprintf(), errno, mux_end_loop_p, and NULL.

Referenced by main().

00130 {
00131         int i;
00132         fd_set input_sources_copy;
00133         struct timeval tv;
00134 
00135         mux_end_loop_p = 0;
00136 
00137         for (;;) {
00138                 /*
00139                  * Exit if mux_end_loop_p has been set to true by a handler:
00140                  */
00141                 if (mux_end_loop_p)
00142                         break;
00143 
00144                 if (have_tty) {
00145                         tv.tv_sec = 10;
00146                         tv.tv_usec = 0;
00147                 }
00148                 else {
00149                         tv.tv_sec = tv.tv_usec = 0;
00150                 }
00151 
00152                 /*
00153                  * Do a select on all the file descriptors we care about to
00154                  * wait until at least one of them has input available:
00155                  */
00156                 input_sources_copy = input_sources;
00157 
00158                 i = select(max_source + 1, &input_sources_copy, (fd_set *) 0,
00159                     (fd_set *) NULL, have_tty ? &tv : (struct timeval *) 0);
00160 
00161                 if (i == -1) {
00162                         if (errno == EINTR)
00163                                 continue;       /* on a signal restart
00164                                                  * checking mux_loop_end_p */
00165                         /*
00166                          * else FATAL_TRAP( errno, "while selecting" );
00167                          */
00168                 }
00169                 else if (i == 0) {
00170                         if (have_tty && !check_tty()) {
00171                                 mux_end_loop_p = 1;
00172                                 continue;
00173                         }
00174                 }
00175 
00176                 /*
00177                  * Call all input handlers whose corresponding file descriptors have
00178                  * input:
00179                  */
00180                 for (i = 0; i <= max_source; i++)
00181                         if (FD_ISSET(i, &input_sources_copy) && input_handler[i]) {
00182                                 dprintf(dPoll, "mux_loop...activity on fd %d, calling %x(%x)\n",
00183                                  i, input_handler[i], input_handler_arg[i]);
00184                                 input_handler[i] (input_handler_arg[i]);
00185                         }
00186         }
00187 }


Variable Documentation

int mux_end_loop_p
 

Definition at line 31 of file mux.c.

Referenced by jwg_on_event_handler(), and mux_loop().



Last updated at Tue Dec 18 21:07:42 PST 2007. This site and project hosted by...SourceForge.net Logo

Source Perspective by Fisheye