]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/vnc/compat.h
devdraw: simplify drawgen()
[plan9front.git] / sys / src / cmd / vnc / compat.h
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