This is uw_clk.c in view mode; [Download] [Up]
/* * uw_clk - timer support for UW * * Copyright 1986 by John D. Bruner. All rights reserved. Permission to * copy this program is given provided that the copy is not sold and that * this copyright notice is included. */ #include <sys/types.h> #include <sys/time.h> #include <sys/signal.h> #include <sys/resource.h> #include "uw_param.h" #include "uw_clk.h" static struct timeout *pending; static struct timeout *freelist; int timer_rdy; /* nonzero when some timeout is ready to run */ clk_timeout(secs, fn, arg) int secs; void (*fn)(); toarg_t arg; { register struct timeout *to, **tol; register time_t curtime; extern time_t time(); to = freelist; if (!to) { if (!(to = (struct timeout *)malloc(sizeof *to))) return(-1); } else freelist = to->to_next; to->to_fn = fn; to->to_arg = arg; if (secs < 0) secs = 0; curtime = time((time_t *)0); to->to_when = curtime + secs; tol = &pending; while (*tol && to->to_when > (*tol)->to_when) tol = &(*tol)->to_next; to->to_next = *tol; *tol = to; clk_service(); return(0); } clk_service() { register struct timeout *to; register time_t curtime; curtime = time((time_t *)0); while ((to=pending) && to->to_when <= curtime) { pending = to->to_next; if (to->to_fn) { (*to->to_fn)(to->to_arg); to->to_next = freelist; freelist = to; } } timer_rdy = 0; if (pending) (void)alarm((unsigned)(pending->to_when - curtime)); } void clk_alarm() { /* * A SIGALRM has been received. */ timer_rdy = 1; } clk_init() { timer_rdy = 0; (void)signal(SIGALRM, clk_alarm); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.