/* Fixit routines for the svr4 port... */

/* Reliable signals */
/* This was taken from Stevens... */

#include <signal.h>

typedef void Sigfunc(int);

Sigfunc *signal(int signo, Sigfunc *func)
{
  struct sigaction act, oact;

  act.sa_handler = func;
  sigemptyset(&act.sa_mask);
  act.sa_flags = 0;
  if (signo != SIGALRM) {
    act.sa_flags |= SA_RESTART;
  }
  if (sigaction(signo, &act, &oact) < 0)
    return(SIG_ERR);
  return(oact.sa_handler);
}
#include <sys/types.h>
#include <sys/times.h>
#include <sys/time.h>
#include <limits.h>
struct rusage {
	struct timeval ru_utime;
	struct timeval ru_stime;
	}
#define RUSAGE_SELF	0
#define RUSAGE_CHILDREN	-1
#define USEC 1000000
getrusage(mode,r)int mode; struct rusage *r;{
	struct tms tms_r;
	times(&tms_r);
	if(mode==RUSAGE_SELF){
		r->ru_utime.tv_sec=tms_r.tms_utime/CLK_TCK;
		r->ru_utime.tv_usec=
			(tms_r.tms_utime-(r->ru_utime.tv_sec*CLK_TCK)) *
				(USEC/CLK_TCK);
		r->ru_stime.tv_sec=tms_r.tms_stime/CLK_TCK;
		r->ru_stime.tv_usec=
			(tms_r.tms_stime-(r->ru_stime.tv_sec*CLK_TCK)) *
				(USEC/CLK_TCK);
		}
	else {
		r->ru_utime.tv_sec=tms_r.tms_cutime/CLK_TCK;
		r->ru_utime.tv_usec=
			(tms_r.tms_cutime-(r->ru_utime.tv_sec*CLK_TCK)) *
				(USEC/CLK_TCK);
		r->ru_stime.tv_sec=tms_r.tms_cstime/CLK_TCK;
		r->ru_stime.tv_usec=
			(tms_r.tms_cstime-(r->ru_stime.tv_sec*CLK_TCK)) *
				(USEC/CLK_TCK);
		}
	}
ftime(tp)register struct timeb *tp;{
	struct timeval tv;
	gettimeofday(&tv);
	tp->time=tv.tv_sec;
	tp->millitm=tv.tv_usec/100;
	tp->timezone=0;
	tp->dstflag=1;
	}
wait3(statusp,options,rusage)int *statusp;struct rusage * rusage;{
	return(waitpid(0,statusp,options));
	}
