微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 嵌入式系统多语言文本解决方案

嵌入式系统多语言文本解决方案

时间:03-12 来源:互联网 点击:

  case TXT_LANG_FRANCE:

  strFile = TXT_FILE_FRANCE;

  break;

  case TXT_LANG_ITALY:

  strFile = TXT_FILE_ITALY;

  break;

  case TXT_LANG_ARABIA:

  strFile = TXT_FILE_ARABIA;

  break;

  case TXT_LANG_PORTUGAL:

  strFile = TXT_FILE_PORTUGAL;

  break;

  case TXT_LANG_HINDI:

  strFile = TXT_FILE_HINDI;

  break;

  case TXT_LANG_TURKISH:

  strFile = TXT_FILE_TURKISH;

  break;

  case TXT_LANG_VIETNAM:

  strFile = TXT_FILE_VIETNAM;

  break;

  case TXT_LANG_SWIDISH:

  strFile = TXT_FILE_SWIDISH;

  break;

  case TXT_LANG_POLISH:

  strFile = TXT_FILE_POLISH;

  break;

  default:

  return NULL;

  }

  //打开配置文件并检查其格式

  if ((fd = open(strFile, O_RDONLY)) == -1)

  {

  return NULL;

  }

  if (read(fd, fh, 16) != 16)

  {

  close(fd);

  return NULL;

  }

  if (fh.lFileType != 0x4746432E || fh.lVersionNum != 0x32303156)

  {

  close(fd);

  return NULL;

  }

  //在文本映射区内查找匹配的文本索引

  for (iOff = fh.lMapOffset; iOff fh.lDataOffset; iOff += 8)

  {

  if (read(fd, map, 8) != 8)

  {

  close(fd);

  return NULL;

  }

  if (map.wTextIndex == lIndex)

  {

  break;

  }

  }

  if (iOff >= fh.lDataOffset)

  {

  close(fd);

  return NULL;

  }

  //根据找到的文本映射来读取文本内容

  if (!(pBuf = GuiMemAlloc(map.wTextSize + 2)))

  {

  close(fd);

  return NULL;

  }

  lseek(fd, fh.lDataOffset + map.lTextOffset, SEEK_SET);

  if (read(fd, pBuf, map.wTextSize) != map.wTextSize)

  {

  GuiMemFree(pBuf);

  close(fd);

  return NULL;

  }

  pBuf[map.wTextSize >> 1] = 0;

  //建立字符串对象

  pTxt = CreateStringDirect(pBuf);

  GuiMemFree(pBuf);

  close(fd);

  return pTxt;

  }

  //定义与字符串相关的数据结构

  #ifndef GUI_STRING_STRUCT

  typedef struct _string

  {

  WORD wWidth; //字符串宽度,字符串输出时的总点阵宽度

  WORD wLength; //字符串长度,不包括''

  WORD * pContent; //字符串内容,以''结尾

  } GUISTRING;

  //结束与字符串相关的数据结构的定义

  #define GUI_STRING_STRUCT

  #endif

  /***

  * 功能:

  根据指定的信息直接建立字符串,函数返回字符串指针

  * 参数:

  1.WORD * pContent: 字符串内容

  * 返回:

  成功返回字符串指针

  失败返回NULL

  * 备注:

  ***/

  GUISTRING * CreateStringDirect(WORD * pContent)

  {

  GUISTRING * pStr;

  //尝试为字符串分配内存

  if (!(pStr = GuiMemAlloc(sizeof(GUISTRING))))

  {

  PRINT_INF(CreateStringDirect Err0!);

  return NULL;

  }

  //字符串内容为空,建立一个空字符串对象

  if (!pContent)

  {

  pStr->wWidth = 0;

  pStr->wLength = 0;

  pStr->pContent = NULL;

  return pStr;

  }

  //统计字符串长度

  pStr->wLength = 0;

  pStr->pContent = pContent;

  while (*pStr->pContent++)

  {

  pStr->wLength++;

  }

  //尝试为字符串内容分配内存

  if (!(pStr->pContent = GuiMemAlloc((pStr->wLength + 1) 1)))

  {

  GuiMemFree(pStr);

  PRINT_INF(CreateStringDirect Err1!);

  return NULL;

  }

  //写入字符串内容

  memcpy(pStr->pContent, pContent, (pStr->wLength + 1) 1);

  //计算字符串宽度

  if (_StringObjectFill(pStr))

  {

  GuiMemFree(pStr->pContent);

  GuiMemFree(pStr);

  PRINT_INF(CreateStringDirect Err2!);

  return NULL;

  }

  return pStr;

  }

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top