| plan 9 kernel history: overview | file list | diff list |
1990/0504/port/devbit.c (diff list | history)
| 1990/03291/sys/src/9/port/devbit.c:40,47 – 1990/0504/sys/src/9/port/devbit.c:40,112 (short | long | prev | next) | ||
| 1990/0327 | void bitcompact(void); void bitfree(Bitmap*); extern Bitmap screen; | |
| 1990/0329 |
| |
| 1990/0327 | ||
| 1990/0504 | struct{ /* * First three fields are known in l.s */ int dx; /* interrupt-time delta */ int dy; int track; /* update cursor on screen */ Mouse; int changed; /* mouse structure changed since last read */ Rendez r; }mouse; struct{ Cursor; Lock; int visible; /* on screen */ Rectangle r; /* location */ }cursor = { {{0, 0}, {0xFFE0, 0xFFE0, 0xFFC0, 0xFF00, 0xFF00, 0xFF80, 0xFFC0, 0xFFE0, 0xE7F0, 0xE3F8, 0xC1FC, 0x00FE, 0x007F, 0x003E, 0x001C, 0x0008, }, {0x0000, 0x7FC0, 0x7F00, 0x7C00, 0x7E00, 0x7F00, 0x6F80, 0x67C0, 0x43E0, 0x41F0, 0x00F8, 0x007C, 0x003E, 0x001C, 0x0008, 0x0000, }}, }; ulong setbits[16]; Bitmap set = { setbits, 0, 1, 0, {0, 0, 16, 16} }; ulong clrbits[16]; Bitmap clr = { clrbits, 0, 1, 0, {0, 0, 16, 16} }; ulong cursorbackbits[16]; Bitmap cursorback = { cursorbackbits, 0, 1, 0, {0, 0, 16, 16} }; void cursortobitmap(void); void cursoron(int); void cursoroff(int); | |
| 1990/0324 | enum{ Qdir, Qbitblt, | |
| 1990/03291/sys/src/9/port/devbit.c:74,79 – 1990/0504/sys/src/9/port/devbit.c:139,145 | ||
| 1990/0327 | bit.words = ialloc(conf.nbitbyte, 0); bit.nwords = conf.nbitbyte/sizeof(ulong); bit.wfree = bit.words; | |
| 1990/0504 | cursortobitmap(); | |
| 1990/0324 | } void | |
| 1990/03291/sys/src/9/port/devbit.c:82,87 – 1990/0504/sys/src/9/port/devbit.c:148,154 | ||
| 1990/0324 | lock(&bit); bit.bltuse = 0; unlock(&bit); | |
| 1990/0504 | cursoron(1); | |
| 1990/0324 | } Chan* | |
| 1990/03291/sys/src/9/port/devbit.c:241,246 – 1990/0504/sys/src/9/port/devbit.c:308,314 | ||
| 1990/0329 | uchar *p, *q; long m, v, miny, maxy, t, x, y; | |
| 1990/0327 | ulong l, nw, ws; | |
| 1990/0504 | int off; | |
| 1990/0324 | Point pt; Rectangle rect; | |
| 1990/0327 | Bitmap *bp, *src, *dst; | |
| 1990/03291/sys/src/9/port/devbit.c:330,335 – 1990/0504/sys/src/9/port/devbit.c:398,406 | ||
| 1990/0327 | dst = &bit.map[v]; if(v<0 || v>=conf.nbitmap || dst->ldepth < 0) | |
| 1990/0329 | error(0, Ebadbitmap); | |
| 1990/0504 | off = 0; if(v == 0) off = 1; | |
| 1990/0327 | pt.x = GLONG(p+3); pt.y = GLONG(p+7); v = GSHORT(p+11); | |
| 1990/03291/sys/src/9/port/devbit.c:336,347 – 1990/0504/sys/src/9/port/devbit.c:407,424 | ||
| 1990/0327 | src = &bit.map[v]; if(v<0 || v>=conf.nbitmap || src->ldepth < 0) | |
| 1990/0329 | error(0, Ebadbitmap); | |
| 1990/0504 | if(v == 0) off = 1; | |
| 1990/0327 | rect.min.x = GLONG(p+13); rect.min.y = GLONG(p+17); rect.max.x = GLONG(p+21); rect.max.y = GLONG(p+25); v = GSHORT(p+29); | |
| 1990/0504 | if(off) cursoroff(1); | |
| 1990/0327 | bitblt(dst, pt, src, rect, v); | |
| 1990/0504 | if(off) cursoron(1); | |
| 1990/0327 | m -= 31; p += 31; break; | |
| 1990/03291/sys/src/9/port/devbit.c:379,384 – 1990/0504/sys/src/9/port/devbit.c:456,464 | ||
| 1990/0329 | dst = &bit.map[v]; if(v>=conf.nbitmap || dst->ldepth<0) error(0, Ebadbitmap); | |
| 1990/0504 | off = 0; if(v == 0) off = 1; | |
| 1990/0329 | pt.x = GLONG(p+3); pt.y = GLONG(p+7); v = GSHORT(p+11); | |
| 1990/03291/sys/src/9/port/devbit.c:390,396 – 1990/0504/sys/src/9/port/devbit.c:470,480 | ||
| 1990/0329 | q = memchr(p, 0, m); if(q == 0) error(0, Ebadblt); | |
| 1990/0504 | if(off) cursoroff(1); | |
| 1990/0329 | string(dst, pt, &defont0/*BUG*/, (char*)p, v); | |
| 1990/0504 | if(off) cursoron(1); | |
| 1990/0329 | q++; m -= q-p; p = q; | |
| 1990/03291/sys/src/9/port/devbit.c:411,416 – 1990/0504/sys/src/9/port/devbit.c:495,503 | ||
| 1990/0329 | dst = &bit.map[v]; if(v>=conf.nbitmap || dst->ldepth<0) error(0, Ebadbitmap); | |
| 1990/0504 | off = 0; if(v == 0) off = 1; | |
| 1990/0329 | rect.min.x = GLONG(p+3); rect.min.y = GLONG(p+7); rect.max.x = GLONG(p+11); | |
| 1990/03291/sys/src/9/port/devbit.c:428,434 – 1990/0504/sys/src/9/port/devbit.c:515,525 | ||
| 1990/0329 | for(i=0; i<16; i++) t.bits[i] = src->base[i]>>16; | |
| 1990/0504 | if(off) cursoroff(1); | |
| 1990/0329 | texture(dst, rect, &t, v); | |
| 1990/0504 | if(off) cursoron(1); | |
| 1990/0329 | } m -= 23; p += 23; | |
| 1990/03291/sys/src/9/port/devbit.c:449,454 – 1990/0504/sys/src/9/port/devbit.c:540,548 | ||
| 1990/0329 | dst = &bit.map[v]; if(v>=conf.nbitmap || dst->ldepth<0) error(0, Ebadbitmap); | |
| 1990/0504 | off = 0; if(v == 0) off = 1; | |
| 1990/0329 | miny = GLONG(p+3); maxy = GLONG(p+7); | |
| 1990/03291 | if(miny>maxy || miny<dst->r.min.y || maxy>dst->r.max.y) | |
| 1990/03291/sys/src/9/port/devbit.c:466,471 – 1990/0504/sys/src/9/port/devbit.c:560,567 | ||
| 1990/0329 | m -= 11; if(m < l*(maxy-miny)) error(0, Ebadblt); | |
| 1990/0504 | if(off) cursoroff(1); | |
| 1990/0329 | for(y=miny; y<maxy; y++){ q = (uchar*)addr(dst, Pt(dst->r.min.x, y)); q += (dst->r.min.x&((sizeof(ulong))*ws-1))/8; | |
| 1990/03291/sys/src/9/port/devbit.c:473,478 – 1990/0504/sys/src/9/port/devbit.c:569,576 | ||
| 1990/0329 | *q++ = U2K(*p++); m -= l; } | |
| 1990/0504 | if(off) cursoron(1); | |
| 1990/0329 | break; | |
| 1990/0327 | } | |
| 1990/03291/sys/src/9/port/devbit.c:524,533 – 1990/0504/sys/src/9/port/devbit.c:622,701 | ||
| 1990/0329 | } void | |
| 1990/0504 | cursortobitmap(void) | |
| 1990/0329 | { | |
| 1990/0504 | int i; lock(&cursor); for(i=0; i<16; i++){ setbits[i] = cursor.set[i]<<16; clrbits[i] = cursor.clr[i]<<16; } unlock(&cursor); } void cursoron(int dolock) { if(dolock) lock(&cursor); if(cursor.visible++ == 0){ cursor.r.min = mouse.xy; cursor.r.max = add(mouse.xy, Pt(16, 16)); cursor.r = raddp(cursor.r, cursor.offset); bitblt(&cursorback, Pt(0, 0), &screen, cursor.r, S); bitblt(&screen, add(mouse.xy, cursor.offset), &clr, Rect(0, 0, 16, 16), D&~S); bitblt(&screen, add(mouse.xy, cursor.offset), &set, Rect(0, 0, 16, 16), S|D); } if(dolock) unlock(&cursor); } void cursoroff(int dolock) { if(dolock) lock(&cursor); if(--cursor.visible == 0) bitblt(&screen, cursor.r.min, &cursorback, Rect(0, 0, 16, 16), S); if(dolock) unlock(&cursor); } void mousebuttons(int b) /* called splhi */ { mouse.buttons = b; mouse.changed = 1; wakeup(&mouse.r); } void mouseclock(void) /* called splhi */ { int x, y; if(mouse.track && canlock(&cursor)){ x = mouse.xy.x + mouse.dx; if(x < screen.r.min.x) x = screen.r.min.x; if(x >= screen.r.max.x) x = screen.r.max.x; y = mouse.xy.y + mouse.dy; if(y < screen.r.min.y) y = screen.r.min.y; if(y >= screen.r.max.y) y = screen.r.max.y; cursoroff(0); mouse.xy = Pt(x, y); cursoron(0); mouse.dx = 0; mouse.dy = 0; mouse.track = 0; mouse.changed = 1; unlock(&cursor); wakeup(&mouse.r); | |
| 1990/0329 | } | |
| 1990/0324 | } | |