[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]