#include int patty_timer_expired(struct timeval *timer) { return (timer->tv_sec <= 0 && timer->tv_usec == 0)? 1: 0; } void patty_timer_cancel(struct timeval *timer) { timer->tv_sec = 0; timer->tv_usec = 0; } void patty_timer_start(struct timeval *timer, struct timeval *target, time_t ms) { timer->tv_sec = ms / 1000; timer->tv_usec = (ms % 1000) * 1000; if (timercmp(timer, target, >)) { struct timeval res; timeradd(timer, target, &res); timer->tv_sec = res.tv_sec; timer->tv_usec = res.tv_usec; } } void patty_timer_tick(struct timeval *timer, struct timeval *elapsed) { struct timeval res; timersub(timer, elapsed, &res); timer->tv_sec = res.tv_sec; timer->tv_usec = res.tv_usec; }