|
|
1.1 root 1: #ifndef MUX
2: #define Jcursinhibit() cursinhibit()
3: #define Jcursallow() cursallow()
4: #define lrectf(l, r, f) rectf(l, r, f)
5: #endif
6:
7: #include <jerq.h>
8: #define DB ((Word *)0x700000)
9: #define ONSCREEN(b) (b->base>=DB && b->base<DB+XMAX/WORDSIZE*YMAX)
10: /* Fill a disc of radius r centered at x1,y1
11: * The boundary is a sequence of vertically, horizontally,
12: * or diagonally adjacent points that minimize
13: * abs(x^2+y^2-r^2).
14: *
15: * The circle is guaranteed to be symmetric about
16: * the horizontal, vertical, and diagonal axes
17: */
18: disc(b, p, r, f)
19: Bitmap *b;
20: Point p;
21: {
22: register x1=p.x, y1=p.y;
23: register eps = 0; /* x^2 + y^2 - r^2 */
24: int dxsq = 1; /* (x+dx)^2-x^2*/
25: int dysq = 1 - 2*r;
26: int exy;
27: short inhibited;
28: register x0 = x1;
29: register y0 = y1 - r;
30: x1++; /* to offset jerq's half-open lines*/
31: y1 += r;
32: inhibited=0;
33: if(f!=F_XOR && ONSCREEN(b)){
34: Jcursinhibit();
35: inhibited=1;
36: }
37: while(y1 > y0) {
38: exy = eps + dxsq + dysq;
39: if(-exy <= eps+dxsq) {
40: lrectf(b, Rect(x0, y0, x1, y0+1), f);
41: lrectf(b, Rect(x0, y1, x1, y1+1), f);
42: y1--;
43: y0++;
44: eps += dysq;
45: dysq += 2;
46: }
47: if(exy <= -eps) {
48: x1++;
49: x0--;
50: eps += dxsq;
51: dxsq += 2;
52: }
53: }
54: lrectf(b, Rect(x0, y0, x1, y0+1), f);
55: if(inhibited)
56: Jcursallow();
57: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.