xref: /plan9-contrib/sys/src/ape/lib/ap/plan9/lib.h (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
13e12c5d1SDavid du Colombier #include <sys/types.h>
23e12c5d1SDavid du Colombier #include <sys/limits.h>
33e12c5d1SDavid du Colombier #include <fcntl.h>
4*219b2ee8SDavid du Colombier #include <ureg.h>
53e12c5d1SDavid du Colombier 
6*219b2ee8SDavid du Colombier typedef struct Ureg Ureg;
7*219b2ee8SDavid du Colombier 
8*219b2ee8SDavid du Colombier /* mux buf for selecting (see _buf.c) */
9*219b2ee8SDavid du Colombier enum {
10*219b2ee8SDavid du Colombier 	READMAX = 8192,			/* read at most this much with _READ */
11*219b2ee8SDavid du Colombier 	PERFDMAX = 2*READMAX,	/* stop _READing an fd when it has this much */
12*219b2ee8SDavid du Colombier 	INITBUFS = 4,				/* allow enough room for this many PERFDMAX */
13*219b2ee8SDavid du Colombier };
14*219b2ee8SDavid du Colombier 
15*219b2ee8SDavid du Colombier typedef struct Muxbuf {
16*219b2ee8SDavid du Colombier 	int n;						/* # unprocessed chars in buf */
17*219b2ee8SDavid du Colombier 	unsigned char*	putnext;		/* place for copy process to put next data */
18*219b2ee8SDavid du Colombier 	unsigned char* getnext;		/* place for parent process to get next data */
19*219b2ee8SDavid du Colombier 	unsigned char	fd;			/* fd for which this is a buffer */
20*219b2ee8SDavid du Colombier 	unsigned char	eof;			/* true if eof after current data exhausted */
21*219b2ee8SDavid du Colombier 	unsigned char	roomwait;		/* true if copy process is waiting for room */
22*219b2ee8SDavid du Colombier 	unsigned char	datawait;		/* true if parent process is waiting for data */
23*219b2ee8SDavid du Colombier 	int		copypid;			/* pid of copyproc */
24*219b2ee8SDavid du Colombier 	unsigned char data[PERFDMAX];
25*219b2ee8SDavid du Colombier } Muxbuf;
26*219b2ee8SDavid du Colombier 
27*219b2ee8SDavid du Colombier /* be sure to change _fdinfo[] init in _fdinfo if you change this */
283e12c5d1SDavid du Colombier typedef struct Fdinfo{
293e12c5d1SDavid du Colombier 	unsigned long	flags;
303e12c5d1SDavid du Colombier 	unsigned long	oflags;
31*219b2ee8SDavid du Colombier 	uid_t	uid;
32*219b2ee8SDavid du Colombier 	gid_t	gid;
333e12c5d1SDavid du Colombier 	char		*name;
34*219b2ee8SDavid du Colombier 	/*
35*219b2ee8SDavid du Colombier 	 * the following is used if flags&FD_BUFFERED
36*219b2ee8SDavid du Colombier 	 */
37*219b2ee8SDavid du Colombier 	Muxbuf	*buf;	/* holds buffered data and state */
383e12c5d1SDavid du Colombier } Fdinfo;
393e12c5d1SDavid du Colombier 
403e12c5d1SDavid du Colombier /* #define FD_CLOEXEC 1 is in fcntl.h */
413e12c5d1SDavid du Colombier 
423e12c5d1SDavid du Colombier #define FD_ISOPEN	0x2
433e12c5d1SDavid du Colombier #define FD_BUFFERED	0x4
44*219b2ee8SDavid du Colombier #define FD_BUFFEREDX	0x8
45*219b2ee8SDavid du Colombier #define FD_ISTTY	0x20
463e12c5d1SDavid du Colombier 
47*219b2ee8SDavid du Colombier #define MAXSIG SIGUSR2
483e12c5d1SDavid du Colombier 
49*219b2ee8SDavid du Colombier extern Fdinfo	_fdinfo[];
50*219b2ee8SDavid du Colombier 
513e12c5d1SDavid du Colombier extern int	_finishing;
523e12c5d1SDavid du Colombier extern int	_sessleader;
53*219b2ee8SDavid du Colombier extern void	(*_sighdlr[])(int, char*, Ureg*);
543e12c5d1SDavid du Colombier extern char	*_sigstring(int);
553e12c5d1SDavid du Colombier extern int	_stringsig(char *);
563e12c5d1SDavid du Colombier extern long	_psigblocked;
573e12c5d1SDavid du Colombier extern int	_startbuf(int);
58*219b2ee8SDavid du Colombier extern int	_selbuf(int);
59*219b2ee8SDavid du Colombier extern void	_closebuf(int);
60*219b2ee8SDavid du Colombier extern int _readbuf(int, void*, int, int);
61*219b2ee8SDavid du Colombier extern void	_detachbuf(void);
623e12c5d1SDavid du Colombier extern void	_finish(int, char *);
633e12c5d1SDavid du Colombier extern char	*_ultoa(char *, unsigned long);
643e12c5d1SDavid du Colombier extern int	_notehandler(void *, char *);
65*219b2ee8SDavid du Colombier extern void	_notetramp(int, void (*)(int, char*, Ureg*), Ureg*);
663e12c5d1SDavid du Colombier extern void	_syserrno(void);
673e12c5d1SDavid du Colombier extern int	_getpw(int *, char **, char **);
68*219b2ee8SDavid du Colombier extern int _isatty(int);
69*219b2ee8SDavid du Colombier extern void _fdinit(char*, char*);
70*219b2ee8SDavid du Colombier 
71*219b2ee8SDavid du Colombier 
72