⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uifontex.c

📁 嵌入工linux开发的源码
💻 C
字号:
#include <pr2k.h>
#include <uiwnd.h>

//#include <sys/syscall.h>
#include <filesys.h>
//#include <FatSys.h>
#include <uiFontEx.h>

#define _FONTEX_DEBUG 1

//global variable
static char const * const szName_FontEx="FontEx";
static int gFontEx_WordNum=0;
static unsigned short gFontEx_Data[FONTEX_SIZE/2];


DLL_EXP(STATUS) guiFontEx_SaveBitmap(const char *code1,const unsigned short *bitmap,int len)
{
	int i,no,offset,fHandle;
	unsigned char * code;
	int len1;


	guiEnterWCS();
	
	code=(unsigned char *)code1;

	if(len>FONTEX_BITMAP_SIZE/2-1)
	{
		guiExitWCS();
		return STATUS_ERR;
	}

	fHandle=fs_open((char *)szName_FontEx,O_RDWR/*O_RDONLY*/);
	if(fHandle<0)
	{
		guiExitWCS();
		return STATUS_ERR;
	}

	if(code!=NULL)
	{
		no=(code[0]-0xf8)*94+(code[1]-0xa1);
	}
	else
	{
		for(no=0;no<FONTEX_SIZE/FONTEX_BITMAP_SIZE;no++)
		{
			if(*((unsigned char *)&gFontEx_Data[no*(FONTEX_BITMAP_SIZE/2)]+FONTEX_BITMAP_SIZE-1)!=FONTEX_VALID)
			{
				break;
			}
		}
	}      

	offset=no*(FONTEX_BITMAP_SIZE/2);

	/*
	if(no<0||no>gFontEx_WordNum||no>=(FONTEX_SIZE/FONTEX_BITMAP_SIZE))
	{
		fs_close(fHandle);
		guiExitWCS();

		
		if(no>gFontEx_WordNum)
		{
			return -2;
		}
		else
		{
			return STATUS_ERR;
		}
	}
	*/       // by zhangxp
	if(no<0||no>=(FONTEX_SIZE/FONTEX_BITMAP_SIZE))
	{
		fs_close(fHandle);
		guiExitWCS();
		return STATUS_ERR;
	}

	memcpy(&gFontEx_Data[offset],bitmap,len*2);

	*((unsigned char *)&gFontEx_Data[offset]+FONTEX_BITMAP_SIZE-1)=FONTEX_VALID;
	

	//fs_lseek(fHandle,offset*2,SEEK_SET);
	//if(fs_write(fHandle,(unsigned char *)&gFontEx_Data[offset],FONTEX_BITMAP_SIZE)!=FONTEX_BITMAP_SIZE)
	fs_lseek(fHandle, 0, SEEK_SET); // by zhangxp
	len1 = sizeof(gFontEx_Data);
	if(fs_write(fHandle,(unsigned char *)gFontEx_Data, len1)!=FONTEX_BITMAP_SIZE)
	{
		fs_close(fHandle);
		guiExitWCS();
		return STATUS_ERR;
	}

	fs_close(fHandle);

	/*
	if(no==gFontEx_WordNum)
	{
		gFontEx_WordNum++;
	}
	*/   // by zhangxp

	guiExitWCS();
	return STATUS_OK;
}


DLL_EXP(unsigned short *) guiFontEx_GetBitmap(const char *code1)
{
	unsigned char * code;
	int no,offset;
	char langType;
	
	langType = guiQueryLanguageType();
	if(langType>2)
		langType = LANGUAGE_CHS;

	guiEnterWCS();

	code=(unsigned char *)code1;

	if(langType==LANGUAGE_CHT)
	{
		no=(code[0]-0xc6)*94+(code[1]-0xa1);
		offset=no*(FONTEX_BITMAP_SIZE/2);	
	}
	else
	{
		no=(code[0]-0xf8)*94+(code[1]-0xa1);
		offset=no*(FONTEX_BITMAP_SIZE/2);
	}

	
	//if(no<0||no>=gFontEx_WordNum)  // by zhangxp
	if(no<0||no>=(FONTEX_SIZE/FONTEX_BITMAP_SIZE))
	{
		guiExitWCS();
		return NULL;
	}
	          

	if(*((unsigned char *)&gFontEx_Data[offset]+FONTEX_BITMAP_SIZE-1)!=FONTEX_VALID)
	{
		guiExitWCS();
		return NULL;
	}

	guiExitWCS();
	return &gFontEx_Data[offset];
}


