+oalarm()
+{
+ register struct a {
+ int deltat;
+ } *uap = (struct a *)u.u_ap;
+ register struct proc *p = u.u_procp;
+ struct timeval atv;
+ int s = spl7();
+
+ untimeout(unrto, p);
+ timerclear(&p->p_realtimer.it_interval);
+ u.u_r.r_val1 = 0;
+ if (timerisset(&p->p_realtimer.it_value) &&
+ timercmp(&p->p_realtimer.it_value, &time, >))
+ u.u_r.r_val1 = p->p_realtimer.it_value.tv_sec - time.tv_sec;
+ if (uap->deltat == 0) {
+ splx(s);
+ return;
+ }
+ p->p_realtimer.it_value = time;
+ p->p_realtimer.it_value.tv_sec += uap->deltat;
+ timeout(unrto, p, hzto(&p->p_realtimer.it_value));
+ splx(s);
+}
+