{ From: SEAN PALMER Subj: Bresenham's Line You need a plot(x,y) procedure and a global color variable to use these as posted. } {bresenham's line} procedure line(x,y,x2,y2:integer);var d,dx,dy,ai,bi,xi,yi:integer;begin if(xdy then begin ai:=(dy-dx)*2;bi:=dy*2; d:=bi-dx; repeat if(d>=0)then begin inc(y,yi);inc(d,ai);end else inc(d,bi); inc(x,xi);plot(x,y); until(x=x2); end else begin ai:=(dx-dy)*2;bi:=dx*2; d:=bi-dy; repeat if(d>=0)then begin inc(x,xi);inc(d,ai);end else inc(d,bi); inc(y,yi);plot(x,y); until(y=y2); end; end; {filled ellipse} procedure disk(xc,yc,a,b:integer); var x,y:integer; aa,aa2,bb,bb2,d,dx,dy:longint; begin x:=0;y:=b; aa:=longint(a)*a; aa2:=2*aa; bb:=longint(b)*b; bb2:=2*bb; d:=bb-aa*b+aa div 4; dx:=0;dy:=aa2*b; vLin(xc,yc-y,yc+y); while(dx0)then begin dec(y); dec(dy,aa2); dec(d,dy); end; inc(x); inc(dx,bb2); inc(d,bb+dx); vLin(xc-x,yc-y,yc+y);vLin(xc+x,yc-y,yc+y); end; inc(d,(3*(aa-bb)div 2-(dx+dy))div 2); while(y>=0)do begin if(d<0)then begin inc(x); inc(dx,bb2); inc(d,bb+dx); vLin(xc-x,yc-y,yc+y);vLin(xc+x,yc-y,yc+y); end; dec(y); dec(dy,aa2); inc(d,aa-dy); end; end;