1*22123Smckusick /* 2*22123Smckusick * Copyright (c) 1985 Regents of the University of California. 3*22123Smckusick * All rights reserved. The Berkeley software License Agreement 4*22123Smckusick * specifies the terms and conditions for redistribution. 5*22123Smckusick */ 618339Sserge 7*22123Smckusick #ifndef lint 8*22123Smckusick static char sccsid[] = "@(#)ualarm.c 5.1 (Berkeley) 06/05/85"; 9*22123Smckusick #endif not lint 10*22123Smckusick 1118339Sserge #include <sys/time.h> 1218339Sserge 1318339Sserge #define USPS 1000000 /* # of microseconds in a second */ 1418339Sserge 1518339Sserge /* 1618339Sserge * Generate a SIGALRM signal in ``usecs'' microseconds. 1718339Sserge * If ``reload'' is non-zero, keep generating SIGALRM 1818339Sserge * every ``reload'' microseconds after the first signal. 1918339Sserge */ 2018339Sserge unsigned 2118339Sserge ualarm(usecs, reload) 2218339Sserge register unsigned usecs; 2318339Sserge register unsigned reload; 2418339Sserge { 2518339Sserge struct itimerval new, old; 2618339Sserge 2718339Sserge new.it_interval.tv_usec = reload % USPS; 2818339Sserge new.it_interval.tv_sec = reload / USPS; 2918339Sserge 3018339Sserge new.it_value.tv_usec = usecs % USPS; 3118339Sserge new.it_value.tv_sec = usecs / USPS; 3218339Sserge 3318339Sserge if (setitimer(ITIMER_REAL, &new, &old) == 0) 3418339Sserge return (old.it_value.tv_sec * USPS + old.it_value.tv_usec); 3518339Sserge /* else */ 3618339Sserge return (-1); 3718339Sserge } 38