/[ipchat]/ipchat/test/test_demux.c
ViewVC logotype

Diff of /ipchat/test/test_demux.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1 by beatk, Fri Mar 25 13:51:57 2005 UTC revision 1.2 by beatk, Fri Mar 25 17:12:51 2005 UTC
# Line 3  Line 3 
3  #include <signal.h>  #include <signal.h>
4  #include "demux.h"  #include "demux.h"
5    
6    typedef struct {
7            unsigned long int seconds;
8            int pos;
9    } timer_data;
10    
11    timer_id timer[1024];
12    int ntim = 0, gi;
13    #define ADD_TIMER(id) if (ntim < 1024) timer[ntim++] = (id)
14    #define DEL_TIMER(id) for (gi = 0; gi < ntim; gi++) \
15                                    if (timer[gi] == id) timer[gi] = NULL;
16    
17  void sighandler (int sig)  void sighandler (int sig)
18  {  {
19          printf ("Signal: %d\n", sig);          printf ("Signal: %d\n", sig);
# Line 10  void sighandler (int sig) Line 21  void sighandler (int sig)
21    
22  static void cb_timer (void *data)  static void cb_timer (void *data)
23  {  {
24          printf ("Timer: %lu\n", *(unsigned long int *)data);          timer_data *datum = (timer_data *)data;
25          free (data);          printf ("Timer: %lu\n", datum->seconds);
26            timer[datum->pos] = NULL;
27            free (datum);
28          dmx_remove_signal (SIGUSR2);          dmx_remove_signal (SIGUSR2);
29  }  }
30    
31  static void cb_periodic (void *data)  static void cb_periodic (void *data)
32  {  {
33          printf ("Alarm: %lu\n", *(unsigned long int *)data);          printf ("Alarm: %lu\n", ((timer_data *)data)->seconds);
34  }  }
35    
36  static void cb_input (int fd, void *data)  static void cb_input (int fd, void *data)
37  {  {
38          unsigned long int seconds;          unsigned long int seconds;
39          unsigned long int shift;          unsigned long int shift;
40          unsigned long int *datum;          timer_data *datum;
41          timer_id id;          timer_id id;
42          int c, i;          int c, i;
43    
         static timer_id timer[1024];  
         static int ntim = 0;  
 #       define ADD_TIMER(id) if (ntim < 1024) timer[ntim++] = (id)  
   
44          switch (c = getchar()) {          switch (c = getchar()) {
45                  case 't':                  case 't':
46                          scanf ("%lu", &seconds);                          scanf ("%lu", &seconds);
47                          datum = malloc (sizeof(unsigned long int));                          datum = malloc (sizeof(*datum));
48                          *datum = seconds;                          datum->seconds = seconds;
49                            datum->pos = ntim;
50                          id = dmx_add_timer (seconds, cb_timer, datum);                          id = dmx_add_timer (seconds, cb_timer, datum);
51                          ADD_TIMER (id);                          ADD_TIMER (id);
52                          printf ("Timer added: %08x\n", id);                          printf ("Timer added: %08x\n", id);
53                          break;                          break;
54                  case 'p':                  case 'p':
55                          scanf ("%lu %lu", &seconds, &shift);                          scanf ("%lu %lu", &seconds, &shift);
56                          datum = malloc (sizeof(unsigned long int));                          datum = malloc (sizeof(*datum));
57                          *datum = seconds;                          datum->seconds = seconds;
58                            datum->pos = ntim;
59                          id = dmx_add_periodic_alarm (seconds, shift,                          id = dmx_add_periodic_alarm (seconds, shift,
60                                                       cb_periodic, datum);                                                       cb_periodic, datum);
61                          ADD_TIMER (id);                          ADD_TIMER (id);
# Line 56  static void cb_input (int fd, void *data Line 67  static void cb_input (int fd, void *data
67                          printf ("Timer/alarm removed: %08x\n", id);                          printf ("Timer/alarm removed: %08x\n", id);
68                          if (datum)                          if (datum)
69                                  free (datum);                                  free (datum);
70                          for (i = 0; i < ntim; i++)                          DEL_TIMER (id);
                                 if (timer[i] == id) timer[i] = NULL;  
71                          break;                          break;
72                  case 'l':                  case 'l':
73                          printf ("--\n");                          printf ("--\n");

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26