| plan 9 kernel history: overview | file list | diff list |
1990/0613/port/devbit.c (diff list | history)
| 1990/06111/sys/src/9/port/devbit.c:34,39 – 1990/0613/sys/src/9/port/devbit.c:34,42 (short | long | prev | next) | ||
| 1990/0327 | ulong *wfree; /* pointer to next free word */ int lastid; /* last allocated bitmap id */ | |
| 1990/0329 | int init; /* freshly opened; init message pending */ | |
| 1990/0613 | int rid; /* read bitmap id */ int rminy; /* read miny */ int rmaxy; /* read maxy */ | |
| 1990/0324 | }bit; | |
| 1990/0327 | #define FREE 0x80000000 | |
| 1990/06111/sys/src/9/port/devbit.c:196,201 – 1990/0613/sys/src/9/port/devbit.c:199,205 | ||
| 1990/0324 | error(0, Einuse); } | |
| 1990/0327 | bit.lastid = -1; | |
| 1990/0613 | bit.rid = -1; | |
| 1990/0604 | bit.init = 0; | |
| 1990/05151 | bit.ref = 1; | |
| 1990/05313 | Cursortocursor(&arrow); | |
| 1990/06111/sys/src/9/port/devbit.c:258,264 – 1990/0613/sys/src/9/port/devbit.c:262,272 | ||
| 1990/0324 | long bitread(Chan *c, void *va, long n) { | |
| 1990/0327 |
| |
| 1990/0613 | uchar *p, *q; long miny, maxy, t, x, y; ulong l, nw, ws; int off; Bitmap *src; | |
| 1990/0327 | ||
| 1990/0324 | if(c->qid & CHDIR) return devdirread(c, va, n, bitdir, NBIT, devgen); | |
| 1990/06111/sys/src/9/port/devbit.c:329,334 – 1990/0613/sys/src/9/port/devbit.c:337,384 | ||
| 1990/0505 | n = 3; break; } | |
| 1990/0613 | if(bit.rid >= 0){ /* * read * data bytewidth*(maxy-miny) */ src = &bit.map[bit.rid]; if(src->ldepth<0) error(0, Ebadbitmap); off = 0; if(bit.rid == 0) off = 1; miny = bit.rminy; maxy = bit.rmaxy; if(miny>maxy || miny<src->r.min.y || maxy>src->r.max.y) error(0, Ebadblt); ws = 1<<(3-src->ldepth); /* pixels per byte */ /* set l to number of bytes of incoming data per scan line */ if(src->r.min.x >= 0) l = (src->r.max.x+ws-1)/ws - src->r.min.x/ws; else{ /* make positive before divide */ t = (-src->r.min.x)+ws-1; t = (t/ws)*ws; l = (t+src->r.max.x+ws-1)/ws; } if(n < l*(maxy-miny)) error(0, Ebadblt); if(off) cursoroff(1); n = 0; p = va; for(y=miny; y<maxy; y++){ q = (uchar*)addr(src, Pt(src->r.min.x, y)); q += (src->r.min.x&((sizeof(ulong))*ws-1))/8; for(x=0; x<l; x++) *p++ = K2U(*q++); n += l; } if(off) cursoron(1); bit.rid = -1; break; } | |
| 1990/0505 | error(0, Ebadblt); default: | |
| 1990/06111/sys/src/9/port/devbit.c:552,557 – 1990/0613/sys/src/9/port/devbit.c:602,632 | ||
| 1990/06111 | cursoron(1); m -= 22; p += 22; | |
| 1990/0613 | break; case 'r': /* * read * 'r' 1 * src id 2 * miny 4 * maxy 4 */ if(m < 11) error(0, Ebadblt); v = GSHORT(p+1); src = &bit.map[v]; if(v>=conf.nbitmap || src->ldepth<0) error(0, Ebadbitmap); miny = GLONG(p+3); maxy = GLONG(p+7); if(miny>maxy || miny<src->r.min.y || maxy>src->r.max.y) error(0, Ebadblt); bit.rid = v; bit.rminy = miny; bit.rmaxy = maxy; p += 11; m -= 11; | |
| 1990/06111 | break; | |
| 1990/0329 | case 's': | |