home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Simtel MSDOS 1992 June
/
SIMTEL_0692.cdr
/
msdos
/
tex
/
dvivga9.arc
/
FILLRECT.H
< prev
next >
Wrap
Text File
|
1988-05-30
|
2KB
|
53 lines
/* -*-C-*- fillrect.h */
/*-->fillrect*/
/**********************************************************************/
/****************************** fillrect ******************************/
/**********************************************************************/
void
fillrect(x,y,width,height)
COORDINATE x,y,width,height; /* lower left corner, size */
/***********************************************************************
With the page origin (0,0) at the lower-left corner of the bitmap, draw
a filled rectangle at (x,y).
***********************************************************************/
{
register UNSIGN32 *p;
register COORDINATE i,j,xloffset,xroffset,xlpart,xrpart;
if ( ((x+width) <= 0) || (XSIZE <= x) || ((y+height) <= 0) ||
(YSIZE <= y) )
return; /* Trivial reject -- rectangle outside page */
else
{
xlpart = x/HOST_WORD_SIZE;
xrpart = (x + width)/HOST_WORD_SIZE;
xloffset = x % HOST_WORD_SIZE;
xroffset = (x + width) % HOST_WORD_SIZE;
for (j = 0; j < height; ++j) /* loop over raster lines */
{
if (IN(0,y+j,YBIT-1))
{
p = BITMAP(y+j,xlpart);
if (IN(0,xlpart,XBIT-1))
if (xlpart < xrpart) /* set bits in left partial word */
*p |= rightones[xloffset];
else /* set bits in middle of left partial word */
*p |= (rightones[xloffset] & ~rightones[xroffset]);
++p;
for (i = xlpart+1; i < xrpart; (++p,++i))
if (IN(0,i,XBIT-1))
*p = (UNSIGN32)ONES; /* set complete words */
/* finally, set bits in right partial word */
if ((xlpart < xrpart) && IN(0,xrpart,XBIT-1))
*BITMAP(y+j,xrpart) |= ~rightones[xroffset];
}
}
}
}