DLL_EXP(STATUS) guiFontEx_DeleteWord(const char *code1)
{
	unsigned char * code;
	int no,offset,fHandle;
	int len;

	guiEnterWCS();

	code=(unsigned char *)code1;

	no=(code[0]-0xf8)*94+(code[1]-0xa1);
	offset=no*(FONTEX_BITMAP_SIZE/2);

	//if(no<0||no>=gFontEx_WordNum)
	if(no<0||no>=(FONTEX_SIZE/FONTEX_BITMAP_SIZE))  // by zhang
	{
		guiExitWCS();
		return NULL;
	}

	fHandle=fs_open((char *)szName_FontEx,O_RDWR);
	if(fHandle<0)
	{
		guiExitWCS();
		return STATUS_ERR;
	}

	if(*((unsigned char *)&gFontEx_Data[offset]+FONTEX_BITMAP_SIZE-1)!=FONTEX_VALID)
	{
		fs_close(fHandle);
		guiExitWCS();
		return STATUS_ERR;
	}

	*((unsigned char *)&gFontEx_Data[offset]+FONTEX_BITMAP_SIZE-1)=FONTEX_DELETE;

	//fs_lseek(fHandle,offset*2,SEEK_SET);
	//if(fs_write(fHandle,(unsigned char *)&gFontEx_Data[offset],FONTEX_BITMAP_SIZE)!=FONTEX_BITMAP_SIZE)

	fs_lseek(fHandle, 0, SEEK_SET);
	len = sizeof(gFontEx_Data);
	if(fs_write(fHandle,(unsigned char *)&gFontEx_Data, len)!=FONTEX_BITMAP_SIZE)
	{
		fs_close(fHandle);
		guiExitWCS();
		return STATUS_ERR;
	}

	fs_close(fHandle);

	guiExitWCS();
	return STATUS_OK;
}

////////////////////////// internal function ////////////////////////
STATUS guiFontEx_Init(void)
{
	int fHandle,len;

	memset(gFontEx_Data, 0x00, FONTEX_SIZE);

	guiEnterWCS();
	fHandle=fs_open((char *)szName_FontEx,O_CREATE);
	if(fHandle<0)
	{
		guiExitWCS();
		return STATUS_ERR;
	}

	len=fs_filelength(fHandle);
	if(len<0)
	{
		fs_close(fHandle);
		guiExitWCS();
		return STATUS_ERR;
	}

	if(len>FONTEX_SIZE)
	{
		len=FONTEX_SIZE;
	}

	if(fs_read(fHandle,(unsigned char *)gFontEx_Data,len)!=len)
	{
		fs_close(fHandle);
		guiExitWCS();
		return STATUS_ERR;
	}

//	gFontEx_WordNum=len/FONTEX_BITMAP_SIZE;

	fs_close(fHandle);
	guiExitWCS();
	return STATUS_OK;
}

#if _DEBUG&&_FONTEX_DEBUG

STATUS FontEx_Test(void)
{
   char code[2]={0xf8,0xa2};
	unsigned short bitmap[15];

	memset(bitmap,-4,sizeof(bitmap));
//	guiFontEx_Init();
	guiFontEx_SaveBitmap(NULL,bitmap,15);
	memset(bitmap,0,sizeof(bitmap));
	guiFontEx_GetBitmap(code);
	guiFontEx_DeleteWord(code);
	guiFontEx_GetBitmap(code);
	
	return STATUS_OK;
}

#endif

⌨️ 快捷键说明

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