unload.c 435 B

12345678910111213141516171819202122232425
  1. #include <u.h>
  2. #include <libc.h>
  3. #include <draw.h>
  4. #include <memdraw.h>
  5. int
  6. unloadmemimage(Memimage *i, Rectangle r, uchar *data, int ndata)
  7. {
  8. int y, l;
  9. uchar *q;
  10. if(!rectinrect(r, i->r))
  11. return -1;
  12. l = bytesperline(r, i->depth);
  13. if(ndata < l*Dy(r))
  14. return -1;
  15. ndata = l*Dy(r);
  16. q = byteaddr(i, r.min);
  17. for(y=r.min.y; y<r.max.y; y++){
  18. memmove(data, q, l);
  19. q += i->width*sizeof(ulong);
  20. data += l;
  21. }
  22. return ndata;
  23. }