This is timer.c in view mode; [Download] [Up]
#include <stdio.h>
#include <signal.h>
#include <sys/time.h>
#define USPS 1000000 /* number of microseconds in a second */
#define TICK 10000 /* system clock resolution in microseconds */
static int ringring;
static void (*ofunc)();
static void
sleepx()
{
ringring = 1;
}
void
set_timer(n)
unsigned n;
{
struct itimerval itv;
register struct itimerval *itp = &itv;
if (n == 0)
{
ringring = 1;
return;
}
timerclear(&itp->it_interval);
itp->it_value.tv_sec = n / USPS;
itp->it_value.tv_usec = n % USPS;
ofunc = (void (*)())signal(SIGALRM, sleepx);
ringring = 0;
(void) setitimer(ITIMER_REAL, itp, (struct itimerval *)0);
}
#ifndef sigmask
#define sigmask(m) (1 << ((m)-1))
#endif
void
wait_timer()
{
while (!ringring)
sigpause( ~sigmask(SIGALRM));
signal(SIGALRM, ofunc);
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.