m_data.c

来自「ucOS 模拟环境」· C语言 代码 · 共 220 行

C
220
字号
//----------------------------------------------------------------------
// FileName	: M_Data.c
// Project	: SII_PHS
// Memo		: 
//----------------------------------------------------------------------
#include "string.h"
#include "draw.h"
#include "M_Data.h"
#include "p2gb_tbl.h"
extern struct PinYin_tbl tbl[337];
extern unsigned char font[];
extern unsigned char font_C[];

#define PINYINLINES 337

//=====================================================================================
// Function Name:	uint MD_GetIndexDataCount(ucTEXT ut)
// Purpose      :	Get Index Data Count
// Parameter    :	ucTEXT ut
// Return       :	Index Data Count
// Remarks      :	返回以某个字母开头的所有拼音组合的数量
// Change Log   :	
//                Author       Date       Description	
//              John Wong      2004/2       SII-PHS
//=====================================================================================

uint MD_GetIndexDataCount(ucTEXT ut)
{
	int i;
	int count = 0;	

	if (!( ut.ucChar >= 'a' && ut.ucChar <= 'z' ) ) 
	{
		 if (!( ut.ucChar >= 'A' && ut.ucChar <= 'Z' ) ) 
				return -1;
		  ut.ucChar += 0X20;
		 
	}

	for (i = 0; i < PINYINLINES; i++)  
	{
		if (ut.ucChar ==  tbl[i].pinyin[0]   )
		{
			count++;
		}
	}

		return count;
}

//=====================================================================================
// Function Name:	uint MD_GetIndexData(ucTEXT ut , uchar *ucDataBuf)
// Purpose      :	Get Index Data , fill in *ucDataBuf
// Parameter    :	ucTEXT ut , uchar *ucDataBuf
// Return       :	1(Normal)或-1(Error)
// Remarks      :	根据开头字母和索引号,查询对应的拼音组合
// Change Log   :	
//                Author       Date       Description	
//              John Wong      2004/2       SII-PHS	
//=====================================================================================

uint MD_GetIndexData(ucTEXT ut , uchar * ucDataBuf)
{
	uint i;
	uint count = 0;	
	ucDataBuf[0]='\0';

	if (!( ut.ucChar >= 'a' && ut.ucChar <= 'z' ) ) 
	{
		 if (!( ut.ucChar >= 'A' && ut.ucChar <= 'Z' ) ) 
				return -1;
		 ut.ucChar += 0x20;
	
	}

	for (i = 0; i < PINYINLINES; i++)				
	{
		if (ut.ucChar == tbl[i].pinyin[0])
		{
			
		if(ut.uiCount == count) 
		{
			strcpy(ucDataBuf,(uchar *)tbl[i].pinyin); 
			break;
		}
		count++;
	  }
		
	}
	return 1;
	
}

//=====================================================================================
// Function Name:	uchar  MD_GetMTextData(ucTEXT ut,uchar *ucDataBuf)
// Purpose      :	Get Main Text Data, fill in *ucDataBuf
// Parameter    :	ucTEXT ut,uchar *ucDataBuf
// Return       :	汉字个数,或-1(Error)
// Remarks      :	根据开头字母和索引号,查询对应的所有汉字
// Change Log   :	
//                Author       Date       Description	
//              John Wong      2004/2       SII-PHS
//=====================================================================================

uint  MD_GetMTextData(ucTEXT ut, uchar *ucDataBuf)
{
	uint i;
	uint count = 0;
	ucDataBuf[0] = '\0';

	if (!( ut.ucChar >= 'a' && ut.ucChar <= 'z' ) ) 
	{
		 if (!( ut.ucChar >= 'A' && ut.ucChar <= 'Z' ) ) 
				return -1;
		 ut.ucChar += 0x20;
	
	}

	for (i = 0; i < PINYINLINES; i++)
	{
		if (ut.ucChar == tbl[i].pinyin[0])
		{
			
		if(ut.uiCount == count) 
		{
			strcpy(ucDataBuf,(uchar *)tbl[i].gb);
			break;
		}
		count++;
	  }
		
	}
	return strlen(ucDataBuf) / 2;
}

//=====================================================================================
// Function Name:	uint MD_GetFontData(ulong ulCodeNo, uchar *DataBuf)
// Purpose      :	Get Font Data (of a Chinese Char),fill in *DataBuf
// Parameter    :	ulong ulCodeNo, uchar *DataBuf
// Return       :	1(Normal)或-1(Error)
// Remarks      :	ulCodeNo是某个字符的编号(国标编码)*DataBuf存放该字符的字模信息
// Change Log   :	
//                Author       Date       Description	
//              John Wong      2004/2       SII-PHS	
//=====================================================================================

uint MD_GetFontData(uint ulCodeNo, uchar *DataBuf)
{
	ulong addr;

	addr = ( (ulCodeNo >> 8) - 0xA1) * ( 0xFE + 1 - 0xA1)  +  ulCodeNo % 256 - 0xA1;

	addr *= 28;

	addr += 0xA80;

	memcpy (DataBuf, font_C + addr ,28);

	return 1;
}

//=====================================================================================
// Function Name:	uint MD_GetAscFontData(uchar AscCode, uchar *DataBuf)
// Purpose      :	Get Font Data (of a AscII Char),fill in *DataBuf
// Parameter    :	uchar AscCode, uchar *DataBuf
// Return       :	1(Normal)或-1(Error)
// Remarks      :	AscCode是某个字符的Asc编码, *DataBuf存放该字符的字模信息
// Change Log   :	
//                Author       Date       Description	
//              John Wong      2004/2       SII-PHS	
//=====================================================================================

uint MD_GetAscFontData(uchar AscCode, uchar *DataBuf)
{
	uint line; 
	uint addr;

	if (  !( AscCode >= 'a' && AscCode <= 'z'   ||   AscCode >= 'A' && AscCode <=  'Z'    ) )		     
	{
		return -1;
	}

	line = AscCode -  0x20;

	addr = line * 14 + 0x900;

	memcpy (DataBuf, font + addr ,14);

	return 1;

}


//=====================================================================================
// Function Name:	uint MD_GetFontWidth(ulong ulCodeNo)
// Purpose      :	Get Font Width of a Char
// Parameter    :	ulong ulCodeNo
// Return       :	Font Width
// Remarks      :	返回字模宽度
// Change Log   :	
//                Author       Date       Description	
//              John Wong      2004/2       SII-PHS	
//=====================================================================================
uint MD_GetFontWidth(uint ulCodeNo)
{
	if (ulCodeNo > 0xff )
		return 16;
	else 
		return 8;
}









⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?