xref: /plan9/sys/src/libmemdraw/unload.c (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
1*7dd7cddfSDavid du Colombier #include <u.h>
2*7dd7cddfSDavid du Colombier #include <libc.h>
3*7dd7cddfSDavid du Colombier #include <draw.h>
4*7dd7cddfSDavid du Colombier #include <memdraw.h>
5*7dd7cddfSDavid du Colombier 
6*7dd7cddfSDavid du Colombier int
unloadmemimage(Memimage * i,Rectangle r,uchar * data,int ndata)7*7dd7cddfSDavid du Colombier unloadmemimage(Memimage *i, Rectangle r, uchar *data, int ndata)
8*7dd7cddfSDavid du Colombier {
9*7dd7cddfSDavid du Colombier 	int y, l;
10*7dd7cddfSDavid du Colombier 	uchar *q;
11*7dd7cddfSDavid du Colombier 
12*7dd7cddfSDavid du Colombier 	if(!rectinrect(r, i->r))
13*7dd7cddfSDavid du Colombier 		return -1;
14*7dd7cddfSDavid du Colombier 	l = bytesperline(r, i->depth);
15*7dd7cddfSDavid du Colombier 	if(ndata < l*Dy(r))
16*7dd7cddfSDavid du Colombier 		return -1;
17*7dd7cddfSDavid du Colombier 	ndata = l*Dy(r);
18*7dd7cddfSDavid du Colombier 	q = byteaddr(i, r.min);
19*7dd7cddfSDavid du Colombier 	for(y=r.min.y; y<r.max.y; y++){
20*7dd7cddfSDavid du Colombier 		memmove(data, q, l);
21*7dd7cddfSDavid du Colombier 		q += i->width*sizeof(ulong);
22*7dd7cddfSDavid du Colombier 		data += l;
23*7dd7cddfSDavid du Colombier 	}
24*7dd7cddfSDavid du Colombier 	return ndata;
25*7dd7cddfSDavid du Colombier }
26