Blame


1 ed7c8e8d 2003-09-30 devnull #include <u.h>
2 ed7c8e8d 2003-09-30 devnull #include <libc.h>
3 ed7c8e8d 2003-09-30 devnull #include <draw.h>
4 ed7c8e8d 2003-09-30 devnull
5 ed7c8e8d 2003-09-30 devnull int
6 ed7c8e8d 2003-09-30 devnull cloadimage(Image *i, Rectangle r, uchar *data, int ndata)
7 ed7c8e8d 2003-09-30 devnull {
8 ed7c8e8d 2003-09-30 devnull int m, nb, miny, maxy, ncblock;
9 ed7c8e8d 2003-09-30 devnull uchar *a;
10 ed7c8e8d 2003-09-30 devnull
11 ed7c8e8d 2003-09-30 devnull if(!rectinrect(r, i->r)){
12 ed7c8e8d 2003-09-30 devnull werrstr("cloadimage: bad rectangle");
13 ed7c8e8d 2003-09-30 devnull return -1;
14 ed7c8e8d 2003-09-30 devnull }
15 ed7c8e8d 2003-09-30 devnull
16 ed7c8e8d 2003-09-30 devnull miny = r.min.y;
17 ed7c8e8d 2003-09-30 devnull m = 0;
18 ed7c8e8d 2003-09-30 devnull ncblock = _compblocksize(r, i->depth);
19 ed7c8e8d 2003-09-30 devnull while(miny != r.max.y){
20 ed7c8e8d 2003-09-30 devnull maxy = atoi((char*)data+0*12);
21 ed7c8e8d 2003-09-30 devnull nb = atoi((char*)data+1*12);
22 ed7c8e8d 2003-09-30 devnull if(maxy<=miny || r.max.y<maxy){
23 ed7c8e8d 2003-09-30 devnull werrstr("creadimage: bad maxy %d", maxy);
24 ed7c8e8d 2003-09-30 devnull return -1;
25 ed7c8e8d 2003-09-30 devnull }
26 ed7c8e8d 2003-09-30 devnull data += 2*12;
27 ed7c8e8d 2003-09-30 devnull ndata -= 2*12;
28 ed7c8e8d 2003-09-30 devnull m += 2*12;
29 ed7c8e8d 2003-09-30 devnull if(nb<=0 || ncblock<nb || nb>ndata){
30 ed7c8e8d 2003-09-30 devnull werrstr("creadimage: bad count %d", nb);
31 ed7c8e8d 2003-09-30 devnull return -1;
32 ed7c8e8d 2003-09-30 devnull }
33 ed7c8e8d 2003-09-30 devnull a = bufimage(i->display, 21+nb);
34 ed7c8e8d 2003-09-30 devnull if(a == nil)
35 ed7c8e8d 2003-09-30 devnull return -1;
36 ed7c8e8d 2003-09-30 devnull a[0] = 'Y';
37 ed7c8e8d 2003-09-30 devnull BPLONG(a+1, i->id);
38 ed7c8e8d 2003-09-30 devnull BPLONG(a+5, r.min.x);
39 ed7c8e8d 2003-09-30 devnull BPLONG(a+9, miny);
40 ed7c8e8d 2003-09-30 devnull BPLONG(a+13, r.max.x);
41 ed7c8e8d 2003-09-30 devnull BPLONG(a+17, maxy);
42 ed7c8e8d 2003-09-30 devnull memmove(a+21, data, nb);
43 ed7c8e8d 2003-09-30 devnull miny = maxy;
44 ed7c8e8d 2003-09-30 devnull data += nb;
45 ed7c8e8d 2003-09-30 devnull ndata += nb;
46 ed7c8e8d 2003-09-30 devnull m += nb;
47 ed7c8e8d 2003-09-30 devnull }
48 ed7c8e8d 2003-09-30 devnull return m;
49 ed7c8e8d 2003-09-30 devnull }