/*  DO NOT EDIT THIS FILE.

    It has been auto-edited by fixincludes from:

	"fixinc/tests/inc/sys/time.h"

    This had to be done to correct non-standard usages in the
    original, manufacturer supplied header file.  */



#if defined( HPUX_SYSTIME_CHECK )
struct sigevent;
#endif  /* HPUX_SYSTIME_CHECK */


#if defined( LYNXOS_NO_WARNING_IN_SYS_TIME_H_CHECK )

#endif  /* LYNXOS_NO_WARNING_IN_SYS_TIME_H_CHECK */


#if defined( ULTRIX_SYS_TIME_CHECK )
@(#)time.h      6.1     (ULTRIX)
extern time_t		time( time_t *__tloc );

extern int adjtime(struct timeval *, struct timeval *);
extern int getitimer(int, struct itimerval *);
extern int setitimer(int, struct itimerval *, struct itimerval *);
extern int gettimeofday(struct timeval *, struct timezone *);
extern int settimeofday(struct timeval *, struct timezone *);
extern void profil(const void *, size_t, size_t, unsigned int);
extern int stime(const time_t *);
extern int utimes(const char *, const struct timeval[2]);
extern int select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
extern double difftime();
extern	int adjtime();
extern	int getitimer();
extern	int setitimer();
extern	int gettimeofday();
extern	int settimeofday();
extern	void profil();
extern	int stime();
extern	int utimes();
extern	int select();

#endif  /* ULTRIX_SYS_TIME_CHECK */
