| plan 9 kernel history: overview | file list | diff list |
1999/1005/port/devdraw.c (diff list | history)
| 1999/0716/sys/src/9/port/devdraw.c:1,21 – 1999/1005/sys/src/9/port/devdraw.c:1,24 (short | long | prev | next) | ||
| 1997/1101 | #include "u.h" | |
| 1999/0716 |
| |
| 1999/1005 | #include "../port/lib.h" | |
| 1997/1101 | #include "mem.h" #include "dat.h" #include "fns.h" | |
| 1999/0716 |
| |
| 1999/1005 | #include "../port/error.h" #include <pool.h> | |
| 1997/1101 | #define Image IMAGE #include <draw.h> #include <memdraw.h> #include <memlayer.h> | |
| 1999/1005 | #include <cursor.h> #include "screen.h" | |
| 1997/1101 | enum { | |
| 1998/0204 | Qtopdir = 0, | |
| 1997/1101 |
| |
| 1999/1005 | Q2nd, | |
| 1997/1101 | Qcolormap, Qctl, Qdata, | |
| 1999/0716/sys/src/9/port/devdraw.c:150,156 – 1999/1005/sys/src/9/port/devdraw.c:153,159 | ||
| 1997/1101 | }; static Draw sdraw; | |
| 1999/1005 | static Memimage *screenimage; | |
| 1997/1101 | static Memdata screendata; static Rectangle flushrect; | |
| 1998/0109 | static int waste; | |
| 1999/0716/sys/src/9/port/devdraw.c:172,178 – 1999/1005/sys/src/9/port/devdraw.c:175,181 | ||
| 1997/1101 | static char Enotfont[] = "image not a font"; static char Eindex[] = "character index out of range"; static char Enoclient[] = "no such draw client"; | |
| 1999/1005 | static char Edepth[] = "image has bad depth"; | |
| 1997/1101 | static char Enameused[] = "image name in use"; static char Enoname[] = "no image with that name"; static char Eoldname[] = "named image no longer valid"; | |
| 1999/0716/sys/src/9/port/devdraw.c:302,308 – 1999/1005/sys/src/9/port/devdraw.c:305,311 | ||
| 1998/0109 | int abb, ar, anbb; Rectangle nbb; | |
| 1999/1005 | if(sdraw.softscreen==0 || !rectclip(&r, screenimage->r)) | |
| 1998/0109 | return; if(flushrect.min.x >= flushrect.max.x){ | |
| 1999/0716/sys/src/9/port/devdraw.c:353,359 – 1999/1005/sys/src/9/port/devdraw.c:356,362 | ||
| 1997/1127 | if(l == nil) | |
| 1997/1101 | return; | |
| 1997/1127 | do{ | |
| 1999/1005 | if(l->screen->image->data != screenimage->data) | |
| 1997/1127 | return; r = rectaddpt(r, l->delta); l = l->screen->image->layer; | |
| 1999/0716/sys/src/9/port/devdraw.c:414,428 – 1999/1005/sys/src/9/port/devdraw.c:417,434 | ||
| 1997/1101 | { DImage *d; | |
| 1999/1005 | // print("drawlookup %d", id); | |
| 1997/1101 | d = client->dimage[id&HASHMASK]; while(d){ if(d->id == id){ if(checkname && !drawgoodname(d)) | |
| 1997/1104 | error(Eoldname); | |
| 1999/1005 | // print(" %p...", d); | |
| 1997/1101 | return d; } d = d->next; } | |
| 1999/1005 | // print(" nil..."); | |
| 1997/1101 | return 0; } | |
| 1999/0716/sys/src/9/port/devdraw.c:475,480 – 1999/1005/sys/src/9/port/devdraw.c:481,487 | ||
| 1997/1101 | d->dscreen = dscreen; d->next = client->dimage[id&HASHMASK]; client->dimage[id&HASHMASK] = d; | |
| 1999/1005 | // print("install %d %p...", id, d); | |
| 1997/1101 | return i; } | |
| 1999/0716/sys/src/9/port/devdraw.c:485,490 – 1999/1005/sys/src/9/port/devdraw.c:492,500 | ||
| 1997/1101 | CScreen *c; c = malloc(sizeof(CScreen)); | |
| 1999/1005 | if(dimage && dimage->image && dimage->image->chan == 0) panic("bad image %p in drawinstallscreen", dimage->image); | |
| 1997/1101 | if(c == 0) return 0; if(d == 0){ | |
| 1999/0716/sys/src/9/port/devdraw.c:590,601 – 1999/1005/sys/src/9/port/devdraw.c:600,611 | ||
| 1997/1101 | i++; if(dimage->vers != 0) /* acquired by name; owned by someone else*/ goto Return; | |
| 1999/1005 | if(dimage->image == screenimage) /* don't free the display */ | |
| 1997/1101 | goto Return; ds = dimage->dscreen; if(ds){ l = dimage->image; | |
| 1999/1005 | if(l->data == screenimage->data) | |
| 1997/1101 | addflush(l->layer->screenr); if(l->layer->refreshfn == drawrefresh) /* else true owner will clean up */ free(l->layer->refreshptr); | |
| 1999/0716/sys/src/9/port/devdraw.c:790,814 – 1999/1005/sys/src/9/port/devdraw.c:800,840 | ||
| 1999/0128 | static int initscreenimage(void) | |
| 1997/1101 | { | |
| 1999/1005 | int width, depth; ulong chan; Rectangle r; | |
| 1997/1101 | ||
| 1999/0128 |
| |
| 1999/1005 | if(screenimage != nil) | |
| 1999/0128 | return 1; | |
| 1999/0202 | screendata.base = nil; | |
| 1999/0128 |
| |
| 1999/0202 | ||
| 1999/0128 |
| |
| 1999/1005 | screendata.bdata = attachscreen(&r, &chan, &depth, &width, &sdraw.softscreen); if(screendata.bdata == nil) | |
| 1999/0128 | return 0; | |
| 1999/0202 | screendata.ref = 1; | |
| 1999/0128 | ||
| 1999/1005 | screenimage = allocmemimaged(r, chan, &screendata); if(screenimage == nil){ /* RSC: BUG: detach screen */ return 0; } screenimage->width = width; screenimage->clipr = screenimage->r; | |
| 1999/0128 | return 1; } | |
| 1999/1005 | void deletescreenimage(void) { qlock(&sdraw); /* RSC: BUG: detach screen */ if(screenimage) freememimage(screenimage); screenimage = nil; qunlock(&sdraw); } | |
| 1999/0128 | Chan* drawattach(char *spec) { | |
| 1999/0716/sys/src/9/port/devdraw.c:824,830 – 1999/1005/sys/src/9/port/devdraw.c:850,856 | ||
| 1997/1101 | int drawwalk(Chan *c, char *name) { | |
| 1999/1005 | if(screendata.bdata == nil) | |
| 1997/1101 | error("no frame buffer"); if(strcmp(name, "..") == 0){ switch(QID(c->qid)){ | |
| 1999/0716/sys/src/9/port/devdraw.c:885,891 – 1999/1005/sys/src/9/port/devdraw.c:911,917 | ||
| 1997/1101 | error(Einuse); cl->busy = 1; flushrect = Rect(10000, 10000, -10000, -10000); | |
| 1999/1005 | drawinstall(cl, 0, screenimage, 0); | |
| 1997/1101 | incref(&cl->r); break; case Qcolormap: | |
| 1999/0716/sys/src/9/port/devdraw.c:963,968 – 1999/1005/sys/src/9/port/devdraw.c:989,995 | ||
| 1997/1101 | DImage *di; Memimage *i; | |
| 1998/0319 | ulong offset = off; | |
| 1999/1005 | char buf[16]; | |
| 1997/1101 | USED(offset); if(c->qid.path & CHDIR) | |
| 1999/0716/sys/src/9/port/devdraw.c:979,994 – 1999/1005/sys/src/9/port/devdraw.c:1006,1023 | ||
| 1997/1101 | error(Eshortread); if(cl->infoid < 0) error(Enodrawimage); | |
| 1999/1005 | if(cl->infoid == 0){ i = screenimage; if(i == nil) error(Enodrawimage); }else{ | |
| 1997/1101 | di = drawlookup(cl, cl->infoid, 1); if(di == nil) error(Enodrawimage); i = di->image; } | |
| 1999/1005 | n = sprint(a, "%11d %11d %11s %11d %11d %11d %11d %11d %11d %11d %11d %11d ", cl->clientid, cl->infoid, chantostr(buf, i->chan), (i->flags&Frepl)==Frepl, | |
| 1997/1101 | i->r.min.x, i->r.min.y, i->r.max.x, i->r.max.y, i->clipr.min.x, i->clipr.min.y, i->clipr.max.x, i->clipr.max.y); cl->infoid = -1; | |
| 1999/0716/sys/src/9/port/devdraw.c:1110,1124 – 1999/1005/sys/src/9/port/devdraw.c:1139,1153 | ||
| 1997/1101 | m -= i; *q = 0; if(parsefields(buf, fields, nelem(fields), " ") != 4) | |
| 1999/1005 | error("eb1"); //error(Ebadarg); | |
| 1997/1101 | i = strtoul(fields[0], 0, 0); red = strtoul(fields[1], 0, 0); green = strtoul(fields[2], 0, 0); blue = strtoul(fields[3], &q, 0); if(fields[3] == q) | |
| 1999/1005 | error("eb2"); //error(Ebadarg); | |
| 1997/1101 | if(red>255 || green>255 || blue>255 || i<0 || i>255) | |
| 1999/1005 | error("eb3"); //error(Ebadarg); | |
| 1997/1101 | red |= red<<8; red |= red<<16; green |= green<<8; | |
| 1999/0716/sys/src/9/port/devdraw.c:1167,1177 – 1999/1005/sys/src/9/port/devdraw.c:1196,1258 | ||
| 1997/1101 | return p; } | |
| 1999/1005 | static void printmesg(char *fmt, uchar *a, int itwouldmakemehappyifyouprintthis) { char buf[256]; char *p, *q; int s; if(1|| itwouldmakemehappyifyouprintthis==0){ SET(s,q,p); USED(fmt, a, buf, p, q, s); return; } q = buf; *q++ = *a++; for(p=fmt; *p; p++){ switch(*p){ case 'l': q += sprint(q, " %ld", (long)BGLONG(a)); a += 4; break; case 'L': q += sprint(q, " %.8lux", (ulong)BGLONG(a)); a += 4; break; case 'R': q += sprint(q, " [%d %d %d %d]", BGLONG(a), BGLONG(a+4), BGLONG(a+8), BGLONG(a+12)); a += 16; break; case 'P': q += sprint(q, " [%d %d]", BGLONG(a), BGLONG(a+4)); a += 8; break; case 'b': q += sprint(q, " %d", *a++); break; case 's': q += sprint(q, " %d", BGSHORT(a)); a += 2; break; case 'S': q += sprint(q, " %.4ux", BGSHORT(a)); a += 2; break; } } *q++ = '\n'; *q = 0; iprint("%.*s", (int)(q-buf), buf); } | |
| 1997/1101 | void drawmesg(Client *client, void *av, int n) { | |
| 1999/1005 | int c, repl, m, y, dstid, scrnid, ni, ci, j, nw, e0, e1, ox, oy, esize, doflush; uchar *u, *a, refresh; char *fmt; ulong value, chan; | |
| 1997/1101 | Rectangle r, clipr; Point p, q, *pp, sp; Memimage *i, *dst, *src, *mask; | |
| 1999/0716/sys/src/9/port/devdraw.c:1187,1216 – 1999/1005/sys/src/9/port/devdraw.c:1268,1308 | ||
| 1997/1101 | a = av; m = 0; | |
| 1999/1005 | fmt = nil; if(waserror()){ if(fmt) printmesg(fmt, a, 1); // iprint("error: %s\n", up->error); nexterror(); } | |
| 1997/1101 | while((n-=m) > 0){ | |
| 1999/1005 | USED(fmt); | |
| 1997/1101 | a += m; switch(*a){ default: error("bad draw command"); | |
| 1999/1005 | /* new allocate: 'b' id[4] screenid[4] refresh[1] chan[4] repl[1] R[4*4] clipR[4*4] rrggbbαα[4] */ case 'b': printmesg(fmt="LLbLbRRL", a, 0); m = 1+4+4+1+4+1+4*4+4*4+4; | |
| 1997/1101 | if(n < m) error(Eshortdraw); dstid = BGLONG(a+1); | |
| 1999/1005 | scrnid = BGSHORT(a+5); refresh = a[9]; chan = BGLONG(a+10); repl = a[14]; drawrectangle(&r, a+15); drawrectangle(&clipr, a+31); value = BGLONG(a+47); | |
| 1997/1101 | if(drawlookup(client, dstid, 0)) error(Eimageexists); | |
| 1999/1005 | if(repl || chan!=scrn->image->chan) | |
| 1997/1101 | error("image parameters incompatible with screen"); reffn = nil; | |
| 1999/1005 | switch(refresh){ | |
| 1997/1101 | case Refbackup: break; case Refnone: | |
| 1999/0716/sys/src/9/port/devdraw.c:1222,1232 – 1999/1005/sys/src/9/port/devdraw.c:1314,1324 | ||
| 1997/1101 | default: error("unknown refresh method"); } | |
| 1999/1005 | l = memlalloc(scrn, r, reffn, 0, value); | |
| 1997/1101 | if(l == 0) error(Edrawmem); addflush(l->layer->screenr); | |
| 1999/1005 | l->clipr = clipr; | |
| 1997/1101 | rectclip(&l->clipr, r); if(drawinstall(client, dstid, l, dscrn) == 0){ memldelete(l); | |
| 1999/0716/sys/src/9/port/devdraw.c:1248,1258 – 1999/1005/sys/src/9/port/devdraw.c:1340,1353 | ||
| 1997/1101 | } continue; } | |
| 1999/1005 | i = allocmemimage(r, chan); if(i == 0){ iprint("chan %lux\n", chan); | |
| 1997/1101 | error(Edrawmem); | |
| 1999/1005 | } if(repl) i->flags |= Frepl; i->clipr = clipr; | |
| 1997/1101 | if(!repl) rectclip(&i->clipr, r); if(drawinstall(client, dstid, i, 0) == 0){ | |
| 1999/0716/sys/src/9/port/devdraw.c:1259,1269 – 1999/1005/sys/src/9/port/devdraw.c:1354,1365 | ||
| 1997/1101 | freememimage(i); error(Edrawmem); } | |
| 1999/1005 | memfillcolor(i, value); | |
| 1997/1101 | continue; /* allocate screen: 'A' id[4] imageid[4] fillid[4] public[1] */ case 'A': | |
| 1999/1005 | printmesg(fmt="LLLb", a, 1); | |
| 1997/1101 | m = 1+4+4+4+1; if(n < m) error(Eshortdraw); | |
| 1999/0716/sys/src/9/port/devdraw.c:1282,1287 – 1999/1005/sys/src/9/port/devdraw.c:1378,1384 | ||
| 1997/1101 | /* set repl and clip: 'c' dstid[4] repl[1] clipR[4*4] */ case 'c': | |
| 1999/1005 | printmesg(fmt="LbR", a, 0); | |
| 1997/1101 | m = 1+4+1+4*4; if(n < m) error(Eshortdraw); | |
| 1999/0716/sys/src/9/port/devdraw.c:1291,1302 – 1999/1005/sys/src/9/port/devdraw.c:1388,1401 | ||
| 1997/1101 | if(ddst->name) error("can't change repl/clipr of shared image"); dst = ddst->image; | |
| 1999/1005 | if(a[5]) dst->flags |= Frepl; | |
| 1997/1101 | drawrectangle(&dst->clipr, a+6); continue; /* draw: 'd' dstid[4] srcid[4] maskid[4] R[4*4] P[2*4] P[2*4] */ case 'd': | |
| 1999/1005 | printmesg(fmt="LLLRPP", a, 0); | |
| 1997/1101 | m = 1+4+4+4+4*4+2*4+2*4; if(n < m) error(Eshortdraw); | |
| 1999/0716/sys/src/9/port/devdraw.c:1311,1319 – 1999/1005/sys/src/9/port/devdraw.c:1410,1428 | ||
| 1997/1101 | dstflush(dstid, dst, r); continue; | |
| 1999/1005 | /* toggle debugging: 'D' val[1] */ case 'D': printmesg(fmt="b", a, 0); m = 1+1; if(n < m) error(Eshortdraw); drawdebug = a[1]; continue; | |
| 1997/1101 | /* ellipse: 'e' dstid[4] srcid[4] center[2*4] a[4] b[4] thick[4] sp[2*4] alpha[4] phi[4]*/ case 'e': case 'E': | |
| 1999/1005 | printmesg(fmt="LLPlllPll", a, 0); | |
| 1997/1101 | m = 1+4+4+2*4+4+4+4+2*4+2*4; if(n < m) error(Eshortdraw); | |
| 1999/0716/sys/src/9/port/devdraw.c:1346,1351 – 1999/1005/sys/src/9/port/devdraw.c:1455,1461 | ||
| 1997/1101 | /* free: 'f' id[4] */ case 'f': | |
| 1999/1005 | printmesg(fmt="L", a, 1); | |
| 1997/1101 | m = 1+4; if(n < m) error(Eshortdraw); | |
| 1999/0716/sys/src/9/port/devdraw.c:1357,1362 – 1999/1005/sys/src/9/port/devdraw.c:1467,1473 | ||
| 1997/1101 | /* free screen: 'F' id[4] */ case 'F': | |
| 1999/1005 | printmesg(fmt="L", a, 1); | |
| 1997/1101 | m = 1+4; if(n < m) error(Eshortdraw); | |
| 1999/0716/sys/src/9/port/devdraw.c:1366,1371 – 1999/1005/sys/src/9/port/devdraw.c:1477,1483 | ||
| 1997/1101 | /* initialize font: 'i' fontid[4] nchars[4] ascent[1] */ case 'i': | |
| 1999/1005 | printmesg(fmt="Llb", a, 1); | |
| 1997/1101 | m = 1+4+4+1; if(n < m) error(Eshortdraw); | |
| 1999/0716/sys/src/9/port/devdraw.c:1389,1394 – 1999/1005/sys/src/9/port/devdraw.c:1501,1507 | ||
| 1997/1101 | /* load character: 'l' fontid[4] srcid[4] index[2] R[4*4] P[2*4] left[1] width[1] */ case 'l': | |
| 1999/1005 | printmesg(fmt="LLSRPbb", a, 0); | |
| 1997/1101 | m = 1+4+4+2+4*4+2*4+1+1; if(n < m) error(Eshortdraw); | |
| 1999/0716/sys/src/9/port/devdraw.c:1403,1409 – 1999/1005/sys/src/9/port/devdraw.c:1516,1522 | ||
| 1997/1101 | error(Eindex); drawrectangle(&r, a+11); drawpoint(&p, a+27); | |
| 1999/1005 | memdraw(font->image, r, src, p, memopaque, p); | |
| 1997/1101 | fc = &font->fchar[ci]; fc->minx = r.min.x; fc->maxx = r.max.x; | |
| 1999/0716/sys/src/9/port/devdraw.c:1415,1420 – 1999/1005/sys/src/9/port/devdraw.c:1528,1534 | ||
| 1997/1101 | /* draw line: 'L' dstid[4] p0[2*4] p1[2*4] end0[4] end1[4] radius[4] srcid[4] sp[2*4] */ case 'L': | |
| 1999/1005 | printmesg(fmt="LPPlllLP", a, 0); | |
| 1997/1101 | m = 1+4+2*4+2*4+4+4+4+4+2*4; if(n < m) error(Eshortdraw); | |
| 1999/0716/sys/src/9/port/devdraw.c:1438,1445 – 1999/1005/sys/src/9/port/devdraw.c:1552,1568 | ||
| 1997/1101 | } continue; | |
| 1999/1005 | /* create image mask: 'm' newid[4] id[4] */ case 'm': printmesg("LL", a, 0); m = 4+4; if(n < m) error(Eshortdraw); break; | |
| 1997/1101 | /* attach to a named image: 'n' dstid[4] j[1] name[j] */ case 'n': | |
| 1999/1005 | printmesg(fmt="Lz", a, 0); | |
| 1997/1101 | m = 1+4+1; if(n < m) error(Eshortdraw); | |
| 1999/0716/sys/src/9/port/devdraw.c:1469,1474 – 1999/1005/sys/src/9/port/devdraw.c:1592,1598 | ||
| 1997/1101 | /* name an image: 'N' dstid[4] in[1] j[1] name[j] */ case 'N': | |
| 1999/1005 | printmesg(fmt="Lbz", a, 0); | |
| 1997/1101 | m = 1+4+1+1; if(n < m) error(Eshortdraw); | |
| 1999/0716/sys/src/9/port/devdraw.c:1498,1503 – 1999/1005/sys/src/9/port/devdraw.c:1622,1628 | ||
| 1997/1101 | /* position window: 'o' id[4] r.min [2*4] screenr.min [2*4] */ case 'o': | |
| 1999/1005 | printmesg(fmt="LPP", a, 0); | |
| 1997/1101 | m = 1+4+2*4+2*4; if(n < m) error(Eshortdraw); | |
| 1999/0716/sys/src/9/port/devdraw.c:1523,1528 – 1999/1005/sys/src/9/port/devdraw.c:1648,1654 | ||
| 1997/1101 | /* polygon: 'p' dstid[4] n[2] end0[4] end1[4] radius[4] srcid[4] sp[2*4] p0[2*4] dp[2*2*n] */ case 'p': case 'P': | |
| 1999/1005 | printmesg(fmt="LslllLPP", a, 0); | |
| 1997/1101 | m = 1+4+2+4+4+4+4+2*4; if(n < m) error(Eshortdraw); | |
| 1999/0716/sys/src/9/port/devdraw.c:1547,1553 – 1999/1005/sys/src/9/port/devdraw.c:1673,1679 | ||
| 1997/1101 | if(pp == nil) error(Enomem); doflush = 0; | |
| 1999/1005 | if(dstid==0 || (dst->layer && dst->layer->screen->image->data == screenimage->data)) | |
| 1997/1101 | doflush = 1; /* simplify test in loop */ ox = oy = 0; u = a+m; | |
| 1999/0716/sys/src/9/port/devdraw.c:1588,1593 – 1999/1005/sys/src/9/port/devdraw.c:1714,1720 | ||
| 1997/1101 | /* read: 'r' id[4] R[4*4] */ case 'r': | |
| 1999/1005 | printmesg(fmt="LR", a, 0); | |
| 1997/1101 | m = 1+4+4*4; if(n < m) error(Eshortdraw); | |
| 1999/0716/sys/src/9/port/devdraw.c:1597,1603 – 1999/1005/sys/src/9/port/devdraw.c:1724,1730 | ||
| 1997/1101 | drawrectangle(&r, a+5); if(!rectinrect(r, i->r)) error(Ereadoutside); | |
| 1999/1005 | c = bytesperline(r, i->depth); | |
| 1997/1101 | c *= Dy(r); | |
| 1997/1206 | free(client->readdata); | |
| 1997/1101 | client->readdata = mallocz(c, 0); | |
| 1999/0716/sys/src/9/port/devdraw.c:1615,1620 – 1999/1005/sys/src/9/port/devdraw.c:1742,1748 | ||
| 1997/1101 | /* stringbg: 'x' dstid[4] srcid[4] fontid[4] P[2*4] clipr[4*4] sp[2*4] ni[2] bgid[4] bgpt[2*4] ni*(index[2]) */ case 's': case 'x': | |
| 1999/1005 | printmesg(fmt="LLLPRPs", a, 0); | |
| 1997/1101 | m = 1+4+4+4+2*4+4*4+2*4+2; if(*a == 'x') m += 4+2*4; | |
| 1999/0716/sys/src/9/port/devdraw.c:1657,1663 – 1999/1005/sys/src/9/port/devdraw.c:1785,1791 | ||
| 1997/1101 | r.max.x += font->fchar[ci].width; u += 2; } | |
| 1999/1005 | memdraw(dst, r, l, q, memopaque, ZP); | |
| 1997/1101 | u -= 2*ni; } q = p; | |
| 1999/0716/sys/src/9/port/devdraw.c:1677,1682 – 1999/1005/sys/src/9/port/devdraw.c:1805,1811 | ||
| 1997/1101 | /* use public screen: 'S' id[4] ldepth[4] */ case 'S': | |
| 1999/1005 | printmesg(fmt="Ll", a, 0); | |
| 1997/1101 | m = 1+4+4; if(n < m) error(Eshortdraw); | |
| 1999/0716/sys/src/9/port/devdraw.c:1686,1693 – 1999/1005/sys/src/9/port/devdraw.c:1815,1822 | ||
| 1997/1101 | dscrn = drawlookupdscreen(dstid); if(dscrn==0 || (dscrn->public==0 && dscrn->owner!=client)) error(Enodrawscreen); | |
| 1999/1005 | if(dscrn->screen->image->depth != (1<<BGLONG(a+5))) error("inconsistent depth"); | |
| 1997/1101 | if(drawinstallscreen(client, dscrn, 0, 0, 0, 0) == 0) error(Edrawmem); continue; | |
| 1999/0716/sys/src/9/port/devdraw.c:1694,1699 – 1999/1005/sys/src/9/port/devdraw.c:1823,1829 | ||
| 1997/1101 | /* top or bottom windows: 't' top[1] nw[2] n*id[4] */ case 't': | |
| 1999/1005 | printmesg(fmt="bsL", a, 0); | |
| 1997/1101 | m = 1+1+2; if(n < m) error(Eshortdraw); | |
| 1999/0716/sys/src/9/port/devdraw.c:1723,1729 – 1999/1005/sys/src/9/port/devdraw.c:1853,1859 | ||
| 1997/1101 | memltofrontn(lp, nw); else memltorearn(lp, nw); | |
| 1999/1005 | if(lp[0]->layer->screen->image->data == screenimage->data) | |
| 1997/1101 | for(j=0; j<nw; j++) addflush(lp[j]->layer->screenr); ll = drawlookup(client, BGLONG(a+1+1+2), 1); | |
| 1999/0716/sys/src/9/port/devdraw.c:1735,1748 – 1999/1005/sys/src/9/port/devdraw.c:1865,1883 | ||
| 1997/1101 | /* visible: 'v' */ case 'v': | |
| 1999/1005 | printmesg(fmt="", a, 0); | |
| 1997/1101 | m = 1; drawflush(); continue; | |
| 1999/1005 | /* old write: 'w' id[4] R[4*4] data[x*1] */ /* old write from compressed data: 'W' id[4] R[4*4] data[x*1] */ /* new write: 'y' id[4] R[4*4] data[x*1] */ /* new write from compressed data: 'Y' id[4] R[4*4] data[x*1] */ case 'y': case 'Y': printmesg(fmt="LR", a, 0); // iprint("load %c\n", *a); | |
| 1997/1101 | m = 1+4+4*4; if(n < m) error(Eshortdraw); | |
| 1999/0716/sys/src/9/port/devdraw.c:1751,1757 – 1999/1005/sys/src/9/port/devdraw.c:1886,1892 | ||
| 1997/1101 | drawrectangle(&r, a+5); if(!rectinrect(r, dst->r)) error(Ewriteoutside); | |
| 1999/1005 | y = memload(dst, r, a+m, n-m, *a=='Y'); | |
| 1997/1101 | if(y < 0) error("bad writeimage call"); dstflush(dstid, dst, r); | |
| 1999/0716/sys/src/9/port/devdraw.c:1759,1764 – 1999/1005/sys/src/9/port/devdraw.c:1894,1900 | ||
| 1997/1101 | continue; } } | |
| 1999/1005 | poperror(); | |
| 1997/1101 | } Dev drawdevtab = { | |
| 1999/0716/sys/src/9/port/devdraw.c:1829,1835 – 1999/1005/sys/src/9/port/devdraw.c:1965,1972 | ||
| 1999/0128 | return; } | |
| 1997/1101 | p = sdraw.savemap; | |
| 1999/1005 | nc = screenimage->depth > 8 ? 256 : 1<<screenimage->depth; | |
| 1997/1101 | if(blank == 0) /* turn screen on */ for(i=0; i<nc; i++, p+=3) setcolor(i, p[0], p[1], p[2]); | |