xref: /plan9/sys/src/cmd/unix/drawterm/libmemdraw/unload.c (revision 8ccd4a6360d974db7bd7bbd4f37e7018419ea908)
1*8ccd4a63SDavid du Colombier #include <u.h>
2*8ccd4a63SDavid du Colombier #include <libc.h>
3*8ccd4a63SDavid du Colombier #include <draw.h>
4*8ccd4a63SDavid du Colombier #include <memdraw.h>
57dd7cddfSDavid du Colombier 
67dd7cddfSDavid du Colombier int
unloadmemimage(Memimage * i,Rectangle r,uchar * data,int ndata)77dd7cddfSDavid du Colombier unloadmemimage(Memimage *i, Rectangle r, uchar *data, int ndata)
87dd7cddfSDavid du Colombier {
97dd7cddfSDavid du Colombier 	int y, l;
107dd7cddfSDavid du Colombier 	uchar *q;
117dd7cddfSDavid du Colombier 
127dd7cddfSDavid du Colombier 	if(!rectinrect(r, i->r))
137dd7cddfSDavid du Colombier 		return -1;
147dd7cddfSDavid du Colombier 	l = bytesperline(r, i->depth);
157dd7cddfSDavid du Colombier 	if(ndata < l*Dy(r))
167dd7cddfSDavid du Colombier 		return -1;
177dd7cddfSDavid du Colombier 	ndata = l*Dy(r);
187dd7cddfSDavid du Colombier 	q = byteaddr(i, r.min);
197dd7cddfSDavid du Colombier 	for(y=r.min.y; y<r.max.y; y++){
207dd7cddfSDavid du Colombier 		memmove(data, q, l);
217dd7cddfSDavid du Colombier 		q += i->width*sizeof(ulong);
227dd7cddfSDavid du Colombier 		data += l;
237dd7cddfSDavid du Colombier 	}
247dd7cddfSDavid du Colombier 	return ndata;
257dd7cddfSDavid du Colombier }
26