diff options
author | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
---|---|---|
committer | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
commit | e5888a1ffdae813d7575f5fb02275c6bb07e5199 (patch) | |
tree | d8d51eac403f07814b9e936eed0c9a79195e2450 /sys/src/libdraw/cloadimage.c |
Import sources from 2011-03-30 iso image
Diffstat (limited to 'sys/src/libdraw/cloadimage.c')
-rwxr-xr-x | sys/src/libdraw/cloadimage.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/sys/src/libdraw/cloadimage.c b/sys/src/libdraw/cloadimage.c new file mode 100755 index 000000000..eb30466cb --- /dev/null +++ b/sys/src/libdraw/cloadimage.c @@ -0,0 +1,49 @@ +#include <u.h> +#include <libc.h> +#include <draw.h> + +int +cloadimage(Image *i, Rectangle r, uchar *data, int ndata) +{ + int m, nb, miny, maxy, ncblock; + uchar *a; + + if(!rectinrect(r, i->r)){ + werrstr("cloadimage: bad rectangle"); + return -1; + } + + miny = r.min.y; + m = 0; + ncblock = _compblocksize(r, i->depth); + while(miny != r.max.y){ + maxy = atoi((char*)data+0*12); + nb = atoi((char*)data+1*12); + if(maxy<=miny || r.max.y<maxy){ + werrstr("creadimage: bad maxy %d", maxy); + return -1; + } + data += 2*12; + ndata -= 2*12; + m += 2*12; + if(nb<=0 || ncblock<nb || nb>ndata){ + werrstr("creadimage: bad count %d", nb); + return -1; + } + a = bufimage(i->display, 21+nb); + if(a == nil) + return -1; + a[0] = 'Y'; + BPLONG(a+1, i->id); + BPLONG(a+5, r.min.x); + BPLONG(a+9, miny); + BPLONG(a+13, r.max.x); + BPLONG(a+17, maxy); + memmove(a+21, data, nb); + miny = maxy; + data += nb; + ndata += nb; + m += nb; + } + return m; +} |