int plot(), bplot(), gplot(), rplot(), vplot(); drw(x1,y1,x2,y2) int x1,y1,x2,y2; { comline(x1,y1,x2,y2,plot); } bdrw(x1,y1,x2,y2) int x1,y1,x2,y2; { comline(x1,y1,x2,y2,bplot); } gdrw(x1,y1,x2,y2) int x1,y1,x2,y2; { comline(x1,y1,x2,y2,gplot); } rdrw(x1,y1,x2,y2) int x1,y1,x2,y2; { comline(x1,y1,x2,y2,rplot); } vdrw(x1,y1,x2,y2) int x1,y1,x2,y2; { comline(x1,y1,x2,y2,vplot); } int __oldx=0, __oldy=0; lineto(x,y) int x,y; { drw(__oldx,__oldy,x,y); } blineto(x,y) int x,y; { bdrw(__oldx,__oldy,x,y); } glineto(x,y) int x,y; { gdrw(__oldx,__oldy,x,y); } vlineto(x,y) int x,y; { vdrw(__oldx,__oldy,x,y); } rlineto(x,y) int x,y; { rdrw(__oldx,__oldy,x,y); } static int comline(x1,y1,x2,y2,func) int (*func)(); { register int dx,dy,ix,iy; int e,ei,ed,i; __oldx=x2; __oldy=y2; dx=x2-x1; dy=y2-y1; ix=1; if(dx<0) { ix=-1; dx=-dx; } iy=1; if(dy<0) { iy=-1; dy=-dy; } if(dy>dx) goto ylin; ei=2*dy; ed=ei-2*dx; e=-dx+ei; for(i=1;i<=dx;++i){ (*func)(x1,y1); x1=x1+ix; if(e<0) e=e+ei; else{ y1=y1+iy;e=e+ed; } } goto fin; ylin: ei=2*dx; ed=ei-2*dy; e=-dy+ei; for(i=1;i<=dy;++i) { (*func)(x1,y1); y1=y1+iy; if(e<0) e=e+ei; else{ x1=x1+ix;e=e+ed;} } fin: ; }