annotate lib-src/=timer.c @ 977:2579e1f43daa

Initial revision
author Jim Blandy <jimb@redhat.com>
date Wed, 12 Aug 1992 15:16:36 +0000
parents cc82116a8f1c
children 61c6983219ff
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
1 /*
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
2 * timer.c --- daemon to provide a tagged interval timer service
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
3 *
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
4 * This little daemon runs forever waiting for signals. SIGIO (or SIGUSR1)
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
5 * causes it to read an event spec from stdin; that is, a date followed by
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
6 * colon followed by an event label. SIGALRM causes it to check its queue
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
7 * for events attached to the current second; if one is found, its label
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
8 * is written to stdout. SIGTERM causes it to terminate, printing a list
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
9 * of pending events.
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
10 *
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
11 * This program is intended to be used with the lisp package called timer.el.
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
12 * It was written anonymously in 1990. This version was documented and
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
13 * rewritten for portability by esr@snark,thyrsus.com, Aug 7 1992.
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
14 */
45
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
15 #include <stdio.h>
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
16 #include <signal.h>
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
17 #include <fcntl.h> /* FASYNC */
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
18 #include <sys/types.h> /* time_t */
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
19
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
20 #include "../src/config.h"
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
21 #ifdef USG
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
22 #undef SIGIO
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
23 #define SIGIO SIGUSR1
45
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
24 #endif
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
25
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
26 extern int errno;
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
27 extern char *sys_errlist[], *malloc();
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
28 extern time_t time();
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
29
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
30 #define MAXEVENTS 256
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
31
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
32 /*
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
33 * The field separator for input. This character shouldn't be legal in a date,
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
34 * and should be printable so event strings are readable by people. Was
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
35 * originally ';', then got changed to bogus `\001'.
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
36 */
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
37 #define FS '@'
45
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
38
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
39 struct event
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
40 {
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
41 char *token;
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
42 time_t reply_at;
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
43 }
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
44 events[MAXEVENTS];
45
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
45
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
46 char *pname; /* programme name for error messages */
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
47
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
48 /* Accepts a string of two fields seperated by FS.
45
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
49 * First field is string for getdate, saying when to wake-up.
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
50 * Second field is a token to identify the request.
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
51 */
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
52 void schedule(str)
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
53 char *str;
45
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
54 {
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
55 extern time_t getdate();
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
56 extern char *strcpy();
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
57 time_t now;
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
58 register char *p;
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
59 static struct event *ep;
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
60
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
61 #ifdef DEBUG
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
62 (void) fprintf(stderr, "Timer sees: %s", str);
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
63 #endif /* DEBUG */
45
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
64
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
65 /* check entry format */
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
66 for(p = str; *p && *p != FS; p++)
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
67 continue;
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
68 if (!*p)
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
69 {
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
70 (void)fprintf(stderr, "%s: bad input format: %s", pname, str);
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
71 return;
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
72 }
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
73 *p++ = 0;
45
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
74
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
75 /* allocate an event slot */
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
76 for(ep = events; ep < events + MAXEVENTS; ep++)
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
77 if (ep->token == (char *)NULL)
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
78 break;
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
79 if (ep == events + MAXEVENTS)
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
80 (void) fprintf(stderr, "%s: too many events: %s", pname, str);
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
81
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
82 /* don't allow users to schedule events in past time */
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
83 else if ((ep->reply_at = get_date(str, NULL)) - time(&now) < 0)
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
84 (void)fprintf(stderr, "%s: bad time spec: %s%c%s", pname, str, FS, p);
45
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
85
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
86 /* save the event description */
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
87 else if ((ep->token = malloc((unsigned)strlen(p) + 1)) == NULL)
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
88 (void)fprintf(stderr, "%s: malloc %s: %s%c%s",
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
89 pname, sys_errlist[errno], str, FS, p);
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
90 else
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
91 {
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
92 (void)strcpy(ep->token, p);
45
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
93
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
94 #ifdef DEBUG
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
95 (void) fprintf(stderr,
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
96 "New event: %ld: %s", ep->reply_at, ep->token);
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
97 #endif /* DEBUG */
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
98 }
45
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
99 }
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
100
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
101 void
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
102 notify()
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
103 {
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
104 time_t now, tdiff, waitfor = -1;
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
105 register struct event *ep;
45
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
106
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
107 now = time((time_t *)NULL);
45
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
108
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
109 for(ep = events; ep < events + MAXEVENTS; ep++)
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
110 if (ep->token)
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
111 {
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
112 /* any events ready to fire? */
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
113 if (ep->reply_at <= now)
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
114 {
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
115 #ifdef DEBUG
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
116 (void) fprintf(stderr,
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
117 "Event %d firing: %ld @ %s",
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
118 (ep - events), ep->reply_at, ep->token);
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
119 #endif /* DEBUG */
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
120 (void)fputs(ep->token, stdout);
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
121 free(ep->token);
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
122 ep->token = (char *)NULL;
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
123 }
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
124 else
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
125 {
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
126 #ifdef DEBUG
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
127 (void) fprintf(stderr,
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
128 "Event %d still waiting: %ld @ %s",
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
129 (ep - events), ep->reply_at, ep->token);
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
130 #endif /* DEBUG */
45
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
131
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
132 /* next timeout should be the soonest of any remaining */
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
133 if ((tdiff = ep->reply_at - now) < waitfor || waitfor < 0)
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
134 waitfor = (long)tdiff;
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
135 }
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
136 }
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
137
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
138 /* If there's no more events, SIGIO should be next wake-up */
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
139 if (waitfor != -1)
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
140 {
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
141 #ifdef DEBUG
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
142 (void) fprintf(stderr,
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
143 "Setting %d-second alarm\n", waitfor);
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
144 #endif /* DEBUG */
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
145 (void)alarm(waitfor);
45
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
146 }
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
147 }
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
148
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
149 void
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
150 getevent()
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
151 {
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
152 extern char *fgets();
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
153 struct event *ep;
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
154 char buf[BUFSIZ];
45
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
155
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
156 /* in principle the itimer should be disabled on entry to this function,
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
157 but it really doesn't make any important difference if it isn't */
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
158
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
159 if (fgets(buf, sizeof(buf), stdin) == NULL)
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
160 exit(0);
45
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
161
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
162 /* register the event */
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
163 schedule(buf);
45
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
164
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
165 /* Who knows what this interrupted, or if it said "now"? */
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
166 notify();
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
167 }
45
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
168
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
169 void
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
170 sigcatch(sig)
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
171 /* dispatch on incoming signal, then restore it */
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
172 {
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
173 struct event *ep;
45
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
174
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
175 switch(sig)
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
176 {
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
177 case SIGALRM:
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
178 #ifdef DEBUG
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
179 (void) fprintf(stderr, "Alarm signal received\n");
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
180 #endif /* DEBUG */
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
181 notify();
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
182 break;
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
183 case SIGIO:
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
184 getevent();
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
185 break;
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
186 case SIGTERM:
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
187 (void) fprintf(stderr, "Events still queued:\n");
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
188 for (ep = events; ep < events + MAXEVENTS; ep++)
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
189 if (ep->token)
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
190 (void) fprintf(stderr, "%d = %ld @ %s",
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
191 ep - events, ep->reply_at, ep->token);
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
192 exit(0);
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
193 break;
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
194 }
45
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
195
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
196 /* required on older UNIXes; harmless on newer ones */
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
197 (void) signal(sig, sigcatch);
45
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
198 }
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
199
45
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
200 /*ARGSUSED*/
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
201 int
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
202 main(argc, argv)
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
203 int argc;
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
204 char **argv;
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
205 {
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
206 for (pname = argv[0] + strlen(argv[0]); *pname != '/' && pname != argv[0];
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
207 pname--);
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
208 if (*pname == '/') pname++;
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
209
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
210 (void)signal(SIGIO, sigcatch);
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
211 (void)signal(SIGALRM, sigcatch);
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
212 (void)signal(SIGTERM, sigcatch);
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
213
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
214 #ifndef USG
45
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
215 (void)fcntl(0, F_SETFL, FASYNC);
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
216 #endif /* USG */
45
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
217
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
218 while (1) pause();
a55a3ac41924 Initial revision
root <root>
parents:
diff changeset
219 }
958
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
220
cc82116a8f1c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
221 /* timer.c ends here */