|
|
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.