/*
*This function draws a single character in the color specified.#
*/
void fontDrawMono(const CharInfo *chInfoPtr,
int x, int y,
unsigned char color)
{
unsigned int i,j;
unsigned char eightBits;
/*
* We use index as well as the loop counters because the number
* of bytes per line varies
*/
int index = 0;
for (i = 0; i
<
chInfoPtr->height; i++)
{
for (j = 0; j
<
chInfoPtr->width; j++)
{
if (j%8 == 0)
{
/*
* We are starting a new byte so get the value into eightBits
*/
eightBits = chInfoPtr->bits[index];
index++;
}
/*
* We plot the pixel if the bit is set. Note that we do not draw
* the unset bits in the background color. We assume that the
* background was cleared if necessary.
*/
if (eightBits & 0x80)
{
/*
* The bit is set so plot the pixel
*/
drawDot(x + j, y + i, color);
}
/*
* Move on to the next pixel in the character.
*/
eightBits
<
<
= 1;
}
}
}
/*
* x,y position passed in is the start of the baseline.
* x is increased as the string is rendered from left to
* right, but y stays constant.
*/
void fontRenderString(const char *string,
const CharInfo *font,
int x, int y,
unsigned char color)
{
int yForThisChar;
const CharInfo *chInfoPtr;
while (*string)
{
chInfoPtr = &font[*string];
x = x + chInfoPtr->offsetX ;
yForThisChar = y - chInfoPtr->offsetY - chInfoPtr->height;
/*
* Draw the character as a monochrome bitmap
*/
fontDrawMono(chInfoPtr, x, yForThisChar, color);
x += chInfoPtr->width;
string++;
}
}