xref: /plan9-contrib/sys/src/ape/lib/ap/plan9/sys9.h (revision 51f48f69b4c3e5c9d9f7955d28612ef2d4048ccc)
13e12c5d1SDavid du Colombier typedef
23e12c5d1SDavid du Colombier struct Waitmsg
33e12c5d1SDavid du Colombier {
49a747e4fSDavid du Colombier 	int pid;	/* of loved one */
59a747e4fSDavid du Colombier 	unsigned long time[3];	/* of loved one & descendants */
69a747e4fSDavid du Colombier 	char	*msg;
73e12c5d1SDavid du Colombier } Waitmsg;
83e12c5d1SDavid du Colombier 
99a747e4fSDavid du Colombier #define	STATMAX	65535U	/* max length of machine-independent stat structure */
109a747e4fSDavid du Colombier #define	DIRMAX	(sizeof(Dir)+STATMAX)	/* max length of Dir structure */
119a747e4fSDavid du Colombier #define	ERRMAX	128	/* max length of error string */
129a747e4fSDavid du Colombier 
133e12c5d1SDavid du Colombier #define	MORDER	0x0003	/* mask for bits defining order of mounting */
143e12c5d1SDavid du Colombier #define	MREPL	0x0000	/* mount replaces object */
153e12c5d1SDavid du Colombier #define	MBEFORE	0x0001	/* mount goes before others in union directory */
163e12c5d1SDavid du Colombier #define	MAFTER	0x0002	/* mount goes after others in union directory */
173e12c5d1SDavid du Colombier #define	MCREATE	0x0004	/* permit creation in mounted directory */
189a747e4fSDavid du Colombier #define	MCACHE	0x0010	/* cache some data */
193e12c5d1SDavid du Colombier #define	MMASK	0x0007	/* all bits on */
203e12c5d1SDavid du Colombier 
213e12c5d1SDavid du Colombier #define	OREAD	0	/* open for read */
223e12c5d1SDavid du Colombier #define	OWRITE	1	/* write */
233e12c5d1SDavid du Colombier #define	ORDWR	2	/* read and write */
243e12c5d1SDavid du Colombier #define	OEXEC	3	/* execute, == read but check execute permission */
253e12c5d1SDavid du Colombier #define	OTRUNC	16	/* or'ed in (except for exec), truncate file first */
263e12c5d1SDavid du Colombier #define	OCEXEC	32	/* or'ed in, close on exec */
273e12c5d1SDavid du Colombier #define	ORCLOSE	64	/* or'ed in, remove on close */
289a747e4fSDavid du Colombier #define	OEXCL	0x1000	/* or'ed in, exclusive use (create only) */
299a747e4fSDavid du Colombier 
309a747e4fSDavid du Colombier #define	AEXIST	0	/* accessible: exists */
319a747e4fSDavid du Colombier #define	AEXEC	1	/* execute access */
329a747e4fSDavid du Colombier #define	AWRITE	2	/* write access */
339a747e4fSDavid du Colombier #define	AREAD	4	/* read access */
349a747e4fSDavid du Colombier 
359a747e4fSDavid du Colombier /* Segattch */
369a747e4fSDavid du Colombier #define	SG_RONLY	0040	/* read only */
379a747e4fSDavid du Colombier #define	SG_CEXEC	0100	/* detach on exec */
383e12c5d1SDavid du Colombier 
393e12c5d1SDavid du Colombier #define	NCONT	0	/* continue after note */
403e12c5d1SDavid du Colombier #define	NDFLT	1	/* terminate after note */
419a747e4fSDavid du Colombier #define	NSAVE	2	/* clear note but hold state */
429a747e4fSDavid du Colombier #define	NRSTR	3	/* restore saved state */
433e12c5d1SDavid du Colombier 
449a747e4fSDavid du Colombier /* bits in Qid.type */
459a747e4fSDavid du Colombier #define QTDIR		0x80		/* type bit for directories */
469a747e4fSDavid du Colombier #define QTAPPEND	0x40		/* type bit for append only files */
479a747e4fSDavid du Colombier #define QTEXCL		0x20		/* type bit for exclusive use files */
489a747e4fSDavid du Colombier #define QTMOUNT		0x10		/* type bit for mounted channel */
499a747e4fSDavid du Colombier #define QTFILE		0x00		/* plain file */
503e12c5d1SDavid du Colombier 
519a747e4fSDavid du Colombier /* bits in Dir.mode */
529a747e4fSDavid du Colombier #define DMDIR		0x80000000	/* mode bit for directories */
539a747e4fSDavid du Colombier #define DMAPPEND	0x40000000	/* mode bit for append only files */
549a747e4fSDavid du Colombier #define DMEXCL		0x20000000	/* mode bit for exclusive use files */
559a747e4fSDavid du Colombier #define DMMOUNT		0x10000000	/* mode bit for mounted channel */
569a747e4fSDavid du Colombier #define DMREAD		0x4		/* mode bit for read permission */
579a747e4fSDavid du Colombier #define DMWRITE		0x2		/* mode bit for write permission */
589a747e4fSDavid du Colombier #define DMEXEC		0x1		/* mode bit for execute permission */
593e12c5d1SDavid du Colombier 
609a747e4fSDavid du Colombier /* rfork */
619a747e4fSDavid du Colombier enum
629a747e4fSDavid du Colombier {
639a747e4fSDavid du Colombier 	RFNAMEG		= (1<<0),
649a747e4fSDavid du Colombier 	RFENVG		= (1<<1),
659a747e4fSDavid du Colombier 	RFFDG		= (1<<2),
669a747e4fSDavid du Colombier 	RFNOTEG		= (1<<3),
679a747e4fSDavid du Colombier 	RFPROC		= (1<<4),
689a747e4fSDavid du Colombier 	RFMEM		= (1<<5),
699a747e4fSDavid du Colombier 	RFNOWAIT	= (1<<6),
709a747e4fSDavid du Colombier 	RFCNAMEG	= (1<<10),
719a747e4fSDavid du Colombier 	RFCENVG		= (1<<11),
729a747e4fSDavid du Colombier 	RFCFDG		= (1<<12),
739a747e4fSDavid du Colombier 	RFREND		= (1<<13),
749a747e4fSDavid du Colombier 	RFNOMNT		= (1<<14)
759a747e4fSDavid du Colombier };
769a747e4fSDavid du Colombier 
779a747e4fSDavid du Colombier extern	int	_AWAIT(char*, int);
783e12c5d1SDavid du Colombier extern	int	_ALARM(unsigned long);
797dd7cddfSDavid du Colombier extern	int	_BIND(const char*, const char*, int);
807dd7cddfSDavid du Colombier extern	int	_CHDIR(const char*);
813e12c5d1SDavid du Colombier extern	int	_CLOSE(int);
823e12c5d1SDavid du Colombier extern	int	_CREATE(char*, int, unsigned long);
833e12c5d1SDavid du Colombier extern	int	_DUP(int, int);
849a747e4fSDavid du Colombier extern	int	_ERRSTR(char*, unsigned int);
853e12c5d1SDavid du Colombier extern	int	_EXEC(char*, char*[]);
863e12c5d1SDavid du Colombier extern	void	_EXITS(char *);
877dd7cddfSDavid du Colombier extern	int	_FD2PATH(int, char*, int);
889a747e4fSDavid du Colombier extern	int	_FAUTH(int, char*);
899a747e4fSDavid du Colombier extern	int	_FSESSION(int, char*, int);
909a747e4fSDavid du Colombier extern	int	_FSTAT(int, unsigned char*, int);
919a747e4fSDavid du Colombier extern	int	_FWSTAT(int, unsigned char*, int);
929a747e4fSDavid du Colombier extern	int	_MOUNT(int, int, const char*, int, const char*);
933e12c5d1SDavid du Colombier extern	int	_NOTED(int);
943e12c5d1SDavid du Colombier extern	int	_NOTIFY(int(*)(void*, char*));
957dd7cddfSDavid du Colombier extern	int	_OPEN(const char*, int);
963e12c5d1SDavid du Colombier extern	int	_PIPE(int*);
979a747e4fSDavid du Colombier extern	long	_PREAD(int, void*, long, long long);
989a747e4fSDavid du Colombier extern	long	_PWRITE(int, void*, long, long long);
993e12c5d1SDavid du Colombier extern	long	_READ(int, void*, long);
1007dd7cddfSDavid du Colombier extern	int	_REMOVE(const char*);
1013e12c5d1SDavid du Colombier extern	int	_RENDEZVOUS(unsigned long, unsigned long);
1023e12c5d1SDavid du Colombier extern	int	_RFORK(int);
1033e12c5d1SDavid du Colombier extern	int	_SEGATTACH(int, char*, void*, unsigned long);
1043e12c5d1SDavid du Colombier extern	int	_SEGBRK(void*, void*);
1053e12c5d1SDavid du Colombier extern	int	_SEGDETACH(void*);
1063e12c5d1SDavid du Colombier extern	int	_SEGFLUSH(void*, unsigned long);
1073e12c5d1SDavid du Colombier extern	int	_SEGFREE(void*, unsigned long);
1087dd7cddfSDavid du Colombier extern	long long	_SEEK(int, long long, int);
109*51f48f69SDavid du Colombier extern	int	_SEMACQUIRE(long*, int);
110*51f48f69SDavid du Colombier extern	long	_SEMRELEASE(long*, long);
1113e12c5d1SDavid du Colombier extern	int	_SLEEP(long);
1129a747e4fSDavid du Colombier extern	int	_STAT(const char*, unsigned char*, int);
1139a747e4fSDavid du Colombier extern	Waitmsg*	_WAIT(void);
114*51f48f69SDavid du Colombier extern	int	_TSEMACQUIRE(long*, unsigned long);
1157dd7cddfSDavid du Colombier extern	long	_WRITE(int, const void*, long);
1169a747e4fSDavid du Colombier extern	int	_WSTAT(const char*, unsigned char*, int);
117bd389b36SDavid du Colombier 
118bd389b36SDavid du Colombier extern	int	__open(char *, int, ...);
119bd389b36SDavid du Colombier extern	int	__access(char *, int);
120bd389b36SDavid du Colombier extern	int	__chdir(char *);
121bd389b36SDavid du Colombier extern	int	__creat(char *, int);
122bd389b36SDavid du Colombier extern	int	__link(char *, int);
123bd389b36SDavid du Colombier extern	int	__stat(char *, struct stat *);
124bd389b36SDavid du Colombier extern	int	__unlink(char *);
125*51f48f69SDavid du Colombier 
126*51f48f69SDavid du Colombier /*
127*51f48f69SDavid du Colombier  * atomic
128*51f48f69SDavid du Colombier  */
129*51f48f69SDavid du Colombier long	ainc(long*);
130*51f48f69SDavid du Colombier long	adec(long*);
131*51f48f69SDavid du Colombier int	cas32(unsigned long*, unsigned long, unsigned long);
132*51f48f69SDavid du Colombier int	casp(void**, void*, void*);
133*51f48f69SDavid du Colombier int	casl(unsigned long*, unsigned long, unsigned long);
134