xref: /plan9-contrib/sys/src/ape/lib/ap/plan9/lib.h (revision e44fe4caf8cb96c0069297b4860a31c955b8f9fd)
13e12c5d1SDavid du Colombier #include <sys/types.h>
23e12c5d1SDavid du Colombier #include <sys/limits.h>
33e12c5d1SDavid du Colombier #include <fcntl.h>
4219b2ee8SDavid du Colombier #include <ureg.h>
53e12c5d1SDavid du Colombier 
6219b2ee8SDavid du Colombier typedef struct Ureg Ureg;
7219b2ee8SDavid du Colombier 
8219b2ee8SDavid du Colombier /* mux buf for selecting (see _buf.c) */
9219b2ee8SDavid du Colombier enum {
10219b2ee8SDavid du Colombier 	READMAX = 8192,			/* read at most this much with _READ */
11219b2ee8SDavid du Colombier 	PERFDMAX = 2*READMAX,		/* stop _READing an fd when it has this much */
12219b2ee8SDavid du Colombier 	INITBUFS = 4,			/* allow enough room for this many PERFDMAX */
13219b2ee8SDavid du Colombier };
14219b2ee8SDavid du Colombier 
15219b2ee8SDavid du Colombier typedef struct Muxbuf {
16219b2ee8SDavid du Colombier 	int n;				/* # unprocessed chars in buf */
17219b2ee8SDavid du Colombier 	unsigned char*	putnext;	/* place for copy process to put next data */
18219b2ee8SDavid du Colombier 	unsigned char*	getnext;	/* place for parent process to get next data */
19*e44fe4caSDavid du Colombier 	char		fd;		/* fd for which this is a buffer */
20219b2ee8SDavid du Colombier 	unsigned char	eof;		/* true if eof after current data exhausted */
21219b2ee8SDavid du Colombier 	unsigned char	roomwait;	/* true if copy process is waiting for room */
22219b2ee8SDavid du Colombier 	unsigned char	datawait;	/* true if parent process is waiting for data */
23219b2ee8SDavid du Colombier 	int		copypid;	/* pid of copyproc */
24219b2ee8SDavid du Colombier 	unsigned char	data[PERFDMAX];
25219b2ee8SDavid du Colombier } Muxbuf;
26219b2ee8SDavid du Colombier 
27219b2ee8SDavid 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;
31219b2ee8SDavid du Colombier 	uid_t	uid;
32219b2ee8SDavid du Colombier 	gid_t	gid;
333e12c5d1SDavid du Colombier 	char		*name;
34219b2ee8SDavid du Colombier 	/*
35219b2ee8SDavid du Colombier 	 * the following is used if flags&FD_BUFFERED
36219b2ee8SDavid du Colombier 	 */
37219b2ee8SDavid 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
44219b2ee8SDavid du Colombier #define FD_BUFFEREDX	0x8
45219b2ee8SDavid du Colombier #define FD_ISTTY	0x20
463e12c5d1SDavid du Colombier 
47219b2ee8SDavid du Colombier #define MAXSIG SIGUSR2
483e12c5d1SDavid du Colombier 
49219b2ee8SDavid du Colombier extern Fdinfo	_fdinfo[];
50219b2ee8SDavid du Colombier 
513e12c5d1SDavid du Colombier extern int	_finishing;
523e12c5d1SDavid du Colombier extern int	_sessleader;
53219b2ee8SDavid 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);
58219b2ee8SDavid du Colombier extern int	_selbuf(int);
59219b2ee8SDavid du Colombier extern void	_closebuf(int);
60219b2ee8SDavid du Colombier extern int _readbuf(int, void*, int, int);
61219b2ee8SDavid 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 *);
65219b2ee8SDavid 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 **);
68219b2ee8SDavid du Colombier extern int _isatty(int);
69219b2ee8SDavid du Colombier extern void _fdinit(char*, char*);
70219b2ee8SDavid du Colombier 
71219b2ee8SDavid du Colombier 
72*e44fe4caSDavid du Colombier void checkbug(char *, int);
73