/*
** sys/stat.h
**
** Emulation of the Unix sys/stat.h header file for PRIMOS
**
** Author: Peter Eriksson <pen@lysator.liu.se>
*/

#ifndef __SYS_STAT_H__
#define __SYS_STAT_H__


#include <sys/types.h>

struct	stat {
        /* First some PRIMOS standard entries */
	off_t	st_size;
	time_t	st_mtime;
	short	st_type;        /* Primos file type */
	short	st_rwlock;      /* Primos read/write lock */

	/* Begin Unix compatibility - don't believe these entries! */
	dev_t	st_dev;
	ino_t	st_ino;
	mode_t	st_mode;
	short	st_nlink;
	uid_t	st_uid;
	gid_t	st_gid;
	dev_t	st_rdev;
	time_t	st_atime;
	time_t	st_ctime;
	long	st_blksize;
	long	st_blocks;
};

#define	_IFMT		0170000	/* type of file */
#define	_IFREG		0100000	/* regular */
#define	_IFDIR		0040000	/* directory */

/* Some stupid programs check if these are defined and then
   believe these are supported in the OS - not so in PRIMOS ... */
#ifndef __50SERIES
#  define _IFCHR	0020000
#  define _IFBLK	0060000
#  define _IFLNK	0120000
#  define _IFSOCK	0140000
#  define _IFIFO	0010000
#endif

#define	S_ISUID		0004000
#define	S_ISGID		0002000
#define	S_ISVTX		0001000
#define	S_IREAD		0000400
#define	S_IWRITE 	0000200
#define	S_IEXEC		0000100

#define	S_ENFMT 	0002000

#define	S_IFMT		_IFMT
#define	S_IFREG		_IFREG
#define	S_IFDIR		_IFDIR
#ifndef __50SERIES
#  define S_IFCHR	_IFCHR
#  define S_IFBLK	_IFBLK
#  define S_IFLNK	_IFLNK
#  define S_IFSOCK	_IFSOCK
#  define S_IFIFO	_IFIFO
#endif

#define	S_IRWXU 	0000700
#define	S_IRUSR		0000400
#define	S_IWUSR		0000200
#define	S_IXUSR		0000100
#define	S_IRWXG		0000070
#define	S_IRGRP		0000040
#define	S_IWGRP		0000020
#define	S_IXGRP		0000010
#define	S_IRWXO		0000007
#define	S_IROTH		0000004
#define	S_IWOTH		0000002
#define	S_IXOTH		0000001

#define	S_ISREG(m)	(((m) & _IFMT) == _IFREG)
#define	S_ISDIR(m)	(((m) & _IFMT) == _IFDIR)
#ifndef __50SERIES
#  define S_ISBLK(m)	(((m) & _IFMT) == _IFBLK)
#  define S_ISCHR(m)	(((m) & _IFMT) == _IFCHR)
#  define S_ISFIFO(m)	(((m) & _IFMT) == _IFIFO)
#endif


#endif
