{**********************************************************************}
{ Draw a line with a pattern using the 'slow' algorithm }
{**********************************************************************}
procedure slow_pattern_line(x0, y0, x1, y1, color,pattern:word);
const
mask : array[0..15] of word = (
$8000,$4000,$2000,$1000,
$0800,$0400,$0200,$0100,
$0080,$0040,$0020,$0010,
$0008,$0004,$0002,$0001);
var
i,x,y : integer;
l : longint;
begin
{--- Draw degenerate line (pixel) }
i := x0 - x1;
if i = 0 then i := y0 - y1;
if i = 0 then
begin { Draw a single pixel }
if (mask[x0 and $0F] and pattern)>0 then pixel_write(x0,y0,color);
end
{--- Draw lines with dx > dy }
else if abs(x1 - x0) >= abs(y1 - y0) then
begin
if x1 < x0 then begin { Swap end points }
x := x1;
y := y1;
x1 := x0;
y1 := y0;
x0 := x;
y0 := y;
end;
for x := x0 to x1 do begin { Loop over x coord }
{ Compute y using x }
{ y := y0 + ((x - x0)*longint(y1 - y0)) div (x1 - x0);}
y := x - x0;
l := y1;
l := l - y0;
l := l * y;
l := l div (x1 - x0);
y := y0 + l;
if (mask[x and $0f] and pattern) > 0 then
pixel_write(x,y,color); { Draw next point}
end;
end
{--- Draw lines with dy > dx }
else begin
if y1 < y0 then begin { Swap end points }
x := x1;
y := y1;
x1 := x0;
y1 := y0;
x0 := x;
y0 := y;
end;
for y := y0 to y1 do
begin { Loop over y coord }
{ Compute x using y }
{x := x0 + ((y - y0)*longint(x1 - x0)) div (y1 - y0);}
x := y - y0;
l := x1;
l := l - x0;
l := l * x;
l := l div (y1 - y0);
x := x0 + l;
if (mask[y and $0f] and pattern) > 0 then
pixel_write(x,y,color); { Draw next point }
end;
end;
end;