📄 gui_uc_encodegb2312.c
字号:
#include "gui_core_kernel_private.h"
/*********************************************************************
*
* Static code
*
**********************************************************************
*/
/*********************************************************************
*
* _GetCharCode
*
*
*
*/
static U16 _GetCharCode(const char GUI_UNI_PTR * s) {
U16 r;
// U16 temp;
U8 Char = *(const U8*)s;
if (Char < 0x80) {
r = Char;
} else if (Char > 0x80) { // changge 0xa1 to 0x80 for GBK
r = (Char & 0xff) << 8;
Char = *(++s);
Char &= 0xff;
r |= Char;
r = eLIBs_GB2312_to_Unicode( r);
} else {
__inf("Illegal character during GB2312 decoding!\n");
r = 1;
}
return r;
}
/*********************************************************************
*
* _GetCharSize
*
*
*
*/
static int _GetCharSize(const char GUI_UNI_PTR * s) {
U8 Char = *s;
if (Char < 0x80) {
return 1;
} else if (Char >0x80 ) {
return 2;
}
__inf("Illegal character during GB2312 decoding!\n");
return 1;
}
/*********************************************************************
*
* _CalcSizeOfChar
*
*
*
*/
static int _CalcSizeOfChar(U16 Char) {
int r=0;
if ((Char>0x813f)&&(Char<0xfe50)) { /* Single byte (ASCII) */
r = 2;
} else if (Char <0x80) { /* Double byte sequence */
r = 1;
}
return r;
}
/*********************************************************************
*
* _Encode
*
*
*/
static int _Encode(char *s, U16 Char) {
int r;
r = _CalcSizeOfChar(Char);
switch (r) {
case 1:
*s = (char)Char;
break;
case 2:
*s++ = (Char >> 8)&0xff;
*s = Char & 0xFF00;
break;
}
return r;
}
/*********************************************************************
*
* _API_Table
*/
static const GUI_UC_ENC_APILIST _API_Table_GB2312 = {
_GetCharCode, /* return character code as ASCII */
_GetCharSize, /* return size of character */
_CalcSizeOfChar, /* return size of character */
_Encode /* Encode character into 1 or 2 */
};
/*********************************************************************
*
* Exported code
*
**********************************************************************
*/
/*********************************************************************
*
* GUI_UC_SetEncodeGB2312
*/
void GUI_UC_SetEncodeGB2312(void) {
GUI_LOCK();
GUI_Context.pUC_API = &_API_Table_GB2312;
GUI_UNLOCK();
}
/*************************** End of file ****************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -