www.pudn.com > WinGOS.rar > CharSet.cpp


#include "gos.h" 
#include "charset.h" 
 
static const BYTE m_fntEngDat[][16]={ 
	{0x00,0x00,0x00,0x18,0x3C,0x3C,0x3C,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00},//! 21 
	{0x00,0x00,0x00,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//" 22 
	{0x00,0x00,0x00,0x6C,0x6C,0xFE,0x6C,0x6C,0x6C,0xFE,0x6C,0x6C,0x00,0x00,0x00,0x00},//# 23 
	{0x00,0x18,0x18,0x3C,0x66,0x06,0x0C,0x18,0x30,0x60,0x66,0x3C,0x18,0x18,0x00,0x00},//$ 24 
	{0x00,0x00,0x0E,0x1B,0x5B,0x6E,0x30,0x18,0x0C,0x76,0xDA,0xD8,0x70,0x00,0x00,0x00},//% 25 
	{0x00,0x00,0x00,0x1C,0x36,0x36,0x1C,0x06,0xF6,0x66,0x66,0xDC,0x00,0x00,0x00,0x00},//& 26 
	{0x00,0x00,0x00,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//' 27 
	{0x00,0x00,0x00,0x30,0x18,0x18,0x0C,0x0C,0x0C,0x0C,0x0C,0x18,0x18,0x30,0x00,0x00},//( 28 
	{0x00,0x00,0x00,0x0C,0x18,0x18,0x30,0x30,0x30,0x30,0x30,0x18,0x18,0x0C,0x00,0x00},//) 29 
	{0x00,0x00,0x00,0x00,0x00,0x6C,0x38,0xFE,0x38,0x6C,0x00,0x00,0x00,0x00,0x00,0x00},//* 2A 
	{0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x7E,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00},//+ 2B 
	{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x38,0x30,0x18,0x00,0x00},//, 2C 
	{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//- 2D 
	{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x38,0x00,0x00,0x00,0x00},//. 2E 
	{0x00,0x00,0x00,0x60,0x60,0x30,0x30,0x18,0x18,0x0C,0x0C,0x06,0x06,0x00,0x00,0x00},/// 2F 
	{0x00,0x00,0x00,0x78,0xCC,0xEC,0xEC,0xCC,0xDC,0xDC,0xCC,0x78,0x00,0x00,0x00,0x00},//0 30 
	{0x00,0x00,0x00,0x30,0x38,0x3E,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x00},//1 31 
	{0x00,0x00,0x00,0x3C,0x66,0x66,0x60,0x30,0x18,0x0C,0x06,0x7E,0x00,0x00,0x00,0x00},//2 32 
	{0x00,0x00,0x00,0x3C,0x66,0x66,0x60,0x38,0x60,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},//3 33 
	{0x00,0x00,0x00,0x0C,0x0C,0x6C,0x6C,0x6C,0x66,0xFE,0x60,0x60,0x00,0x00,0x00,0x00},//4 34 
	{0x00,0x00,0x00,0x7E,0x06,0x06,0x06,0x3E,0x60,0x60,0x30,0x1E,0x00,0x00,0x00,0x00},//5 35 
	{0x00,0x00,0x00,0x38,0x18,0x0C,0x3E,0x66,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},//6 36 
	{0x00,0x00,0x00,0x7E,0x60,0x30,0x30,0x18,0x18,0x0C,0x0C,0x0C,0x00,0x00,0x00,0x00},//7 37 
	{0x00,0x00,0x00,0x3C,0x66,0x66,0x6E,0x3C,0x76,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},//8 38 
	{0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x7C,0x30,0x18,0x1C,0x00,0x00,0x00,0x00},//9 39 
	{0x00,0x00,0x00,0x00,0x00,0x38,0x38,0x00,0x00,0x00,0x38,0x38,0x00,0x00,0x00,0x00},//: 3A 
	{0x00,0x00,0x00,0x00,0x00,0x38,0x38,0x00,0x00,0x00,0x38,0x38,0x30,0x18,0x00,0x00},//; 3B 
	{0x00,0x00,0x00,0x60,0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x60,0x00,0x00,0x00,0x00},//< 3C 
	{0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//= 3D 
	{0x00,0x00,0x00,0x06,0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x06,0x00,0x00,0x00,0x00},//> 3E 
	{0x00,0x00,0x00,0x3C,0x66,0x66,0x30,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00},//? 3F 
	{0x00,0x00,0x00,0x7E,0xC3,0xC3,0xF3,0xDB,0xDB,0xF3,0x03,0xFE,0x00,0x00,0x00,0x00},//@ 40 
	{0x00,0x00,0x00,0x18,0x3C,0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x00,0x00,0x00,0x00},//A 41 
	{0x00,0x00,0x00,0x3E,0x66,0x66,0x66,0x3E,0x66,0x66,0x66,0x3E,0x00,0x00,0x00,0x00},//B 42 
	{0x00,0x00,0x00,0x3C,0x66,0x66,0x06,0x06,0x06,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},//C 43 
	{0x00,0x00,0x00,0x1E,0x36,0x66,0x66,0x66,0x66,0x66,0x36,0x1E,0x00,0x00,0x00,0x00},//D 44 
	{0x00,0x00,0x00,0x7E,0x06,0x06,0x06,0x3E,0x06,0x06,0x06,0x7E,0x00,0x00,0x00,0x00},//E 45 
	{0x00,0x00,0x00,0x7E,0x06,0x06,0x06,0x3E,0x06,0x06,0x06,0x06,0x00,0x00,0x00,0x00},//F 46 
	{0x00,0x00,0x00,0x3C,0x66,0x66,0x06,0x06,0x76,0x66,0x66,0x7C,0x00,0x00,0x00,0x00},//G 47 
	{0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00},//H 48 
	{0x00,0x00,0x00,0x3C,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00},//I 49 
	{0x00,0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},//J 4A 
	{0x00,0x00,0x00,0x66,0x66,0x36,0x36,0x1E,0x36,0x36,0x66,0x66,0x00,0x00,0x00,0x00},//K 4B 
	{0x00,0x00,0x00,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x7E,0x00,0x00,0x00,0x00},//L 4C 
	{0x00,0x00,0x00,0xC6,0xC6,0xEE,0xD6,0xD6,0xD6,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00},//M 4D 
	{0x00,0x00,0x00,0xC6,0xC6,0xCE,0xDE,0xF6,0xE6,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00},//N 4E 
	{0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},//O 4F 
	{0x00,0x00,0x00,0x3E,0x66,0x66,0x66,0x3E,0x06,0x06,0x06,0x06,0x00,0x00,0x00,0x00},//P 50 
	{0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x30,0x60,0x00,0x00},//Q 51 
	{0x00,0x00,0x00,0x3E,0x66,0x66,0x66,0x3E,0x36,0x66,0x66,0x66,0x00,0x00,0x00,0x00},//R 52 
	{0x00,0x00,0x00,0x3C,0x66,0x06,0x0C,0x18,0x30,0x60,0x66,0x3C,0x00,0x00,0x00,0x00},//S 53 
	{0x00,0x00,0x00,0x7E,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00},//T 54 
	{0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},//U 55 
	{0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x18,0x00,0x00,0x00,0x00},//V 56 
	{0x00,0x00,0x00,0xC6,0xC6,0xC6,0xD6,0xD6,0xD6,0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00},//W 57 
	{0x00,0x00,0x00,0x66,0x66,0x2C,0x18,0x18,0x34,0x66,0x66,0x66,0x00,0x00,0x00,0x00},//X 58 
	{0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x3C,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00},//Y 59 
	{0x00,0x00,0x00,0x7E,0x60,0x60,0x30,0x18,0x0C,0x06,0x06,0x7E,0x00,0x00,0x00,0x00},//Z 5A 
	{0x00,0x00,0x00,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00},//[ 5B 
	{0x00,0x00,0x00,0x06,0x06,0x0C,0x0C,0x18,0x18,0x30,0x30,0x60,0x60,0x00,0x00,0x00},//\ 5C 
	{0x00,0x00,0x00,0x3C,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x3C,0x00},//] 5D 
	{0x00,0x18,0x3C,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//^ 5E 
	{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00},//_ 5F 
	{0x00,0x1C,0x18,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//` 60 
	{0x00,0x00,0x00,0x00,0x00,0x3C,0x60,0x60,0x7C,0x66,0x66,0x7C,0x00,0x00,0x00,0x00},//a 61 
	{0x00,0x00,0x00,0x06,0x06,0x3E,0x66,0x66,0x66,0x66,0x66,0x3E,0x00,0x00,0x00,0x00},//b 62 
	{0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x06,0x06,0x06,0x66,0x3C,0x00,0x00,0x00,0x00},//c 63 
	{0x00,0x00,0x00,0x60,0x60,0x7C,0x66,0x66,0x66,0x66,0x66,0x7C,0x00,0x00,0x00,0x00},//d 64 
	{0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x66,0x7E,0x06,0x06,0x3C,0x00,0x00,0x00,0x00},//e 65 
	{0x00,0x00,0x00,0x78,0x0C,0x0C,0x0C,0x7E,0x0C,0x0C,0x0C,0x0C,0x00,0x00,0x00,0x00},//f 66 
	{0x00,0x00,0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x66,0x7C,0x60,0x60,0x3E,0x00},//g 67 
	{0x00,0x00,0x00,0x06,0x06,0x3E,0x66,0x66,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00},//h 68 
	{0x00,0x00,0x18,0x18,0x00,0x1E,0x18,0x18,0x18,0x18,0x18,0x7E,0x00,0x00,0x00,0x00},//i 69 
	{0x00,0x00,0x30,0x30,0x00,0x3C,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x1E,0x00},//j 6A 
	{0x00,0x00,0x00,0x06,0x06,0x66,0x66,0x36,0x1E,0x36,0x66,0x66,0x00,0x00,0x00,0x00},//k 6B 
	{0x00,0x00,0x00,0x1E,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x7E,0x00,0x00,0x00,0x00},//l 6C 
	{0x00,0x00,0x00,0x00,0x00,0x7E,0xD6,0xD6,0xD6,0xD6,0xD6,0xC6,0x00,0x00,0x00,0x00},//m 6D 
	{0x00,0x00,0x00,0x00,0x00,0x3E,0x66,0x66,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00},//n 6E 
	{0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,0x00},//o 6F 
	{0x00,0x00,0x00,0x00,0x00,0x3E,0x66,0x66,0x66,0x66,0x66,0x3E,0x06,0x06,0x06,0x00},//p 70 
	{0x00,0x00,0x00,0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x66,0x7C,0x60,0x60,0x60,0x00},//q 71 
	{0x00,0x00,0x00,0x00,0x00,0x66,0x76,0x0E,0x06,0x06,0x06,0x06,0x00,0x00,0x00,0x00},//r 72 
	{0x00,0x00,0x00,0x00,0x00,0x7C,0x06,0x06,0x3C,0x60,0x60,0x3E,0x00,0x00,0x00,0x00},//s 73 
	{0x00,0x00,0x00,0x0C,0x0C,0x7E,0x0C,0x0C,0x0C,0x0C,0x0C,0x78,0x00,0x00,0x00,0x00},//t 74 
	{0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x7C,0x00,0x00,0x00,0x00},//u 75 
	{0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x3C,0x18,0x00,0x00,0x00,0x00},//v 76 
	{0x00,0x00,0x00,0x00,0x00,0xC6,0xD6,0xD6,0xD6,0xD6,0x6C,0x6C,0x00,0x00,0x00,0x00},//w 77 
	{0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x3C,0x18,0x3C,0x66,0x66,0x00,0x00,0x00,0x00},//x 78 
	{0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x30,0x18,0x0F,0x00},//y 79 
	{0x00,0x00,0x00,0x00,0x00,0x7E,0x60,0x30,0x18,0x0C,0x06,0x7E,0x00,0x00,0x00,0x00},//z 7A 
	{0x00,0x00,0x00,0x30,0x18,0x18,0x18,0x0C,0x06,0x0C,0x18,0x18,0x18,0x30,0x00,0x00},//{ 7B 
	{0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00},//| 7C 
	{0x00,0x00,0x00,0x0C,0x18,0x18,0x18,0x30,0x60,0x30,0x18,0x18,0x18,0x0C,0x00,0x00},//} 7D 
	{0x00,0x00,0x00,0x8E,0xDB,0x71,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//~ 7E 
}; 
static const CHARSECT m_fntEngInd[]={{'!','~',m_fntEngDat}}; 
const FONTFACE g_fntEng={'en'|FONTTYPE_MONOSPACED,m_fntEngInd,1,8,16,16}; 
 
 
DWORD CCharSet::GetCharType(DWORD nCode) 
{ 
	if(nCode>='a' && nCode<='z') 
		return 0;  
	if(nCode>='A' && nCode<='Z') 
		return 0; 
	return CHARTYPE_WORDBREAK; 
} 
 
DWORD CCharSet::ParseText(LPCTSTR& pText) 
{ 
	return *pText++; 
} 
 
DWORD CCharSet::Translate(DWORD nCode,BOOL bToSystem) 
{ 
	return nCode; 
} 
 
int CCharSet::GetTextLength(LPCTSTR pText) 
{ 
	if(pText) 
	{ 
		int i=0; 
		while(ParseText(pText))i++; 
	} 
	return 0; 
} 
 
CFontFace::CFontFace() 
{ 
	m_ff=g_fntEng; 
} 
 
int CFontFace::GetCharWidth(DWORD nCharCode,int nFontSize) 
{ 
	CSize size; 
	size.cx=m_ff.nWidth; 
	size.cy=m_ff.nHeight; 
	if(nFontSize!=size.cy) 
	{ 
		size.cx*=nFontSize; 
		size.cx+=size.cy>>1; 
		size.cx/=size.cy; 
	} 
	return size.cx; 
} 
 
PBYTE CFontFace::FindChar(DWORD nCharCode) 
{ 
	int nOffset,i=m_ff.nSectSize; 
	while(i--) 
	{ 
		if(nCharCode>=m_ff.pSect[i].nMinChar &&  
			nCharCode<=m_ff.pSect[i].nMaxChar) 
		{ 
			nOffset=nCharCode-m_ff.pSect[i].nMinChar; 
			nOffset*=m_ff.nFontBytes; 
			return PBYTE(m_ff.pSect[i].pData)+nOffset; 
		} 
	} 
	return NULL; 
} 
 
void CFontFace::DrawFont(FFDRAWARG& pv) 
{ 
	CROP* pBkRop=pv.pBkRop; 
	int x,w,nBit,nData,dx; 
 
	pv.y*=m_ff.nWidth; 
 
	if(pv.sd.cx==pv.sfd.cx && pv.sd.cy==pv.sfd.cy) 
	{ 
		while(--pv.h>=0) 
		{ 
			for(x=pv.y+pv.x,w=pv.w;w>0;x++,w--) 
			{ 
				nData=x>>3; 
				nBit=1<<(x&7); 
				nData=*(pv.pData+nData); 
				if(nData & nBit) 
					pv.rp.ROP(pv.rp); 
				else if(pBkRop) 
				{ 
					pBkRop->MoveTo(pv.rp.GetPosition()); 
					pBkRop->ROP(*pBkRop); 
				} 
				pv.rp.StepCol(); 
			} 
			pv.nPos=pv.rp.StepRow(pv.nPos); 
			pv.y+=m_ff.nWidth; 
		} 
	} 
	else 
	{ 
		while(--pv.h>=0) 
		{ 
			for(dx=pv.nDxSum,x=pv.y+pv.x,w=pv.w;w>0;w--) 
			{ 
				nData=x>>3; 
				nBit=1<<(x&7); 
				nData=*(pv.pData+nData); 
				if(nData & nBit) 
					pv.rp.ROP(pv.rp); 
				else if(pBkRop) 
				{ 
					pBkRop->MoveTo(pv.rp.GetPosition()); 
					pBkRop->ROP(*pBkRop); 
				} 
				pv.rp.StepCol(); 
				dx+=pv.sfd.cx; 
				while(dx>=0) 
				{ 
					x++; 
					dx-=pv.sd.cx; 
				} 
			} 
			pv.nPos=pv.rp.StepRow(pv.nPos); 
			pv.nDySum+=pv.sfd.cy; 
			while(pv.nDySum>=0) 
			{ 
				pv.y+=m_ff.nWidth; 
				pv.nDySum-=pv.sd.cy; 
			} 
		} 
	} 
}