xref: /plan9/sys/src/cmd/vnc/compat.h (revision 74f16c8187aab477889167f2422d0597b1b7d0ff)
17a02f3c0SDavid du Colombier #define Rendez KRendez
27a02f3c0SDavid du Colombier 
39a747e4fSDavid du Colombier typedef struct Block	Block;
49a747e4fSDavid du Colombier typedef struct Chan	Chan;
59a747e4fSDavid du Colombier typedef struct Cname	Cname;
69a747e4fSDavid du Colombier typedef struct Dev	Dev;
79a747e4fSDavid du Colombier typedef struct Dirtab	Dirtab;
89a747e4fSDavid du Colombier typedef struct Proc	Proc;
99a747e4fSDavid du Colombier typedef struct Ref	Ref;
109a747e4fSDavid du Colombier typedef struct Rendez	Rendez;
119a747e4fSDavid du Colombier typedef struct Walkqid Walkqid;
129a747e4fSDavid du Colombier typedef int    Devgen(Chan*, Dirtab*, int, int, Dir*);
139a747e4fSDavid du Colombier 
149a747e4fSDavid du Colombier enum
159a747e4fSDavid du Colombier {
169a747e4fSDavid du Colombier 	KNAMELEN	= 28,
179a747e4fSDavid du Colombier 	NERR		= 15,
189a747e4fSDavid du Colombier 
199a747e4fSDavid du Colombier 	COPEN		= 0x0001,		/* for i/o */
209a747e4fSDavid du Colombier 	CFREE		= 0x0010,		/* not in use */
219a747e4fSDavid du Colombier };
229a747e4fSDavid du Colombier 
239a747e4fSDavid du Colombier struct Ref
249a747e4fSDavid du Colombier {
259a747e4fSDavid du Colombier 	Lock;
269a747e4fSDavid du Colombier 	int	ref;
279a747e4fSDavid du Colombier };
289a747e4fSDavid du Colombier 
299a747e4fSDavid du Colombier struct Rendez
309a747e4fSDavid du Colombier {
319a747e4fSDavid du Colombier 	Lock;
329a747e4fSDavid du Colombier 	Proc	*p;
339a747e4fSDavid du Colombier };
349a747e4fSDavid du Colombier 
359a747e4fSDavid du Colombier struct Chan
369a747e4fSDavid du Colombier {
379a747e4fSDavid du Colombier 	Ref;
389a747e4fSDavid du Colombier 	Chan*	next;			/* allocation */
399a747e4fSDavid du Colombier 	Chan*	link;
409a747e4fSDavid du Colombier 	vlong	offset;			/* in file */
419a747e4fSDavid du Colombier 	ushort	type;
429a747e4fSDavid du Colombier 	ulong	dev;
439a747e4fSDavid du Colombier 	ushort	mode;			/* read/write */
449a747e4fSDavid du Colombier 	ushort	flag;
459a747e4fSDavid du Colombier 	Qid	qid;
469a747e4fSDavid du Colombier 	int	fid;			/* for devmnt */
479a747e4fSDavid du Colombier 	ulong	iounit;			/* chunk size for i/o; 0==default */
489a747e4fSDavid du Colombier 	void*	aux;
499a747e4fSDavid du Colombier 	Cname	*name;
509a747e4fSDavid du Colombier };
519a747e4fSDavid du Colombier 
529a747e4fSDavid du Colombier struct Cname
539a747e4fSDavid du Colombier {
549a747e4fSDavid du Colombier 	Ref;
559a747e4fSDavid du Colombier 	int	alen;			/* allocated length */
569a747e4fSDavid du Colombier 	int	len;			/* strlen(s) */
579a747e4fSDavid du Colombier 	char	*s;
589a747e4fSDavid du Colombier };
599a747e4fSDavid du Colombier 
609a747e4fSDavid du Colombier struct Dev
619a747e4fSDavid du Colombier {
629a747e4fSDavid du Colombier 	int	dc;
639a747e4fSDavid du Colombier 	char*	name;
649a747e4fSDavid du Colombier 
659a747e4fSDavid du Colombier 	void	(*reset)(void);
669a747e4fSDavid du Colombier 	void	(*init)(void);
679a747e4fSDavid du Colombier 	Chan*	(*attach)(char*);
689a747e4fSDavid du Colombier 	Walkqid*	(*walk)(Chan*, Chan*, char**, int);
699a747e4fSDavid du Colombier 	int	(*stat)(Chan*, uchar*, int);
709a747e4fSDavid du Colombier 	Chan*	(*open)(Chan*, int);
719a747e4fSDavid du Colombier 	void	(*create)(Chan*, char*, int, ulong);
729a747e4fSDavid du Colombier 	void	(*close)(Chan*);
739a747e4fSDavid du Colombier 	long	(*read)(Chan*, void*, long, vlong);
749a747e4fSDavid du Colombier 	Block*	(*bread)(Chan*, long, ulong);
759a747e4fSDavid du Colombier 	long	(*write)(Chan*, void*, long, vlong);
769a747e4fSDavid du Colombier 	long	(*bwrite)(Chan*, Block*, ulong);
779a747e4fSDavid du Colombier 	void	(*remove)(Chan*);
789a747e4fSDavid du Colombier 	int	(*wstat)(Chan*, uchar*, int);
799a747e4fSDavid du Colombier };
809a747e4fSDavid du Colombier 
819a747e4fSDavid du Colombier struct Dirtab
829a747e4fSDavid du Colombier {
839a747e4fSDavid du Colombier 	char	name[KNAMELEN];
849a747e4fSDavid du Colombier 	Qid	qid;
859a747e4fSDavid du Colombier 	vlong length;
869a747e4fSDavid du Colombier 	long	perm;
879a747e4fSDavid du Colombier };
889a747e4fSDavid du Colombier 
899a747e4fSDavid du Colombier struct Walkqid
909a747e4fSDavid du Colombier {
919a747e4fSDavid du Colombier 	Chan	*clone;
929a747e4fSDavid du Colombier 	int	nqid;
939a747e4fSDavid du Colombier 	Qid	qid[1];
949a747e4fSDavid du Colombier };
959a747e4fSDavid du Colombier 
969a747e4fSDavid du Colombier struct Proc
979a747e4fSDavid du Colombier {
989a747e4fSDavid du Colombier 	Lock	rlock;		/* for rendsleep, rendwakeup, intr */
999a747e4fSDavid du Colombier 	Rendez	*r;
1009a747e4fSDavid du Colombier 	int	intr;
1019a747e4fSDavid du Colombier 
1029a747e4fSDavid du Colombier 	char	name[KNAMELEN];
1039a747e4fSDavid du Colombier 	char	*user;
1049a747e4fSDavid du Colombier 	char	error[ERRMAX];
1059a747e4fSDavid du Colombier 	int	nerrlab;
1069a747e4fSDavid du Colombier 	jmp_buf	errlab[NERR];
1079a747e4fSDavid du Colombier 	char	genbuf[128];	/* buffer used e.g. for last name element from namec */
1089a747e4fSDavid du Colombier };
1099a747e4fSDavid du Colombier 
1109a747e4fSDavid du Colombier #define DEVDOTDOT -1
1119a747e4fSDavid du Colombier 
1129a747e4fSDavid du Colombier extern	Proc	**privup;
1139a747e4fSDavid du Colombier #define	up	(*privup)
1149a747e4fSDavid du Colombier extern  char	*eve;
1159a747e4fSDavid du Colombier extern	Dev*	devtab[];
1169a747e4fSDavid du Colombier 
1179a747e4fSDavid du Colombier Chan*		cclone(Chan*);
1189a747e4fSDavid du Colombier void		cclose(Chan*);
1199a747e4fSDavid du Colombier void		cnameclose(Cname*);
1209a747e4fSDavid du Colombier int		decref(Ref*);
1219a747e4fSDavid du Colombier Chan*		devattach(int, char*);
1229a747e4fSDavid du Colombier Block*		devbread(Chan*, long, ulong);
1239a747e4fSDavid du Colombier long		devbwrite(Chan*, Block*, ulong);
1249a747e4fSDavid du Colombier void		devcreate(Chan*, char*, int, ulong);
1259a747e4fSDavid du Colombier void		devdir(Chan*, Qid, char*, vlong, char*, long, Dir*);
1269a747e4fSDavid du Colombier long		devdirread(Chan*, char*, long, Dirtab*, int, Devgen*);
1279a747e4fSDavid du Colombier Devgen		devgen;
1289a747e4fSDavid du Colombier void		devinit(void);
1299a747e4fSDavid du Colombier Chan*		devopen(Chan*, int, Dirtab*, int, Devgen*);
1309a747e4fSDavid du Colombier void		devremove(Chan*);
1319a747e4fSDavid du Colombier void		devreset(void);
1329a747e4fSDavid du Colombier int		devstat(Chan*, uchar*, int, Dirtab*, int, Devgen*);
1339a747e4fSDavid du Colombier Walkqid*		devwalk(Chan*, Chan*, char**, int, Dirtab*, int, Devgen*);
1349a747e4fSDavid du Colombier int		devwstat(Chan*, uchar*, int);
1359a747e4fSDavid du Colombier void		error(char*);
1369a747e4fSDavid du Colombier int		incref(Ref*);
1379a747e4fSDavid du Colombier void		isdir(Chan*);
1389a747e4fSDavid du Colombier void		kproc(char*, void(*)(void*), void*);
1399a747e4fSDavid du Colombier void		mkqid(Qid*, vlong, ulong, int);
1409a747e4fSDavid du Colombier void		nexterror(void);
1419a747e4fSDavid du Colombier Chan*		newchan(void);
1429a747e4fSDavid du Colombier Cname*		newcname(char*);
1439a747e4fSDavid du Colombier int		openmode(ulong);
1449a747e4fSDavid du Colombier void		panic(char*, ...);
1459a747e4fSDavid du Colombier int		readstr(ulong, char*, ulong, char*);
1469a747e4fSDavid du Colombier long		seconds(void);
1479a747e4fSDavid du Colombier void*		smalloc(ulong);
1489a747e4fSDavid du Colombier 
1499a747e4fSDavid du Colombier #define		poperror()	up->nerrlab--
1509a747e4fSDavid du Colombier #define		waserror()	(up->nerrlab++, setjmp(up->errlab[up->nerrlab-1]))
1519a747e4fSDavid du Colombier 
1529a747e4fSDavid du Colombier void		initcompat(void);
1539a747e4fSDavid du Colombier void		rendintr(void *v);
1549a747e4fSDavid du Colombier void		rendclearintr(void);
1559a747e4fSDavid du Colombier void		rendsleep(Rendez*, int(*)(void*), void*);
1569a747e4fSDavid du Colombier int		rendwakeup(Rendez*);
1579a747e4fSDavid du Colombier void		kexit(void);
1589a747e4fSDavid du Colombier int		sysexport(int fd, Chan **roots, int nroots);
1599a747e4fSDavid du Colombier int		errdepth(int ed);
1609a747e4fSDavid du Colombier void		newup(char *name);
1619a747e4fSDavid du Colombier 
1629a747e4fSDavid du Colombier int		exporter(Dev**, int*, int*);
1639a747e4fSDavid du Colombier int		mounter(char *mntpt, int how, int fds, int n);
1649a747e4fSDavid du Colombier void		shutdown(void);
1659a747e4fSDavid du Colombier 
1669a747e4fSDavid du Colombier void		screeninit(int, int, char*);
167*74f16c81SDavid du Colombier 
168*74f16c81SDavid du Colombier #pragma	varargck	argpos	panic		1
169