1*6f1f24ddSDavid du Colombier #include <u.h> 2*6f1f24ddSDavid du Colombier #include <libc.h> 3*6f1f24ddSDavid du Colombier #include <draw.h> 4*6f1f24ddSDavid du Colombier #include <memdraw.h> 5*6f1f24ddSDavid du Colombier 6*6f1f24ddSDavid du Colombier /* 7*6f1f24ddSDavid du Colombier * Wordaddr is deprecated. 8*6f1f24ddSDavid du Colombier */ 9*6f1f24ddSDavid du Colombier ulong* wordaddr(Memimage * i,Point p)10*6f1f24ddSDavid du Colombierwordaddr(Memimage *i, Point p) 11*6f1f24ddSDavid du Colombier { 12*6f1f24ddSDavid du Colombier return (ulong*) ((uintptr)byteaddr(i, p) & ~(sizeof(ulong)-1)); 13*6f1f24ddSDavid du Colombier } 14*6f1f24ddSDavid du Colombier 15*6f1f24ddSDavid du Colombier uchar* byteaddr(Memimage * i,Point p)16*6f1f24ddSDavid du Colombierbyteaddr(Memimage *i, Point p) 17*6f1f24ddSDavid du Colombier { 18*6f1f24ddSDavid du Colombier uchar *a; 19*6f1f24ddSDavid du Colombier 20*6f1f24ddSDavid du Colombier a = i->data->bdata+i->zero+sizeof(ulong)*p.y*i->width; 21*6f1f24ddSDavid du Colombier 22*6f1f24ddSDavid du Colombier if(i->depth < 8){ 23*6f1f24ddSDavid du Colombier /* 24*6f1f24ddSDavid du Colombier * We need to always round down, 25*6f1f24ddSDavid du Colombier * but C rounds toward zero. 26*6f1f24ddSDavid du Colombier */ 27*6f1f24ddSDavid du Colombier int np; 28*6f1f24ddSDavid du Colombier np = 8/i->depth; 29*6f1f24ddSDavid du Colombier if(p.x < 0) 30*6f1f24ddSDavid du Colombier return a+(p.x-np+1)/np; 31*6f1f24ddSDavid du Colombier else 32*6f1f24ddSDavid du Colombier return a+p.x/np; 33*6f1f24ddSDavid du Colombier } 34*6f1f24ddSDavid du Colombier else 35*6f1f24ddSDavid du Colombier return a+p.x*(i->depth/8); 36*6f1f24ddSDavid du Colombier } 37