| plan 9 kernel history: overview | file list | diff list |
1992/0621/port/devbit.c (diff list | history)
| 1992/0605/sys/src/9/port/devbit.c:37,59 – 1992/0621/sys/src/9/port/devbit.c:37,62 (short | long | prev | next) | ||
| 1990/0329 | */ /* | |
| 1990/0902 |
| |
| 1990/0327 |
| |
| 1992/0621 | * followed by N blocks. The bitmap pointer is zero if block is free. * bit.map is an array of pointers to GBitmaps. The GBitmaps are * freed individually and their corresponding entries in bit.map are zeroed. * The index into bit.map is the Bitmap id as seen in libg. Subfonts and * fonts are handled similarly. | |
| 1990/0327 | */ | |
| 1990/0324 | ||
| 1990/05313 | struct { | |
| 1990/0324 | Ref; | |
| 1990/0902 |
| |
| 1992/0621 | GBitmap **map; /* indexed array */ int nmap; /* number allocated */ | |
| 1990/0327 | ulong *words; /* storage */ ulong nwords; /* total in arena */ ulong *wfree; /* pointer to next free word */ | |
| 1992/0209 |
| |
| 1992/0621 | GFont **font; /* indexed array */ int nfont; /* number allocated */ GSubfont**subfont; /* indexed array */ int nsubfont; /* number allocated */ | |
| 1990/0327 | int lastid; /* last allocated bitmap id */ | |
| 1992/0209 | int lastsubfid; /* last allocated subfont id */ | |
| 1990/0623 | int lastfid; /* last allocated font id */ | |
| 1992/0605/sys/src/9/port/devbit.c:64,73 – 1992/0621/sys/src/9/port/devbit.c:67,79 | ||
| 1991/0706 | int mid; /* colormap read bitmap id */ | |
| 1990/0324 | }bit; | |
| 1992/0621 | #define DMAP 32 /* delta increase in size of arrays */ | |
| 1990/0327 | #define FREE 0x80000000 void bitcompact(void); | |
| 1992/0209 |
| |
| 1992/0621 | int bitalloc(Rectangle, int); | |
| 1990/0902 | void bitfree(GBitmap*); | |
| 1992/0621 | void fontfree(GFont*); void subfontfree(GSubfont*); | |
| 1992/0209 | void bitstring(GBitmap*, Point, GFont*, uchar*, long, Fcode); void bitloadchar(GFont*, int, GSubfont*, int); | |
| 1990/0912 | extern GBitmap gscreen; | |
| 1992/0605/sys/src/9/port/devbit.c:142,148 – 1992/0621/sys/src/9/port/devbit.c:148,154 | ||
| 1990/0324 | }; #define NBIT (sizeof bitdir/sizeof(Dirtab)) | |
| 1990/0629 |
| |
| 1992/0621 | #define NINFO 8192 | |
| 1990/0324 | void bitreset(void) | |
| 1992/0605/sys/src/9/port/devbit.c:151,181 – 1992/0621/sys/src/9/port/devbit.c:157,178 | ||
| 1990/0902 | GBitmap *bp; | |
| 1991/0706 | ulong r; | |
| 1990/0327 | ||
| 1990/0902 |
| |
| 1990/0327 |
| |
| 1990/0912 |
| |
| 1992/0621 | bit.map = smalloc(DMAP*sizeof(GBitmap*)); bit.nmap = DMAP; | |
| 1991/0706 | getcolor(0, &r, &r, &r); if(r == 0) flipping = 1; | |
| 1990/0327 |
| |
| 1992/0209 | bit.lastsubfid = -1; | |
| 1990/0623 | bit.lastfid = -1; | |
| 1990/0327 | bit.words = ialloc(conf.nbitbyte, 0); | |
| 1992/0621 | print("bitreset %lux\n", bit.words); | |
| 1990/0327 | bit.nwords = conf.nbitbyte/sizeof(ulong); bit.wfree = bit.words; | |
| 1992/0209 |
| |
| 1992/0208 |
| |
| 1992/0209 |
| |
| 1992/0621 | bit.font = smalloc(DMAP*sizeof(GFont*)); bit.nfont = DMAP; bit.subfont = smalloc(DMAP*sizeof(GSubfont*)); bit.nsubfont = DMAP; | |
| 1990/05313 | Cursortocursor(&arrow); | |
| 1990/0324 | } | |
| 1992/0605/sys/src/9/port/devbit.c:186,192 – 1992/0621/sys/src/9/port/devbit.c:183,189 | ||
| 1990/0324 | unlock(&bit); | |
| 1991/0706 | if(gscreen.ldepth > 3) cursorback.ldepth = 0; | |
| 1992/0621 | else{ | |
| 1991/0706 | cursorback.ldepth = gscreen.ldepth; cursorback.width = ((16 << gscreen.ldepth) + 31) >> 5; } | |
| 1992/0605/sys/src/9/port/devbit.c:196,202 – 1992/0621/sys/src/9/port/devbit.c:193,198 | ||
| 1990/0324 | Chan* bitattach(char *spec) { | |
| 1992/0604 |
| |
| 1990/0324 | return devattach('b', spec); } | |
| 1992/0605/sys/src/9/port/devbit.c:221,229 – 1992/0621/sys/src/9/port/devbit.c:217,227 | ||
| 1990/0324 | devstat(c, db, bitdir, NBIT, devgen); } | |
| 1992/0621 | Chan* | |
| 1990/0324 | bitopen(Chan *c, int omode) { | |
| 1992/0621 | GBitmap *b; | |
| 1990/11211 | if(c->qid.path == CHDIR){ | |
| 1990/0324 | if(omode != OREAD) | |
| 1990/11211 | error(Eperm); | |
| 1992/0605/sys/src/9/port/devbit.c:233,239 – 1992/0621/sys/src/9/port/devbit.c:231,240 | ||
| 1990/0324 | unlock(&bit); | |
| 1990/11211 | error(Einuse); | |
| 1990/0324 | } | |
| 1992/0604 |
| |
| 1992/0621 | b = smalloc(sizeof(GBitmap)); *b = gscreen; bit.map[0] = b; /* bitmap 0 is screen */ bit.subfont[0] = defont; /* subfont 0 is default */ | |
| 1990/0327 | bit.lastid = -1; | |
| 1990/0623 | bit.lastfid = -1; | |
| 1992/0209 | bit.lastsubfid = -1; | |
| 1992/0605/sys/src/9/port/devbit.c:275,298 – 1992/0621/sys/src/9/port/devbit.c:276,318 | ||
| 1990/0324 | void bitclose(Chan *c) { | |
| 1990/0327 |
| |
| 1990/0902 |
| |
| 1992/0208 |
| |
| 1992/0209 |
| |
| 1992/0621 | GBitmap *b, **bp, **ebp; GSubfont *s, **sp, **esp; GFont *f, **fp, **efp; | |
| 1990/0327 | ||
| 1990/11211 | if(c->qid.path!=CHDIR && (c->flag&COPEN)){ | |
| 1990/0329 | lock(&bit); | |
| 1990/0327 | if(--bit.ref == 0){ | |
| 1992/0209 |
| |
| 1990/0623 |
| |
| 1992/0209 |
| |
| 1992/0621 | /* 0th bitmap, screen, has no special storage */ bp = bit.map; free(*bp); *bp = 0; ebp = &bit.map[bit.nmap]; bp++; for(; bp<ebp; bp++){ b = *bp; if(b){ bitfree(b); *bp = 0; } | |
| 1992/0209 | } | |
| 1992/0621 | /* 0th subfont, defont, points to real storage */ esp = &bit.subfont[bit.nsubfont]; for(sp=&bit.subfont[1]; sp<esp; sp++){ s = *sp; if(s){ subfontfree(s); *sp = 0; } } efp = &bit.font[bit.nfont]; for(fp=bit.font; fp<efp; fp++){ f = *fp; if(f){ fontfree(f); *fp = 0; } } | |
| 1990/0327 | } | |
| 1990/0324 | unlock(&bit); } | |
| 1992/0605/sys/src/9/port/devbit.c:440,446 – 1992/0621/sys/src/9/port/devbit.c:460,469 | ||
| 1991/0706 | * read colormap: * data 12*(2**bitmapdepth) */ | |
| 1992/0621 | src = bit.map[bit.mid]; if(src == 0) error(Ebadbitmap); l = (1<<src->ldepth); | |
| 1991/0706 | nw = 1 << l; if(n < 12*nw) error(Ebadblt); | |
| 1992/0605/sys/src/9/port/devbit.c:467,474 – 1992/0621/sys/src/9/port/devbit.c:490,497 | ||
| 1991/0706 | * read bitmap: | |
| 1990/0613 | * data bytewidth*(maxy-miny) */ | |
| 1992/0621 | src = bit.map[bit.rid]; if(src == 0) | |
| 1990/11211 | error(Ebadbitmap); | |
| 1990/0613 | off = 0; if(bit.rid == 0) | |
| 1992/0605/sys/src/9/port/devbit.c:558,572 – 1992/0621/sys/src/9/port/devbit.c:581,595 | ||
| 1990/0329 | uchar *p, *q; | |
| 1991/0706 | long m, v, miny, maxy, minx, maxx, t, x, y; ulong l, nw, ws, rv; | |
| 1992/0621 | int off, isoff, i, j, ok; | |
| 1990/06111 | Point pt, pt1, pt2; | |
| 1990/0324 | Rectangle rect; | |
| 1990/05313 | Cursor curs; | |
| 1991/0706 | Fcode fc; | |
| 1990/0623 | Fontchar *fcp; | |
| 1990/0902 |
| |
| 1992/0208 |
| |
| 1992/0209 |
| |
| 1992/0621 | GBitmap *b, *src, *dst, *bp; GSubfont *f, **fp; GFont *ff, **ffp; | |
| 1990/0324 | ||
| 1990/11211 | if(c->qid.path == CHDIR) error(Eisdir); | |
| 1992/0605/sys/src/9/port/devbit.c:582,587 – 1992/0621/sys/src/9/port/devbit.c:605,611 | ||
| 1990/0721 | } | |
| 1990/0324 | p = va; m = n; | |
| 1992/0621 | SET(src, dst, f, ff); | |
| 1990/0327 | while(m > 0) switch(*p){ | |
| 1990/0329 | default: | |
| 1992/0605/sys/src/9/port/devbit.c:607,614 – 1992/0621/sys/src/9/port/devbit.c:631,637 | ||
| 1990/0327 | rect.max.y = GLONG(p+14); | |
| 1991/0423 | if(Dx(rect) < 0 || Dy(rect) < 0) error(Ebadblt); | |
| 1992/0209 |
| |
| 1990/0327 |
| |
| 1992/0621 | bit.lastid = bitalloc(rect, v); | |
| 1990/0327 | m -= 18; p += 18; break; | |
| 1992/0605/sys/src/9/port/devbit.c:627,634 – 1992/0621/sys/src/9/port/devbit.c:650,656 | ||
| 1990/11211 | error(Ebadblt); | |
| 1991/0706 | fc = GSHORT(p+29) & 0xF; v = GSHORT(p+11); | |
| 1992/0621 | if(v<0 || v>=bit.nmap || (src=bit.map[v])==0) | |
| 1991/0706 | error(Ebadbitmap); off = 0; if(v == 0){ | |
| 1992/0605/sys/src/9/port/devbit.c:637,644 – 1992/0621/sys/src/9/port/devbit.c:659,665 | ||
| 1991/0706 | off = 1; } | |
| 1990/0327 | v = GSHORT(p+1); | |
| 1992/0621 | if(v<0 || v>=bit.nmap || (dst=bit.map[v])==0) | |
| 1990/11211 | error(Ebadbitmap); | |
| 1991/0706 | if(v == 0){ if(flipping) | |
| 1992/0605/sys/src/9/port/devbit.c:703,712 – 1992/0621/sys/src/9/port/devbit.c:724,733 | ||
| 1990/0327 | if(m < 3) | |
| 1990/11211 | error(Ebadblt); | |
| 1990/0327 | v = GSHORT(p+1); | |
| 1990/0623 |
| |
| 1992/0621 | if(v<0 || v>=bit.nmap || (dst=bit.map[v])==0) | |
| 1990/11211 | error(Ebadbitmap); | |
| 1990/0327 | bitfree(dst); | |
| 1992/0621 | bit.map[v] = 0; | |
| 1990/0327 | m -= 3; p += 3; | |
| 1990/0604 | break; | |
| 1992/0605/sys/src/9/port/devbit.c:720,729 – 1992/0621/sys/src/9/port/devbit.c:741,750 | ||
| 1990/0623 | if(m < 3) | |
| 1990/11211 | error(Ebadblt); | |
| 1990/0623 | v = GSHORT(p+1); | |
| 1992/0209 |
| |
| 1992/0208 |
| |
| 1992/0621 | if(v<0 || v>=bit.nsubfont || (f=bit.subfont[v])==0) | |
| 1990/11211 | error(Ebadfont); | |
| 1990/0623 |
| |
| 1992/0621 | subfontfree(f); bit.subfont[v] = 0; | |
| 1990/0623 | m -= 3; p += 3; break; | |
| 1992/0605/sys/src/9/port/devbit.c:737,749 – 1992/0621/sys/src/9/port/devbit.c:758,767 | ||
| 1992/0209 | if(m < 3) error(Ebadblt); v = GSHORT(p+1); | |
| 1992/0621 | if(v<0 || v>=bit.nfont || (ff=bit.font[v])==0) | |
| 1992/0209 | error(Ebadfont); | |
| 1992/0621 | fontfree(ff); bit.font[v] = 0; | |
| 1992/0209 | m -= 3; p += 3; break; | |
| 1992/0605/sys/src/9/port/devbit.c:776,798 – 1992/0621/sys/src/9/port/devbit.c:794,821 | ||
| 1990/0623 | v = GSHORT(p+1); if(v<0 || v>NINFO || m<7+6*(v+1)) /* BUG */ | |
| 1990/11211 | error(Ebadblt); | |
| 1992/0208 |
| |
| 1992/0209 |
| |
| 1992/0621 | for(i=1; i<bit.nsubfont; i++) if(bit.subfont[i] == 0) | |
| 1992/0209 | goto subfontfound; | |
| 1990/11211 |
| |
| 1992/0621 | fp = bit.subfont; bit.subfont = smalloc((bit.nsubfont+DMAP)*sizeof(GSubfont*)); memmove(bit.subfont, fp, bit.nsubfont*sizeof(GSubfont*)); free(fp); bit.nsubfont += DMAP; | |
| 1992/0209 | subfontfound: | |
| 1992/0621 | f = smalloc(sizeof(GSubfont)); bit.subfont[i] = f; f->info = smalloc((v+1)*sizeof(Fontchar)); | |
| 1990/0623 | f->n = v; f->height = p[3]; f->ascent = p[4]; v = GSHORT(p+5); | |
| 1992/0621 | if(v<0 || v>=bit.nmap || (dst=bit.map[v])==0) | |
| 1990/11211 | error(Ebadbitmap); | |
| 1990/0623 | m -= 7; p += 7; fcp = f->info; | |
| 1992/0621 | for(j=0; j<=f->n; j++,fcp++){ | |
| 1990/0623 | fcp->x = GSHORT(p); fcp->top = p[2]; fcp->bottom = p[3]; | |
| 1992/0605/sys/src/9/port/devbit.c:802,808 – 1992/0621/sys/src/9/port/devbit.c:825,831 | ||
| 1990/0623 | p += 6; m -= 6; } | |
| 1992/0209 |
| |
| 1992/0621 | bit.lastsubfid = i; | |
| 1990/0623 | f->bits = dst; break; | |
| 1992/0605/sys/src/9/port/devbit.c:820,827 – 1992/0621/sys/src/9/port/devbit.c:843,849 | ||
| 1990/06111 | if(m < 22) | |
| 1990/11211 | error(Ebadblt); | |
| 1990/06111 | v = GSHORT(p+1); | |
| 1990/0623 |
| |
| 1992/0621 | if(v<0 || v>=bit.nmap || (dst=bit.map[v])==0) | |
| 1990/11211 | error(Ebadbitmap); | |
| 1990/06111 | off = 0; | |
| 1991/0706 | fc = GSHORT(p+20) & 0xF; | |
| 1992/0605/sys/src/9/port/devbit.c:854,861 – 1992/0621/sys/src/9/port/devbit.c:876,882 | ||
| 1991/0706 | if(m < 3) error(Ebadblt); v = GSHORT(p+1); | |
| 1992/0621 | if(v<0 || v>=bit.nmap || (dst=bit.map[v])==0) | |
| 1991/0706 | error(Ebadbitmap); bit.mid = v; m -= 3; | |
| 1992/0605/sys/src/9/port/devbit.c:876,887 – 1992/0621/sys/src/9/port/devbit.c:897,914 | ||
| 1992/0209 | v = GSHORT(p+3); if(v < 0) error(Ebadblt); | |
| 1992/0621 | for(i=0; i<bit.nfont; i++) if(bit.font[i] == 0) | |
| 1992/0209 | goto fontfound; | |
| 1992/0621 | ffp = bit.font; bit.font = smalloc((bit.nfont+DMAP)*sizeof(GFont*)); memmove(bit.font, ffp, bit.nfont*sizeof(GFont*)); free(ffp); bit.nfont += DMAP; | |
| 1992/0209 | fontfound: | |
| 1992/0621 | ff = smalloc(sizeof(GFont)); bit.font[i] = ff; ff = bit.font[i]; | |
| 1992/0209 | ff->height = p[1]; ff->ascent = p[2]; ff->ldepth = v; | |
| 1992/0605/sys/src/9/port/devbit.c:889,895 – 1992/0621/sys/src/9/port/devbit.c:916,922 | ||
| 1992/0209 | ff->b = 0; m -= 5; p += 5; | |
| 1992/0621 | bit.lastfid = i; | |
| 1992/0209 | break; | |
| 1990/0722 | case 'p': | |
| 1992/0605/sys/src/9/port/devbit.c:905,912 – 1992/0621/sys/src/9/port/devbit.c:932,938 | ||
| 1990/0722 | if(m < 14) | |
| 1990/11211 | error(Ebadblt); | |
| 1990/0722 | v = GSHORT(p+1); | |
| 1992/0621 | if(v<0 || v>=bit.nmap || (dst=bit.map[v])==0) | |
| 1990/11211 | error(Ebadbitmap); | |
| 1990/0722 | off = 0; | |
| 1991/0706 | fc = GSHORT(p+12) & 0xF; | |
| 1992/0605/sys/src/9/port/devbit.c:937,944 – 1992/0621/sys/src/9/port/devbit.c:963,969 | ||
| 1992/0604 | if(m < 19) error(Ebadblt); v = GSHORT(p+1); | |
| 1992/0621 | if(v<0 || v>=bit.nmap || (dst=bit.map[v])==0) | |
| 1992/0604 | error(Ebadbitmap); rect.min.x = GLONG(p+3); rect.min.y = GLONG(p+7); | |
| 1992/0605/sys/src/9/port/devbit.c:963,970 – 1992/0621/sys/src/9/port/devbit.c:988,994 | ||
| 1990/0613 | if(m < 11) | |
| 1990/11211 | error(Ebadblt); | |
| 1990/0613 | v = GSHORT(p+1); | |
| 1990/0623 |
| |
| 1992/0621 | if(v<0 || v>=bit.nmap || (src=bit.map[v])==0) | |
| 1990/11211 | error(Ebadbitmap); | |
| 1990/0613 | miny = GLONG(p+3); maxy = GLONG(p+7); | |
| 1992/0605/sys/src/9/port/devbit.c:990,997 – 1992/0621/sys/src/9/port/devbit.c:1014,1020 | ||
| 1990/0329 | if(m < 16) | |
| 1990/11211 | error(Ebadblt); | |
| 1990/0329 | v = GSHORT(p+1); | |
| 1990/0623 |
| |
| 1992/0621 | if(v<0 || v>=bit.nmap || (dst=bit.map[v])==0) | |
| 1990/11211 | error(Ebadbitmap); | |
| 1990/0504 | off = 0; | |
| 1991/0706 | fc = GSHORT(p+13) & 0xF; | |
| 1992/0605/sys/src/9/port/devbit.c:1003,1010 – 1992/0621/sys/src/9/port/devbit.c:1026,1032 | ||
| 1990/0329 | pt.x = GLONG(p+3); pt.y = GLONG(p+7); v = GSHORT(p+11); | |
| 1992/0209 |
| |
| 1992/0208 |
| |
| 1992/0621 | if(v<0 || v>=bit.nsubfont || (f=bit.subfont[v])==0) | |
| 1990/11211 | error(Ebadblt); | |
| 1990/0329 | p += 15; m -= 15; | |
| 1992/0605/sys/src/9/port/devbit.c:1033,1040 – 1992/0621/sys/src/9/port/devbit.c:1055,1061 | ||
| 1990/0329 | if(m < 23) | |
| 1990/11211 | error(Ebadblt); | |
| 1990/0329 | v = GSHORT(p+1); | |
| 1990/0623 |
| |
| 1992/0621 | if(v<0 || v>=bit.nmap || (dst=bit.map[v])==0) | |
| 1990/11211 | error(Ebadbitmap); | |
| 1990/0504 | off = 0; | |
| 1991/0706 | fc = GSHORT(p+21) & 0xF; | |
| 1992/0605/sys/src/9/port/devbit.c:1048,1055 – 1992/0621/sys/src/9/port/devbit.c:1069,1075 | ||
| 1990/0329 | rect.max.x = GLONG(p+11); rect.max.y = GLONG(p+15); v = GSHORT(p+19); | |
| 1990/0623 |
| |
| 1992/0621 | if(v<0 || v>=bit.nmap || (src=bit.map[v])==0) | |
| 1990/11211 | error(Ebadbitmap); | |
| 1991/0701 | if(off && !isoff){ cursoroff(1); | |
| 1992/0605/sys/src/9/port/devbit.c:1074,1081 – 1992/0621/sys/src/9/port/devbit.c:1094,1100 | ||
| 1992/0209 | if(m < 17) error(Ebadblt); v = GSHORT(p+1); | |
| 1992/0621 | if(v<0 || v>=bit.nmap || (dst=bit.map[v])==0) | |
| 1992/0209 | error(Ebadbitmap); off = 0; fc = GSHORT(p+13) & 0xF; | |
| 1992/0605/sys/src/9/port/devbit.c:1087,1094 – 1992/0621/sys/src/9/port/devbit.c:1106,1112 | ||
| 1992/0209 | pt.x = GLONG(p+3); pt.y = GLONG(p+7); v = GSHORT(p+11); | |
| 1992/0621 | if(v<0 || v>=bit.nfont || (ff=bit.font[v])==0) | |
| 1992/0209 | error(Ebadblt); l = GSHORT(p+15)*2; p += 17; | |
| 1992/0605/sys/src/9/port/devbit.c:1114,1121 – 1992/0621/sys/src/9/port/devbit.c:1132,1138 | ||
| 1992/0209 | if(m < 5) error(Ebadblt); v = GSHORT(p+1); | |
| 1992/0621 | if(v<0 || v>=bit.nfont || (ff=bit.font[v])==0) | |
| 1992/0209 | error(Ebadblt); /* * memset not necessary but helps avoid | |
| 1992/0605/sys/src/9/port/devbit.c:1127,1133 – 1992/0621/sys/src/9/port/devbit.c:1144,1152 | ||
| 1992/0209 | bitfree(ff->b); ff->width = GSHORT(p+3); ff->b = 0; | |
| 1992/0621 | i = bitalloc(Rect(0, 0, (NFCACHE+NFLOOK)*ff->width, ff->height), ff->ldepth); ff->b = bit.map[i]; bit.map[i] = 0; /* disconnect it from GBitmap space */ | |
| 1992/0209 | p += 5; m -= 5; break; | |
| 1992/0605/sys/src/9/port/devbit.c:1144,1151 – 1992/0621/sys/src/9/port/devbit.c:1163,1169 | ||
| 1990/0329 | if(m < 11) | |
| 1990/11211 | error(Ebadblt); | |
| 1990/0329 | v = GSHORT(p+1); | |
| 1990/0623 |
| |
| 1992/0621 | if(v<0 || v>=bit.nmap || (dst=bit.map[v])==0) | |
| 1990/11211 | error(Ebadbitmap); | |
| 1990/0504 | off = 0; if(v == 0) | |
| 1992/0605/sys/src/9/port/devbit.c:1216,1230 – 1992/0621/sys/src/9/port/devbit.c:1234,1246 | ||
| 1992/0209 | if(m < 9) error(Ebadblt); v = GSHORT(p+1); | |
| 1992/0621 | if(v<0 || v>=conf.nfont || (ff=bit.font[v])==0) | |
| 1992/0209 | error(Ebadblt); l = GSHORT(p+3); if(l >= NFCACHE+NFLOOK) error(Ebadblt); v = GSHORT(p+5); | |
| 1992/0621 | if(v<0 || v>=conf.nsubfont || (f=bit.subfont[v])==0) | |
| 1992/0209 | error(Ebadblt); nw = GSHORT(p+7); if(nw >= f->n) | |
| 1992/0605/sys/src/9/port/devbit.c:1249,1255 – 1992/0621/sys/src/9/port/devbit.c:1265,1271 | ||
| 1991/0706 | error(Ebadbitmap); m -= 3; p += 3; | |
| 1992/0621 | nw = 1 << (1 << gscreen.ldepth); | |
| 1991/0706 | if(m < 12*nw) error(Ebadblt); ok = 1; | |
| 1992/0605/sys/src/9/port/devbit.c:1273,1293 – 1992/0621/sys/src/9/port/devbit.c:1289,1308 | ||
| 1990/0324 | return n; } | |
| 1992/0209 |
| |
| 1992/0621 | int | |
| 1992/0209 | bitalloc(Rectangle rect, int ld) { | |
| 1992/0621 | GBitmap *b, **bp, **ep; | |
| 1992/0209 | ulong l, ws, nw; long t; | |
| 1992/0621 | int i; | |
| 1992/0209 |
| |
| 1992/0621 | print("bitalloc %lux\n", bit.wfree); | |
| 1992/0209 | ws = 1<<(5-ld); /* pixels per word */ | |
| 1992/0519 |
| |
| 1992/0621 | if(rect.min.x >= 0){ | |
| 1992/0519 | l = (rect.max.x+ws-1)/ws; l -= rect.min.x/ws; | |
| 1992/0209 |
| |
| 1992/0621 | }else{ /* make positive before divide */ | |
| 1992/0209 | t = (-rect.min.x)+ws-1; t = (t/ws)*ws; l = (t+rect.max.x+ws-1)/ws; | |
| 1992/0605/sys/src/9/port/devbit.c:1298,1334 – 1992/0621/sys/src/9/port/devbit.c:1313,1375 | ||
| 1992/0209 | if(bit.wfree+2+nw > bit.words+bit.nwords) error(Enobitstore); } | |
| 1992/0621 | b = smalloc(sizeof(GBitmap)); | |
| 1992/0209 | *bit.wfree++ = nw; | |
| 1992/0621 | *bit.wfree++ = (ulong)b; b->base = bit.wfree; memset(b->base, 0, nw*sizeof(ulong)); | |
| 1992/0209 | bit.wfree += nw; | |
| 1992/0621 | b->zero = l*rect.min.y; | |
| 1992/0209 | if(rect.min.x >= 0) | |
| 1992/0621 | b->zero += rect.min.x/ws; | |
| 1992/0209 | else | |
| 1992/0604 |
| |
| 1992/0209 |
| |
| 1992/0621 | b->zero -= (-rect.min.x+ws-1)/ws; b->zero = -b->zero; b->width = l; b->ldepth = ld; b->r = rect; b->clipr = rect; b->cache = 0; /* worth doing better than linear lookup? */ ep = bit.map+bit.nmap; for(bp=bit.map; bp<ep; bp++) if(*bp == 0) break; if(bp == ep){ bp = bit.map; bit.map = smalloc((bit.nmap+DMAP)*sizeof(GBitmap*)); memmove(bit.map, bp, bit.nmap*sizeof(GBitmap*)); free(bp); bp = bit.map+bit.nmap; bit.nmap += DMAP; } *bp = b; return bp-bit.map; | |
| 1992/0209 | } | |
| 1990/0324 | void | |
| 1990/0902 |
| |
| 1992/0621 | bitfree(GBitmap *b) | |
| 1990/0327 | { | |
| 1990/05313 |
| |
| 1990/0327 |
| |
| 1992/0621 | b->base[-1] = 0; free(b); | |
| 1990/0327 | } | |
| 1992/0209 | void | |
| 1992/0621 | fontfree(GFont *f) { if(f->b) bitfree(f->b); free(f); } void subfontfree(GSubfont *s) { free(s->info); free(s); } void | |
| 1992/0209 | bitstring(GBitmap *bp, Point pt, GFont *f, uchar *p, long l, Fcode fc) { int full; | |
| 1992/0605/sys/src/9/port/devbit.c:1395,1410 – 1992/0621/sys/src/9/port/devbit.c:1436,1441 | ||
| 1992/0209 | } | |
| 1990/08101 | QLock bitlock; | |
| 1992/0209 |
| |
| 1990/08101 |
| |
| 1990/0902 |
| |
| 1990/08101 |
| |
| 1990/11211 |
| |
| 1990/08101 |
| |
| 1990/0327 | void bitcompact(void) | |