[Back to GRAPHICS SWAG index]  [Back to Main SWAG index]  [Original]

{
You asked for =F=A=S=T This line procedure is quite fast considering it
is done in Pascal and not assembler.
The Rectangle works well also.
Sorry my Circle routine is rather Slow and Does not make a perfect (or
fairly perfect) circle so I will not enclose it. <G>

Where is a word segment to a screen address.
You can define the VGAScreen's address like this.
Const  VGASCREEN = $a000;
}

Procedure line(a,b,c,d,col:integer;Where:Word);
  { This draws a line from a,b to c,d of color col. }
Function sgn(a:real):integer;
   BEGIN
        if a>0 then sgn:=+1;
        if a<0 then sgn:=-1;
        if a=0 then sgn:=0;
   END;
var u,s,v,d1x,d1y,d2x,d2y,m,n:real;
    i:integer;
BEGIN
     u:= c - a;
     v:= d - b;
     d1x:= SGN(u);
     d1y:= SGN(v);
     d2x:= SGN(u);
     d2y:= 0;
     m:= ABS(u);
     n := ABS(v);
     IF NOT (M>N) then
     BEGIN
          d2x := 0 ;
          d2y := SGN(v);
          m := ABS(v);
          n := ABS(u);
     END;
     s := INT(m / 2);
     FOR i := 0 TO round(m) DO
     BEGIN
          putpixel(a,b,col,where);
          s := s + n;
          IF not (s<m) THEN
          BEGIN
               s := s - m;
               a:= a +round(d1x);
               b := b + round(d1y);
          END
          ELSE
          BEGIN
               a := a + round(d2x);
               b := b + round(d2y);
          END;
     END;
END;

Procedure Rect(x1,y1,x2,y2,Color : integer;Where:word);
begin
     Line(x1,y1,x2,y1,color,Where);
     Line(x1,y1,x1,y2,color,where);
     Line(x2,y1,x2,y2,color,where);
     Line(x1,y2,x2,y2,color,where);
 
end;

[Back to GRAPHICS SWAG index]  [Back to Main SWAG index]  [Original]