xref: /plan9/sys/src/cmd/vnc/compat.h (revision 74f16c8187aab477889167f2422d0597b1b7d0ff)
1 #define Rendez KRendez
2 
3 typedef struct Block	Block;
4 typedef struct Chan	Chan;
5 typedef struct Cname	Cname;
6 typedef struct Dev	Dev;
7 typedef struct Dirtab	Dirtab;
8 typedef struct Proc	Proc;
9 typedef struct Ref	Ref;
10 typedef struct Rendez	Rendez;
11 typedef struct Walkqid Walkqid;
12 typedef int    Devgen(Chan*, Dirtab*, int, int, Dir*);
13 
14 enum
15 {
16 	KNAMELEN	= 28,
17 	NERR		= 15,
18 
19 	COPEN		= 0x0001,		/* for i/o */
20 	CFREE		= 0x0010,		/* not in use */
21 };
22 
23 struct Ref
24 {
25 	Lock;
26 	int	ref;
27 };
28 
29 struct Rendez
30 {
31 	Lock;
32 	Proc	*p;
33 };
34 
35 struct Chan
36 {
37 	Ref;
38 	Chan*	next;			/* allocation */
39 	Chan*	link;
40 	vlong	offset;			/* in file */
41 	ushort	type;
42 	ulong	dev;
43 	ushort	mode;			/* read/write */
44 	ushort	flag;
45 	Qid	qid;
46 	int	fid;			/* for devmnt */
47 	ulong	iounit;			/* chunk size for i/o; 0==default */
48 	void*	aux;
49 	Cname	*name;
50 };
51 
52 struct Cname
53 {
54 	Ref;
55 	int	alen;			/* allocated length */
56 	int	len;			/* strlen(s) */
57 	char	*s;
58 };
59 
60 struct Dev
61 {
62 	int	dc;
63 	char*	name;
64 
65 	void	(*reset)(void);
66 	void	(*init)(void);
67 	Chan*	(*attach)(char*);
68 	Walkqid*	(*walk)(Chan*, Chan*, char**, int);
69 	int	(*stat)(Chan*, uchar*, int);
70 	Chan*	(*open)(Chan*, int);
71 	void	(*create)(Chan*, char*, int, ulong);
72 	void	(*close)(Chan*);
73 	long	(*read)(Chan*, void*, long, vlong);
74 	Block*	(*bread)(Chan*, long, ulong);
75 	long	(*write)(Chan*, void*, long, vlong);
76 	long	(*bwrite)(Chan*, Block*, ulong);
77 	void	(*remove)(Chan*);
78 	int	(*wstat)(Chan*, uchar*, int);
79 };
80 
81 struct Dirtab
82 {
83 	char	name[KNAMELEN];
84 	Qid	qid;
85 	vlong length;
86 	long	perm;
87 };
88 
89 struct Walkqid
90 {
91 	Chan	*clone;
92 	int	nqid;
93 	Qid	qid[1];
94 };
95 
96 struct Proc
97 {
98 	Lock	rlock;		/* for rendsleep, rendwakeup, intr */
99 	Rendez	*r;
100 	int	intr;
101 
102 	char	name[KNAMELEN];
103 	char	*user;
104 	char	error[ERRMAX];
105 	int	nerrlab;
106 	jmp_buf	errlab[NERR];
107 	char	genbuf[128];	/* buffer used e.g. for last name element from namec */
108 };
109 
110 #define DEVDOTDOT -1
111 
112 extern	Proc	**privup;
113 #define	up	(*privup)
114 extern  char	*eve;
115 extern	Dev*	devtab[];
116 
117 Chan*		cclone(Chan*);
118 void		cclose(Chan*);
119 void		cnameclose(Cname*);
120 int		decref(Ref*);
121 Chan*		devattach(int, char*);
122 Block*		devbread(Chan*, long, ulong);
123 long		devbwrite(Chan*, Block*, ulong);
124 void		devcreate(Chan*, char*, int, ulong);
125 void		devdir(Chan*, Qid, char*, vlong, char*, long, Dir*);
126 long		devdirread(Chan*, char*, long, Dirtab*, int, Devgen*);
127 Devgen		devgen;
128 void		devinit(void);
129 Chan*		devopen(Chan*, int, Dirtab*, int, Devgen*);
130 void		devremove(Chan*);
131 void		devreset(void);
132 int		devstat(Chan*, uchar*, int, Dirtab*, int, Devgen*);
133 Walkqid*		devwalk(Chan*, Chan*, char**, int, Dirtab*, int, Devgen*);
134 int		devwstat(Chan*, uchar*, int);
135 void		error(char*);
136 int		incref(Ref*);
137 void		isdir(Chan*);
138 void		kproc(char*, void(*)(void*), void*);
139 void		mkqid(Qid*, vlong, ulong, int);
140 void		nexterror(void);
141 Chan*		newchan(void);
142 Cname*		newcname(char*);
143 int		openmode(ulong);
144 void		panic(char*, ...);
145 int		readstr(ulong, char*, ulong, char*);
146 long		seconds(void);
147 void*		smalloc(ulong);
148 
149 #define		poperror()	up->nerrlab--
150 #define		waserror()	(up->nerrlab++, setjmp(up->errlab[up->nerrlab-1]))
151 
152 void		initcompat(void);
153 void		rendintr(void *v);
154 void		rendclearintr(void);
155 void		rendsleep(Rendez*, int(*)(void*), void*);
156 int		rendwakeup(Rendez*);
157 void		kexit(void);
158 int		sysexport(int fd, Chan **roots, int nroots);
159 int		errdepth(int ed);
160 void		newup(char *name);
161 
162 int		exporter(Dev**, int*, int*);
163 int		mounter(char *mntpt, int how, int fds, int n);
164 void		shutdown(void);
165 
166 void		screeninit(int, int, char*);
167 
168 #pragma	varargck	argpos	panic		1
169