rem: y = -((FRAME_DESC)FontPtr->CharDesc[ch]).HotSpot.y;
add: y = -(FontPtr->CharDesc[ch]).HotSpot.y;
context: TextRect (PTEXT lpText, register PRECT pRect, PBYTE pdelta){	COUNT num_chars;	FONTPTR FontPtr;	if ((FontPtr = _CurFontPtr) != 0 && (num_chars = lpText->CharCount))	{		COORD top_y, bot_y;		SIZE width;		UNICODE next_ch, *pStr;		if (pdelta == 0)		{			pdelta = char_delta_array;			if (num_chars > MAX_DELTAS)				num_chars = MAX_DELTAS;		}		top_y = bot_y = 0;		width = 0;		pStr = lpText->pStr;		if ((next_ch = *pStr++) == '\0')			num_chars = 0;		next_ch -= FIRST_CHAR;		while (num_chars--)		{			UNICODE ch;			SIZE last_width;				last_width = width;			ch = next_ch;			if ((next_ch = *pStr++) == '\0')				num_chars = 0;			next_ch -= FIRST_CHAR;			if (ch < MAX_CHARS && GetFrameWidth (&FontPtr->CharDesc[ch]))			{				register COORD y;				y = -((FRAME_DESC)FontPtr->CharDesc[ch]).HotSpot.y;				if (y < top_y)					top_y = y;				y += GetFrameHeight (&FontPtr->CharDesc[ch]);				if (y > bot_y)					bot_y = y;				width += GetFrameWidth (&FontPtr->CharDesc[ch]);#if 0				if (num_chars && next_ch < MAX_CHARS						&& !(FontPtr->KernTab[ch]						& (FontPtr->KernTab[next_ch] >> 2)))					width -= FontPtr->KernAmount;#endif			}			*pdelta++ = (BYTE)(width - last_width);		}		lpText->CharCount = pStr - lpText->pStr - 1;		if (width > 0 && (bot_y -= top_y) > 0)		{			/* subtract off default character spacing */			--pdelta[-1];			--width;			if (lpText->align == ALIGN_LEFT)				pRect->corner.x = 0;			else if (lpText->align == ALIGN_CENTER)				pRect->corner.x = -(width >> 1);			else				pRect->corner.x = -width;			pRect->corner.y = top_y;			pRect->extent.width = width;			pRect->extent.height = bot_y;			pRect->corner.x += lpText->baseline.x;			pRect->corner.y += lpText->baseline.y;			return (TRUE);		}	}	pRect->corner = lpText->baseline;	pRect->extent.width = 0;	pRect->extent.height = 0;	return (FALSE);}