xref: /plan9/sys/src/ape/lib/draw/libc.h (revision 58da3067adcdccaaa043d0bfde28ba83b7ced07d)
140ef9009SDavid du Colombier #define _LOCK_EXTENSION
240ef9009SDavid du Colombier #define _QLOCK_EXTENSION
340ef9009SDavid du Colombier #define _BSD_EXTENSION
440ef9009SDavid du Colombier #include <sys/types.h>
540ef9009SDavid du Colombier #include <lock.h>
640ef9009SDavid du Colombier #include <qlock.h>
740ef9009SDavid du Colombier #include <lib9.h>
840ef9009SDavid du Colombier #include <stdlib.h>
940ef9009SDavid du Colombier #include <string.h>
1040ef9009SDavid du Colombier #include <bsd.h>
1140ef9009SDavid du Colombier #include <unistd.h>
1240ef9009SDavid du Colombier #include <fcntl.h>
1340ef9009SDavid du Colombier #include <assert.h>
1440ef9009SDavid du Colombier #include <utf.h>
1540ef9009SDavid du Colombier #include <fmt.h>
1640ef9009SDavid du Colombier #include <signal.h>
1740ef9009SDavid du Colombier 
1840ef9009SDavid du Colombier typedef
1940ef9009SDavid du Colombier struct Qid
2040ef9009SDavid du Colombier {
2140ef9009SDavid du Colombier 	uvlong	path;
2240ef9009SDavid du Colombier 	ulong	vers;
2340ef9009SDavid du Colombier 	uchar	type;
2440ef9009SDavid du Colombier } Qid;
2540ef9009SDavid du Colombier 
2640ef9009SDavid du Colombier typedef
2740ef9009SDavid du Colombier struct Dir {
2840ef9009SDavid du Colombier 	/* system-modified data */
2940ef9009SDavid du Colombier 	ushort	type;	/* server type */
3040ef9009SDavid du Colombier 	uint	dev;	/* server subtype */
3140ef9009SDavid du Colombier 	/* file data */
3240ef9009SDavid du Colombier 	Qid	qid;	/* unique id from server */
3340ef9009SDavid du Colombier 	ulong	mode;	/* permissions */
3440ef9009SDavid du Colombier 	ulong	atime;	/* last read time */
3540ef9009SDavid du Colombier 	ulong	mtime;	/* last write time */
3640ef9009SDavid du Colombier 	vlong	length;	/* file length: see <u.h> */
3740ef9009SDavid du Colombier 	char	*name;	/* last element of path */
3840ef9009SDavid du Colombier 	char	*uid;	/* owner name */
3940ef9009SDavid du Colombier 	char	*gid;	/* group name */
4040ef9009SDavid du Colombier 	char	*muid;	/* last modifier name */
4140ef9009SDavid du Colombier } Dir;
4240ef9009SDavid du Colombier 
4340ef9009SDavid du Colombier uint	_convM2D(uchar*, uint, Dir*, char*);
4440ef9009SDavid du Colombier uint	_convD2M(Dir*, uchar*, uint);
4540ef9009SDavid du Colombier Dir	*_dirstat(char*);
4640ef9009SDavid du Colombier int	_dirwstat(char*, Dir*);
4740ef9009SDavid du Colombier Dir	*_dirfstat(int);
4840ef9009SDavid du Colombier int	_dirfwstat(int, Dir*);
4940ef9009SDavid du Colombier long	_dirread(int, Dir**);
5040ef9009SDavid du Colombier long _dirreadall(int, Dir**);
5140ef9009SDavid du Colombier void _nulldir(Dir*);
5240ef9009SDavid du Colombier uint _sizeD2M(Dir*);
5340ef9009SDavid du Colombier 
5440ef9009SDavid du Colombier typedef
5540ef9009SDavid du Colombier struct Waitmsg
5640ef9009SDavid du Colombier {
5740ef9009SDavid du Colombier 	int pid;	/* of loved one */
5840ef9009SDavid du Colombier 	unsigned long time[3];	/* of loved one & descendants */
5940ef9009SDavid du Colombier 	char	*msg;
6040ef9009SDavid du Colombier } Waitmsg;
6140ef9009SDavid du Colombier 
6240ef9009SDavid du Colombier 
6340ef9009SDavid du Colombier extern	int	_AWAIT(char*, int);
6440ef9009SDavid du Colombier extern	int	_ALARM(unsigned long);
6540ef9009SDavid du Colombier extern	int	_BIND(const char*, const char*, int);
6640ef9009SDavid du Colombier extern	int	_CHDIR(const char*);
6740ef9009SDavid du Colombier extern	int	_CLOSE(int);
6840ef9009SDavid du Colombier extern	int	_CREATE(char*, int, unsigned long);
6940ef9009SDavid du Colombier extern	int	_DUP(int, int);
7040ef9009SDavid du Colombier extern	int	_ERRSTR(char*, unsigned int);
7140ef9009SDavid du Colombier extern	int	_EXEC(char*, char*[]);
7240ef9009SDavid du Colombier extern	void	_EXITS(char *);
7340ef9009SDavid du Colombier extern	int	_FD2PATH(int, char*, int);
7440ef9009SDavid du Colombier extern	int	_FAUTH(int, char*);
7540ef9009SDavid du Colombier extern	int	_FSESSION(int, char*, int);
7640ef9009SDavid du Colombier extern	int	_FSTAT(int, unsigned char*, int);
7740ef9009SDavid du Colombier extern	int	_FWSTAT(int, unsigned char*, int);
7840ef9009SDavid du Colombier extern	int	_MOUNT(int, int, const char*, int, const char*);
7940ef9009SDavid du Colombier extern	int	_NOTED(int);
8040ef9009SDavid du Colombier extern	int	_NOTIFY(int(*)(void*, char*));
8140ef9009SDavid du Colombier extern	int	_OPEN(const char*, int);
8240ef9009SDavid du Colombier extern	int	_PIPE(int*);
8340ef9009SDavid du Colombier extern	long	_PREAD(int, void*, long, long long);
8440ef9009SDavid du Colombier extern	long	_PWRITE(int, void*, long, long long);
8540ef9009SDavid du Colombier extern	long	_READ(int, void*, long);
8640ef9009SDavid du Colombier extern	int	_REMOVE(const char*);
8740ef9009SDavid du Colombier extern	int	_RENDEZVOUS(unsigned long, unsigned long);
8840ef9009SDavid du Colombier extern	int	_RFORK(int);
8940ef9009SDavid du Colombier extern	int	_SEGATTACH(int, char*, void*, unsigned long);
9040ef9009SDavid du Colombier extern	int	_SEGBRK(void*, void*);
9140ef9009SDavid du Colombier extern	int	_SEGDETACH(void*);
9240ef9009SDavid du Colombier extern	int	_SEGFLUSH(void*, unsigned long);
9340ef9009SDavid du Colombier extern	int	_SEGFREE(void*, unsigned long);
9440ef9009SDavid du Colombier extern	long long	_SEEK(int, long long, int);
9540ef9009SDavid du Colombier extern	int	_SLEEP(long);
9640ef9009SDavid du Colombier extern	int	_STAT(const char*, unsigned char*, int);
9740ef9009SDavid du Colombier extern	Waitmsg*	_WAIT(void);
9840ef9009SDavid du Colombier extern	long	_WRITE(int, const void*, long);
9940ef9009SDavid du Colombier extern	int	_WSTAT(const char*, unsigned char*, int);
10040ef9009SDavid du Colombier extern 	void *_MALLOCZ(int, int);
10140ef9009SDavid du Colombier extern	int	_WERRSTR(char*, ...);
10240ef9009SDavid du Colombier extern	long	_READN(int, void*, long);
103711d1557SDavid du Colombier extern	int	_IOUNIT(int);
10440ef9009SDavid du Colombier 
10540ef9009SDavid du Colombier #define dirstat _dirstat
10640ef9009SDavid du Colombier #define dirfstat _dirfstat
10740ef9009SDavid du Colombier 
10840ef9009SDavid du Colombier #define OREAD 0
10940ef9009SDavid du Colombier #define OWRITE 1
11040ef9009SDavid du Colombier #define ORDWR 2
11140ef9009SDavid du Colombier #define OCEXEC 32
11240ef9009SDavid du Colombier 
11340ef9009SDavid du Colombier #define AREAD 4
11440ef9009SDavid du Colombier #define AWRITE 2
11540ef9009SDavid du Colombier #define AEXEC 1
11640ef9009SDavid du Colombier #define AEXIST 0
11740ef9009SDavid du Colombier 
11840ef9009SDavid du Colombier #define open _OPEN
11940ef9009SDavid du Colombier #define close _CLOSE
12040ef9009SDavid du Colombier #define read _READ
12140ef9009SDavid du Colombier #define write _WRITE
12240ef9009SDavid du Colombier #define _exits(s) _exit(s && *(char*)s ? 1 : 0)
12340ef9009SDavid du Colombier #define exits(s) exit(s && *(char*)s ? 1 : 0)
12440ef9009SDavid du Colombier #define create _CREATE
12540ef9009SDavid du Colombier #define pread _PREAD
12640ef9009SDavid du Colombier #define readn _READN
12740ef9009SDavid du Colombier #define mallocz _MALLOCZ
128711d1557SDavid du Colombier #define iounit	_IOUNIT
129*58da3067SDavid du Colombier #define bind _BIND
13040ef9009SDavid du Colombier 
13140ef9009SDavid du Colombier /* assume being called as in event.c */
13240ef9009SDavid du Colombier #define postnote(x, pid, msg) kill(pid, SIGTERM)
13340ef9009SDavid du Colombier #define atnotify(x, y) signal(SIGTERM, ekill)
13440ef9009SDavid du Colombier 
13540ef9009SDavid du Colombier #define ERRMAX 128
13674f16c81SDavid du Colombier 
13774f16c81SDavid du Colombier extern	void	setmalloctag(void*, ulong);
13874f16c81SDavid du Colombier extern	ulong	getcallerpc(void*);
139