home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
QBasic & Borland Pascal & C
/
Delphi5.iso
/
C
/
Samples
/
C-ASM_VI.ARJ
/
PROGC.ZIP
/
PROGC088.C
< prev
next >
Wrap
Text File
|
1988-04-10
|
3KB
|
66 lines
/************************************************************************/
/* Draw a line with a pattern using the 'slow' algorithm */
/************************************************************************/
slow_pattern_line(x0, y0, x1, y1, color,pattern)
int x0, y0, x1, y1, color, pattern;
{
int x, y;
static int mask[16] = {
0x8000,0x4000,0x2000,0x1000,
0x0800,0x0400,0x0200,0x0100,
0x0080,0x0040,0x0020,0x0010,
0x0008,0x0004,0x0002,0x0001};
/*--- Draw degenerate line (pixel) */
if (x0 == x1 && y0 == y1) /* Draw a single pixel */
{
if (mask[x0 & 15] & pattern)
pixel_write(x0, y0, color);
}
/*--- Draw lines with dx > dy */
else if (abs(x1 - x0) >= abs(y1 - y0))
{ /* Swap end points */
if (x1 < x0)
{
x = x1;
y = y1;
x1 = x0;
y1 = y0;
x0 = x;
y0 = y;
}
for (x = x0; x <= x1; x++) /* Loop over x coord */
{ /* Compute y using x */
y = y0 + ((x - x0)*(long)(y1 - y0))/(x1 - x0);
if (mask[x & 15] & pattern)
pixel_write(x,y,color); /* Draw next point */
}
}
/*--- Draw lines with dy > dx */
else
{
if (y1 < y0) /* Swap end points */
{
x = x1;
y = y1;
x1 = x0;
y1 = y0;
x0 = x;
y0 = y;
}
for (y = y0; y <= y1; y++) /* Loop over y coord */
{ /* Compute x using y */
x = x0 + ((y - y0)*(long)(x1 - x0))/(y1 - y0);
if (mask[y & 15] & pattern)
pixel_write(x,y,color); /* Draw next point */
}
}
}