|
|
1.1 root 1: ulong floyd[FSIZE+1][FSIZE+1];
2: ulong contab[RES+1];
3: Bitmap *icon;
4:
5: drawface(lo, hi, facep)
6: Point facep;
7: {
8:
9: ulong *p, *f;
10: char *sq;
11: int v, h, s, e, t, i;
12: if (!icon)
13: icon=balloc(Rect(0, 0, FSIZE, FSIZE), 1);
14: if (!icon)
15: return;
16: if (hi<lo){e=hi; hi=lo; lo=e;}
17: if (lo<0) lo=0; else if (RES<lo) lo=RES;
18: if (hi<0) hi=0; else if (RES<hi) hi=RES;
19: t = hi-lo;
20: p = contab;
21: for (v = 0;v !=lo; v++)
22: *p++ = 0;
23: for (;v !=hi; v++)
24: *p++ = (v-lo)*RES/t;
25: for (;v <= RES;v++)
26: *p++ = RES;
27: sq=squash[0];
28: for (v=0;v!=FSIZE;v++) for(h=0,f=floyd[v];h!=FSIZE;h++)
29: *f++ = contab[*sq++&0xFF];
30: for (v = 0;v != FSIZE; v++)
31: { f = floyd[v];
32: for (h=0,p=addr(icon, Pt(0, v));h<FSIZE;h+=16,p++)
33: { *p=0;
34: for(s=0;s!=16 && s+h!=FSIZE;s++,f++)
35: { e=f[0];
36: e+=dithmat[s&7][v&7];
37: i=e/72;
38: if (i<0)
39: i=0;
40: else if (i>3)
41: i=3;
42: e-=(i*RES)/3;
43: *p|=(3-i)<<(30-2*s);
44: #ifndef THRESH
45: t=3*e/8;
46: f[FSIZE+1]+=t;
47: f[FSIZE+2]+=e-2*t;
48: f[1]+=t;
49: #endif
50: }
51: }
52: }
53: bitblt(&display, facep, icon, icon->rect, S);
54: }
55:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.