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