Blame


1 257fb626 2006-06-25 devnull #include <u.h>
2 257fb626 2006-06-25 devnull #include <libc.h>
3 257fb626 2006-06-25 devnull #include <draw.h>
4 257fb626 2006-06-25 devnull #include <mouse.h>
5 257fb626 2006-06-25 devnull #include <cursor.h>
6 257fb626 2006-06-25 devnull #include <drawfcall.h>
7 257fb626 2006-06-25 devnull
8 257fb626 2006-06-25 devnull static int
9 257fb626 2006-06-25 devnull _stringsize(char *s)
10 257fb626 2006-06-25 devnull {
11 150f8802 2006-06-25 devnull if(s == nil)
12 150f8802 2006-06-25 devnull s = "";
13 257fb626 2006-06-25 devnull return 4+strlen(s);
14 257fb626 2006-06-25 devnull }
15 257fb626 2006-06-25 devnull
16 257fb626 2006-06-25 devnull static int
17 257fb626 2006-06-25 devnull PUTSTRING(uchar *p, char *s)
18 257fb626 2006-06-25 devnull {
19 257fb626 2006-06-25 devnull int n;
20 257fb626 2006-06-25 devnull
21 257fb626 2006-06-25 devnull if(s == nil)
22 257fb626 2006-06-25 devnull s = "";
23 257fb626 2006-06-25 devnull n = strlen(s);
24 257fb626 2006-06-25 devnull PUT(p, n);
25 257fb626 2006-06-25 devnull memmove(p+4, s, n);
26 257fb626 2006-06-25 devnull return n+4;
27 257fb626 2006-06-25 devnull }
28 257fb626 2006-06-25 devnull
29 257fb626 2006-06-25 devnull static int
30 257fb626 2006-06-25 devnull GETSTRING(uchar *p, char **s)
31 257fb626 2006-06-25 devnull {
32 257fb626 2006-06-25 devnull int n;
33 257fb626 2006-06-25 devnull
34 257fb626 2006-06-25 devnull GET(p, n);
35 257fb626 2006-06-25 devnull memmove(p, p+4, n);
36 257fb626 2006-06-25 devnull *s = (char*)p;
37 257fb626 2006-06-25 devnull p[n] = 0;
38 257fb626 2006-06-25 devnull return n+4;
39 257fb626 2006-06-25 devnull }
40 257fb626 2006-06-25 devnull
41 257fb626 2006-06-25 devnull uint
42 257fb626 2006-06-25 devnull sizeW2M(Wsysmsg *m)
43 257fb626 2006-06-25 devnull {
44 257fb626 2006-06-25 devnull switch(m->type){
45 257fb626 2006-06-25 devnull default:
46 257fb626 2006-06-25 devnull return 0;
47 257fb626 2006-06-25 devnull case Trdmouse:
48 257fb626 2006-06-25 devnull case Rbouncemouse:
49 257fb626 2006-06-25 devnull case Rmoveto:
50 257fb626 2006-06-25 devnull case Rcursor:
51 257fb626 2006-06-25 devnull case Trdkbd:
52 257fb626 2006-06-25 devnull case Rlabel:
53 257fb626 2006-06-25 devnull case Rinit:
54 257fb626 2006-06-25 devnull case Trdsnarf:
55 257fb626 2006-06-25 devnull case Rwrsnarf:
56 257fb626 2006-06-25 devnull case Ttop:
57 257fb626 2006-06-25 devnull case Rtop:
58 257fb626 2006-06-25 devnull case Rresize:
59 257fb626 2006-06-25 devnull return 4+1+1;
60 257fb626 2006-06-25 devnull case Rrdmouse:
61 257fb626 2006-06-25 devnull return 4+1+1+4+4+4+4+1;
62 257fb626 2006-06-25 devnull case Tbouncemouse:
63 257fb626 2006-06-25 devnull return 4+1+1+4+4+4;
64 257fb626 2006-06-25 devnull case Tmoveto:
65 257fb626 2006-06-25 devnull return 4+1+1+4+4;
66 257fb626 2006-06-25 devnull case Tcursor:
67 257fb626 2006-06-25 devnull return 4+1+1+4+4+2*16+2*16+1;
68 257fb626 2006-06-25 devnull case Rerror:
69 257fb626 2006-06-25 devnull return 4+1+1+_stringsize(m->error);
70 257fb626 2006-06-25 devnull case Rrdkbd:
71 257fb626 2006-06-25 devnull return 4+1+1+2;
72 257fb626 2006-06-25 devnull case Tlabel:
73 257fb626 2006-06-25 devnull return 4+1+1+_stringsize(m->label);
74 257fb626 2006-06-25 devnull case Tinit:
75 257fb626 2006-06-25 devnull return 4+1+1
76 257fb626 2006-06-25 devnull +_stringsize(m->winsize)
77 257fb626 2006-06-25 devnull +_stringsize(m->label);
78 257fb626 2006-06-25 devnull case Rrdsnarf:
79 257fb626 2006-06-25 devnull case Twrsnarf:
80 257fb626 2006-06-25 devnull return 4+1+1+_stringsize(m->snarf);
81 257fb626 2006-06-25 devnull case Rrddraw:
82 257fb626 2006-06-25 devnull case Twrdraw:
83 257fb626 2006-06-25 devnull return 4+1+1+4+m->count;
84 257fb626 2006-06-25 devnull case Trddraw:
85 257fb626 2006-06-25 devnull case Rwrdraw:
86 257fb626 2006-06-25 devnull return 4+1+1+4;
87 257fb626 2006-06-25 devnull case Tresize:
88 257fb626 2006-06-25 devnull return 4+1+1+4*4;
89 257fb626 2006-06-25 devnull }
90 257fb626 2006-06-25 devnull }
91 257fb626 2006-06-25 devnull
92 257fb626 2006-06-25 devnull uint
93 257fb626 2006-06-25 devnull convW2M(Wsysmsg *m, uchar *p, uint n)
94 257fb626 2006-06-25 devnull {
95 257fb626 2006-06-25 devnull int nn;
96 257fb626 2006-06-25 devnull
97 257fb626 2006-06-25 devnull nn = sizeW2M(m);
98 257fb626 2006-06-25 devnull if(n < nn || nn == 0 || n < 6)
99 257fb626 2006-06-25 devnull return 0;
100 257fb626 2006-06-25 devnull PUT(p, nn);
101 257fb626 2006-06-25 devnull p[4] = m->tag;
102 257fb626 2006-06-25 devnull p[5] = m->type;
103 257fb626 2006-06-25 devnull
104 257fb626 2006-06-25 devnull switch(m->type){
105 257fb626 2006-06-25 devnull default:
106 257fb626 2006-06-25 devnull return 0;
107 257fb626 2006-06-25 devnull case Trdmouse:
108 257fb626 2006-06-25 devnull case Rbouncemouse:
109 257fb626 2006-06-25 devnull case Rmoveto:
110 257fb626 2006-06-25 devnull case Rcursor:
111 257fb626 2006-06-25 devnull case Trdkbd:
112 257fb626 2006-06-25 devnull case Rlabel:
113 257fb626 2006-06-25 devnull case Rinit:
114 257fb626 2006-06-25 devnull case Trdsnarf:
115 257fb626 2006-06-25 devnull case Rwrsnarf:
116 257fb626 2006-06-25 devnull case Ttop:
117 257fb626 2006-06-25 devnull case Rtop:
118 257fb626 2006-06-25 devnull case Rresize:
119 257fb626 2006-06-25 devnull break;
120 257fb626 2006-06-25 devnull case Rerror:
121 257fb626 2006-06-25 devnull PUTSTRING(p+6, m->error);
122 257fb626 2006-06-25 devnull break;
123 257fb626 2006-06-25 devnull case Rrdmouse:
124 257fb626 2006-06-25 devnull PUT(p+6, m->mouse.xy.x);
125 257fb626 2006-06-25 devnull PUT(p+10, m->mouse.xy.y);
126 257fb626 2006-06-25 devnull PUT(p+14, m->mouse.buttons);
127 257fb626 2006-06-25 devnull PUT(p+18, m->mouse.msec);
128 257fb626 2006-06-25 devnull p[19] = m->resized;
129 257fb626 2006-06-25 devnull break;
130 257fb626 2006-06-25 devnull case Tbouncemouse:
131 257fb626 2006-06-25 devnull PUT(p+6, m->mouse.xy.x);
132 257fb626 2006-06-25 devnull PUT(p+10, m->mouse.xy.y);
133 257fb626 2006-06-25 devnull PUT(p+14, m->mouse.buttons);
134 257fb626 2006-06-25 devnull break;
135 257fb626 2006-06-25 devnull case Tmoveto:
136 257fb626 2006-06-25 devnull PUT(p+6, m->mouse.xy.x);
137 257fb626 2006-06-25 devnull PUT(p+10, m->mouse.xy.y);
138 257fb626 2006-06-25 devnull break;
139 257fb626 2006-06-25 devnull case Tcursor:
140 257fb626 2006-06-25 devnull PUT(p+6, m->cursor.offset.x);
141 257fb626 2006-06-25 devnull PUT(p+10, m->cursor.offset.y);
142 257fb626 2006-06-25 devnull memmove(p+14, m->cursor.clr, sizeof m->cursor.clr);
143 257fb626 2006-06-25 devnull memmove(p+46, m->cursor.set, sizeof m->cursor.set);
144 257fb626 2006-06-25 devnull p[78] = m->arrowcursor;
145 257fb626 2006-06-25 devnull break;
146 257fb626 2006-06-25 devnull case Rrdkbd:
147 257fb626 2006-06-25 devnull PUT2(p+6, m->rune);
148 257fb626 2006-06-25 devnull break;
149 257fb626 2006-06-25 devnull case Tlabel:
150 257fb626 2006-06-25 devnull PUTSTRING(p+6, m->label);
151 257fb626 2006-06-25 devnull break;
152 257fb626 2006-06-25 devnull case Tinit:
153 257fb626 2006-06-25 devnull p += 6;
154 257fb626 2006-06-25 devnull p += PUTSTRING(p, m->winsize);
155 257fb626 2006-06-25 devnull p += PUTSTRING(p, m->label);
156 257fb626 2006-06-25 devnull break;
157 257fb626 2006-06-25 devnull case Rrdsnarf:
158 257fb626 2006-06-25 devnull case Twrsnarf:
159 257fb626 2006-06-25 devnull PUTSTRING(p+6, m->snarf);
160 257fb626 2006-06-25 devnull break;
161 257fb626 2006-06-25 devnull case Rrddraw:
162 257fb626 2006-06-25 devnull case Twrdraw:
163 257fb626 2006-06-25 devnull PUT(p+6, m->count);
164 257fb626 2006-06-25 devnull memmove(p+10, m->data, m->count);
165 257fb626 2006-06-25 devnull break;
166 257fb626 2006-06-25 devnull case Trddraw:
167 257fb626 2006-06-25 devnull case Rwrdraw:
168 257fb626 2006-06-25 devnull PUT(p+6, m->count);
169 257fb626 2006-06-25 devnull break;
170 257fb626 2006-06-25 devnull case Tresize:
171 257fb626 2006-06-25 devnull PUT(p+6, m->rect.min.x);
172 257fb626 2006-06-25 devnull PUT(p+10, m->rect.min.y);
173 257fb626 2006-06-25 devnull PUT(p+14, m->rect.max.x);
174 257fb626 2006-06-25 devnull PUT(p+18, m->rect.max.y);
175 257fb626 2006-06-25 devnull break;
176 257fb626 2006-06-25 devnull }
177 257fb626 2006-06-25 devnull return nn;
178 257fb626 2006-06-25 devnull }
179 257fb626 2006-06-25 devnull
180 257fb626 2006-06-25 devnull uint
181 257fb626 2006-06-25 devnull convM2W(uchar *p, uint n, Wsysmsg *m)
182 257fb626 2006-06-25 devnull {
183 257fb626 2006-06-25 devnull int nn;
184 257fb626 2006-06-25 devnull
185 257fb626 2006-06-25 devnull if(n < 6)
186 257fb626 2006-06-25 devnull return 0;
187 257fb626 2006-06-25 devnull GET(p, nn);
188 257fb626 2006-06-25 devnull if(nn > n)
189 257fb626 2006-06-25 devnull return 0;
190 257fb626 2006-06-25 devnull m->tag = p[4];
191 257fb626 2006-06-25 devnull m->type = p[5];
192 257fb626 2006-06-25 devnull switch(m->type){
193 257fb626 2006-06-25 devnull default:
194 257fb626 2006-06-25 devnull return 0;
195 257fb626 2006-06-25 devnull case Trdmouse:
196 257fb626 2006-06-25 devnull case Rbouncemouse:
197 257fb626 2006-06-25 devnull case Rmoveto:
198 257fb626 2006-06-25 devnull case Rcursor:
199 257fb626 2006-06-25 devnull case Trdkbd:
200 257fb626 2006-06-25 devnull case Rlabel:
201 257fb626 2006-06-25 devnull case Rinit:
202 257fb626 2006-06-25 devnull case Trdsnarf:
203 257fb626 2006-06-25 devnull case Rwrsnarf:
204 257fb626 2006-06-25 devnull case Ttop:
205 257fb626 2006-06-25 devnull case Rtop:
206 257fb626 2006-06-25 devnull case Rresize:
207 257fb626 2006-06-25 devnull break;
208 257fb626 2006-06-25 devnull case Rerror:
209 257fb626 2006-06-25 devnull GETSTRING(p+6, &m->error);
210 257fb626 2006-06-25 devnull break;
211 257fb626 2006-06-25 devnull case Rrdmouse:
212 257fb626 2006-06-25 devnull GET(p+6, m->mouse.xy.x);
213 257fb626 2006-06-25 devnull GET(p+10, m->mouse.xy.y);
214 257fb626 2006-06-25 devnull GET(p+14, m->mouse.buttons);
215 257fb626 2006-06-25 devnull GET(p+18, m->mouse.msec);
216 257fb626 2006-06-25 devnull m->resized = p[19];
217 257fb626 2006-06-25 devnull break;
218 257fb626 2006-06-25 devnull case Tbouncemouse:
219 257fb626 2006-06-25 devnull GET(p+6, m->mouse.xy.x);
220 257fb626 2006-06-25 devnull GET(p+10, m->mouse.xy.y);
221 257fb626 2006-06-25 devnull GET(p+14, m->mouse.buttons);
222 257fb626 2006-06-25 devnull break;
223 257fb626 2006-06-25 devnull case Tmoveto:
224 257fb626 2006-06-25 devnull GET(p+6, m->mouse.xy.x);
225 257fb626 2006-06-25 devnull GET(p+10, m->mouse.xy.y);
226 257fb626 2006-06-25 devnull break;
227 257fb626 2006-06-25 devnull case Tcursor:
228 257fb626 2006-06-25 devnull GET(p+6, m->cursor.offset.x);
229 257fb626 2006-06-25 devnull GET(p+10, m->cursor.offset.y);
230 257fb626 2006-06-25 devnull memmove(m->cursor.clr, p+14, sizeof m->cursor.clr);
231 257fb626 2006-06-25 devnull memmove(m->cursor.set, p+46, sizeof m->cursor.set);
232 257fb626 2006-06-25 devnull m->arrowcursor = p[78];
233 257fb626 2006-06-25 devnull break;
234 257fb626 2006-06-25 devnull case Rrdkbd:
235 257fb626 2006-06-25 devnull GET2(p+6, m->rune);
236 257fb626 2006-06-25 devnull break;
237 257fb626 2006-06-25 devnull case Tlabel:
238 257fb626 2006-06-25 devnull GETSTRING(p+6, &m->label);
239 257fb626 2006-06-25 devnull break;
240 257fb626 2006-06-25 devnull case Tinit:
241 257fb626 2006-06-25 devnull p += 6;
242 257fb626 2006-06-25 devnull p += GETSTRING(p, &m->winsize);
243 257fb626 2006-06-25 devnull p += GETSTRING(p, &m->label);
244 257fb626 2006-06-25 devnull break;
245 257fb626 2006-06-25 devnull case Rrdsnarf:
246 257fb626 2006-06-25 devnull case Twrsnarf:
247 257fb626 2006-06-25 devnull GETSTRING(p+6, &m->snarf);
248 257fb626 2006-06-25 devnull break;
249 257fb626 2006-06-25 devnull case Rrddraw:
250 257fb626 2006-06-25 devnull case Twrdraw:
251 257fb626 2006-06-25 devnull GET(p+6, m->count);
252 257fb626 2006-06-25 devnull m->data = p+10;
253 257fb626 2006-06-25 devnull break;
254 257fb626 2006-06-25 devnull case Trddraw:
255 257fb626 2006-06-25 devnull case Rwrdraw:
256 257fb626 2006-06-25 devnull GET(p+6, m->count);
257 257fb626 2006-06-25 devnull break;
258 257fb626 2006-06-25 devnull case Tresize:
259 257fb626 2006-06-25 devnull GET(p+6, m->rect.min.x);
260 257fb626 2006-06-25 devnull GET(p+10, m->rect.min.y);
261 257fb626 2006-06-25 devnull GET(p+14, m->rect.max.x);
262 257fb626 2006-06-25 devnull GET(p+18, m->rect.max.y);
263 257fb626 2006-06-25 devnull break;
264 257fb626 2006-06-25 devnull }
265 257fb626 2006-06-25 devnull return nn;
266 257fb626 2006-06-25 devnull }
267 257fb626 2006-06-25 devnull
268 257fb626 2006-06-25 devnull int
269 257fb626 2006-06-25 devnull readwsysmsg(int fd, uchar *buf, uint nbuf)
270 257fb626 2006-06-25 devnull {
271 257fb626 2006-06-25 devnull int n;
272 257fb626 2006-06-25 devnull
273 257fb626 2006-06-25 devnull if(nbuf < 6)
274 257fb626 2006-06-25 devnull return -1;
275 257fb626 2006-06-25 devnull if(readn(fd, buf, 4) != 4)
276 257fb626 2006-06-25 devnull return -1;
277 257fb626 2006-06-25 devnull GET(buf, n);
278 257fb626 2006-06-25 devnull if(n > nbuf)
279 257fb626 2006-06-25 devnull return -1;
280 257fb626 2006-06-25 devnull if(readn(fd, buf+4, n-4) != n-4)
281 257fb626 2006-06-25 devnull return -1;
282 257fb626 2006-06-25 devnull return n;
283 257fb626 2006-06-25 devnull }
284 257fb626 2006-06-25 devnull
285 257fb626 2006-06-25 devnull int
286 257fb626 2006-06-25 devnull drawfcallfmt(Fmt *fmt)
287 257fb626 2006-06-25 devnull {
288 257fb626 2006-06-25 devnull Wsysmsg *m;
289 257fb626 2006-06-25 devnull
290 257fb626 2006-06-25 devnull m = va_arg(fmt->args, Wsysmsg*);
291 257fb626 2006-06-25 devnull fmtprint(fmt, "tag=%d ", m->tag);
292 257fb626 2006-06-25 devnull switch(m->type){
293 257fb626 2006-06-25 devnull default:
294 257fb626 2006-06-25 devnull return fmtprint(fmt, "unknown msg %d", m->type);
295 257fb626 2006-06-25 devnull case Rerror:
296 257fb626 2006-06-25 devnull return fmtprint(fmt, "Rerror error='%s'", m->error);
297 257fb626 2006-06-25 devnull case Trdmouse:
298 257fb626 2006-06-25 devnull return fmtprint(fmt, "Trdmouse");
299 257fb626 2006-06-25 devnull case Rrdmouse:
300 257fb626 2006-06-25 devnull return fmtprint(fmt, "Rrdmouse x=%d y=%d buttons=%d msec=%d resized=%d",
301 257fb626 2006-06-25 devnull m->mouse.xy.x, m->mouse.xy.y,
302 257fb626 2006-06-25 devnull m->mouse.buttons, m->mouse.msec, m->resized);
303 257fb626 2006-06-25 devnull case Tbouncemouse:
304 257fb626 2006-06-25 devnull return fmtprint(fmt, "Tbouncemouse x=%d y=%d buttons=%d",
305 257fb626 2006-06-25 devnull m->mouse.xy.x, m->mouse.xy.y, m->mouse.buttons);
306 257fb626 2006-06-25 devnull case Rbouncemouse:
307 257fb626 2006-06-25 devnull return fmtprint(fmt, "Rbouncemouse");
308 257fb626 2006-06-25 devnull case Tmoveto:
309 257fb626 2006-06-25 devnull return fmtprint(fmt, "Tmoveto x=%d y=%d", m->mouse.xy.x, m->mouse.xy.y);
310 257fb626 2006-06-25 devnull case Rmoveto:
311 257fb626 2006-06-25 devnull return fmtprint(fmt, "Rmoveto");
312 257fb626 2006-06-25 devnull case Tcursor:
313 257fb626 2006-06-25 devnull return fmtprint(fmt, "Tcursor arrow=%d", m->arrowcursor);
314 257fb626 2006-06-25 devnull case Rcursor:
315 257fb626 2006-06-25 devnull return fmtprint(fmt, "Rcursor");
316 257fb626 2006-06-25 devnull case Trdkbd:
317 257fb626 2006-06-25 devnull return fmtprint(fmt, "Trdkbd");
318 257fb626 2006-06-25 devnull case Rrdkbd:
319 257fb626 2006-06-25 devnull return fmtprint(fmt, "Rrdkbd rune=%C", m->rune);
320 257fb626 2006-06-25 devnull case Tlabel:
321 257fb626 2006-06-25 devnull return fmtprint(fmt, "Tlabel label='%s'", m->label);
322 257fb626 2006-06-25 devnull case Rlabel:
323 257fb626 2006-06-25 devnull return fmtprint(fmt, "Rlabel");
324 257fb626 2006-06-25 devnull case Tinit:
325 257fb626 2006-06-25 devnull return fmtprint(fmt, "Tinit label='%s' winsize='%s'", m->label, m->winsize);
326 257fb626 2006-06-25 devnull case Rinit:
327 257fb626 2006-06-25 devnull return fmtprint(fmt, "Rinit");
328 257fb626 2006-06-25 devnull case Trdsnarf:
329 257fb626 2006-06-25 devnull return fmtprint(fmt, "Trdsnarf");
330 257fb626 2006-06-25 devnull case Rrdsnarf:
331 257fb626 2006-06-25 devnull return fmtprint(fmt, "Rrdsnarf snarf='%s'", m->snarf);
332 257fb626 2006-06-25 devnull case Twrsnarf:
333 257fb626 2006-06-25 devnull return fmtprint(fmt, "Twrsnarf snarf='%s'", m->snarf);
334 257fb626 2006-06-25 devnull case Rwrsnarf:
335 257fb626 2006-06-25 devnull return fmtprint(fmt, "Rwrsnarf");
336 257fb626 2006-06-25 devnull case Trddraw:
337 257fb626 2006-06-25 devnull return fmtprint(fmt, "Trddraw %d", m->count);
338 257fb626 2006-06-25 devnull case Rrddraw:
339 257fb626 2006-06-25 devnull return fmtprint(fmt, "Rrddraw %d %.*H", m->count, m->count, m->data);
340 257fb626 2006-06-25 devnull case Twrdraw:
341 257fb626 2006-06-25 devnull return fmtprint(fmt, "Twrdraw %d %.*H", m->count, m->count, m->data);
342 257fb626 2006-06-25 devnull case Rwrdraw:
343 257fb626 2006-06-25 devnull return fmtprint(fmt, "Rwrdraw %d", m->count);
344 257fb626 2006-06-25 devnull case Ttop:
345 257fb626 2006-06-25 devnull return fmtprint(fmt, "Ttop");
346 257fb626 2006-06-25 devnull case Rtop:
347 257fb626 2006-06-25 devnull return fmtprint(fmt, "Rtop");
348 257fb626 2006-06-25 devnull case Tresize:
349 257fb626 2006-06-25 devnull return fmtprint(fmt, "Tresize %R", m->rect);
350 257fb626 2006-06-25 devnull case Rresize:
351 257fb626 2006-06-25 devnull return fmtprint(fmt, "Rresize");
352 257fb626 2006-06-25 devnull }
353 257fb626 2006-06-25 devnull }