#ifndef _UNISTD_H
#define _UNISTD_H

#ifndef _COMPILER_H
#include <compiler.h>
#endif

/* see Posix standard -- 1003.1 sect 2.10 */

#ifndef NULL
#define NULL __NULL
#endif

#ifndef F_OK
/* file access stuff */
#define	F_OK			0
#define	X_OK			1
#define	W_OK			2
#define	R_OK			4
#endif

#ifndef SEEK_SET
/* lseek() origins */
#define	SEEK_SET	0		/* from beginning of file */
#define	SEEK_CUR	1		/* from current location */
#define	SEEK_END	2		/* from end of file */
#endif

#define _POSIX_JOB_CONTROL
#if 0
#define _POSIX_VERSION		0L		/* <- NON-CONFORMING */
#endif
#define _POSIX_CHOWN_RESTRICTED 0
#define _POSIX_VDISABLE		255

#if 0					/* this depends on the file system */
#define _POSIX_NO_TRUNC		-1
#endif

/* 1003.1 section 8.2.1.2 */
#define STDIN_FILENO	0
#define STDOUT_FILENO	1
#define STDERR_FILENO	2

/* sysconf() values */
#define _SC_LAST	-1	/* max limit # for sysconf - NOT POSIX */
#define _SC_MEMR_MAX	0	/* memory regions per process - NOT POSIX */
#define _SC_ARG_MAX	1	/* max length of cmdln - NOT quite POSIX */
#define _SC_OPEN_MAX	2	/* max # of open files per process - POSIX */
#define _SC_NGROUPS_MAX	3	/* max # supp gids - POSIX */
#define _SC_CHILD_MAX	4	/* max # processes/user - NOT quite POSIX */

/* pathconf() values */
#define _PC_LAST	-1	/* max limit # for pathconf - POSIX (!?) */
#define _PC_IOPEN_MAX	0	/* internal limit on open files - NOT POSIX */
#define _PC_LINK_MAX	1	/* max # of links - POSIX */
#define _PC_PATH_MAX	2	/* max len of a full pathname - POSIX */
#define _PC_NAME_MAX	3	/* max len of individual name - POSIX */
#define _PC_PIPE_BUF	4	/* bytes written atomically to fifo - POSIX */
#define _PC_NO_TRUNC	5	/* filename truncation - POSIX */

__EXTERN __EXITING	_exit	__PROTO((int));
__EXTERN int		access	__PROTO((const char *, int));
__EXTERN int		alarm	__PROTO((unsigned));
__EXTERN int		chdir	__PROTO((const char *));
__EXTERN int		chmod	__PROTO((const char *, int));
__EXTERN int		chown	__PROTO((const char *, int, int));
__EXTERN int		close	__PROTO((int));
__EXTERN int		creat	__PROTO((const char *, unsigned));
__EXTERN int		dup	__PROTO((int));
__EXTERN int		dup2	__PROTO((int, int));
__EXTERN int		fork	__PROTO((void));
__EXTERN char *		getcwd	__PROTO((char *, int));
__EXTERN char *		getwd	__PROTO((char *));
__EXTERN unsigned short	getegid	__PROTO((void));
__EXTERN unsigned short	geteuid	__PROTO((void));
__EXTERN unsigned short	getgid	__PROTO((void));
__EXTERN char *		getlogin	__PROTO((void));
__EXTERN int		getopt	__PROTO((int, char **, const char *));
__EXTERN int		getpgrp	__PROTO((void));
__EXTERN int		getpid	__PROTO((void));
__EXTERN unsigned short	getuid	__PROTO((void));
__EXTERN int		isatty	__PROTO((int));
__EXTERN int		kill	__PROTO((int, int));
__EXTERN long		lseek	__PROTO((int, long, int));
__EXTERN int		mkdir	__PROTO((const char *, unsigned));

/* be careful with this and Gcc, where strings are really constants */
__EXTERN char *		mktemp	__PROTO((char *));

#ifndef __SRC__
__EXTERN int		open	__PROTO((const char *, int, ...));
#else
__EXTERN int		open	__PROTO((const char *, int, unsigned));
#endif
__EXTERN int		pipe	__PROTO((int *));
__EXTERN long		pathconf __PROTO((const char *, int));
__EXTERN void		psignal	__PROTO((int, const char *));
__EXTERN int		rmdir	__PROTO((const char *));
__EXTERN int		read	__PROTO((int, void *, unsigned));
__EXTERN int		setgid	__PROTO((int));
__EXTERN int		setpgrp	__PROTO((int, int));
__EXTERN int		setuid	__PROTO((int));
__EXTERN void		sleep	__PROTO((unsigned int));
__EXTERN int		stime	__PROTO((long *));
__EXTERN long		sysconf	__PROTO((int));
__EXTERN long		tell	__PROTO((int));
__EXTERN char *		ttyname	__PROTO((int));
__EXTERN int		umask	__PROTO((int));
__EXTERN int		unlink	__PROTO((const char *));
__EXTERN int		write	__PROTO((int, const void *, unsigned));

#ifndef _POSIX_SOURCE
__EXTERN int		vfork	__PROTO((void));
#endif

#endif /* _UNISTD_H */
