str_palmos.c
上传用户:wstnjxml
上传日期:2014-04-03
资源大小:7248k
文件大小:3k
源码类别:

Windows CE

开发平台:

C/C++

  1. /*****************************************************************************
  2.  *
  3.  * This program is free software ; you can redistribute it and/or modify
  4.  * it under the terms of the GNU General Public License as published by
  5.  * the Free Software Foundation; either version 2 of the License, or
  6.  * (at your option) any later version.
  7.  *
  8.  * This program is distributed in the hope that it will be useful,
  9.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11.  * GNU General Public License for more details.
  12.  *
  13.  * You should have received a copy of the GNU General Public License
  14.  * along with this program; if not, write to the Free Software
  15.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  16.  *
  17.  * $Id: str_palmos.c 432 2005-12-28 16:39:13Z picard $
  18.  *
  19.  * The Core Pocket Media Player
  20.  * Copyright (c) 2004-2005 Gabor Kovacs
  21.  *
  22.  ****************************************************************************/
  23. #include "../common.h"
  24. #if defined(TARGET_PALMOS)
  25. #include "pace.h"
  26. void StringAlloc();
  27. void StringFree();
  28. void String_Init()
  29. {
  30. MemHandle Resource;
  31. DmResID Id;
  32. context* p = Context();
  33. StringAlloc();
  34. for (Id=1000;Id<1000+32;++Id)
  35. {
  36. Resource = DmGetResource('lang',Id);
  37. if (Resource)
  38. {
  39. int Size = MemHandleSize(Resource);
  40. void* Data = MemHandleLock(Resource);
  41. if (Size && Data && StringAddBinary(Data,Size))
  42. ArrayAppend(&p->StrModule,&Resource,sizeof(Resource),16);
  43. else
  44. {
  45. if (Data)
  46. MemHandleUnlock(Resource);
  47. DmReleaseResource(Resource);
  48. }
  49. }
  50. }
  51. }
  52. void String_Done()
  53. {
  54. MemHandle *i;
  55. context* p = Context();
  56. StringFree();
  57. for (i=ARRAYBEGIN(p->StrModule,MemHandle);i!=ARRAYEND(p->StrModule,MemHandle);++i)
  58. {
  59. MemHandleUnlock(*i);
  60. DmReleaseResource(*i);
  61. }
  62. ArrayClear(&p->StrModule);
  63. }
  64. void AsciiToTcs(tchar_t* Out,size_t OutLen,const char* In)
  65. {
  66. StrToTcs(Out,OutLen,In);
  67. }
  68. void TcsToAscii(char* Out,size_t OutLen,const tchar_t* In)
  69. {
  70. TcsToStr(Out,OutLen,In);
  71. }
  72. void UTF8ToTcs(tchar_t* Out,size_t OutLen,const char* In)
  73. {
  74. StrToTcs(Out,OutLen,In); //todo: fix
  75. }
  76. void TcsToUTF8(char* Out,size_t OutLen,const tchar_t* In)
  77. {
  78. TcsToStr(Out,OutLen,In); //todo: fix
  79. }
  80. void StrToTcsEx(tchar_t* Out,size_t OutLen,const char* In,int CodePage)
  81. {
  82. tcscpy_s(Out,OutLen,In);
  83. }
  84. void TcsToStrEx(char* Out,size_t OutLen,const tchar_t* In,int CodePage)
  85. {
  86. tcscpy_s(Out,OutLen,In);
  87. }
  88. void WcsToTcs(tchar_t* Out,size_t OutLen,const uint16_t* In)
  89. {
  90. if (OutLen>0)
  91. {
  92. for (;*In && OutLen>1;++Out,++In,--OutLen)
  93. *Out = (tchar_t)((*In < 256) ? *In:'?');
  94. *Out = 0;
  95. }
  96. }
  97. int tcsicmp(const tchar_t* a,const tchar_t* b) 
  98. {
  99. for (;*a && *b;++a,++b)
  100. if (toupper(*a) != toupper(*b))
  101. break;
  102. if (*a == *b)
  103. return 0;
  104. return (toupper(*a)>toupper(*b)) ? 1:-1;
  105. }
  106. int tcsnicmp(const tchar_t* a,const tchar_t* b,size_t n) 
  107. {
  108. for (;n>0 && *a && *b;++a,++b,--n)
  109. if (toupper(*a) != toupper(*b))
  110. break;
  111. if (n<=0 || *a == *b)
  112. return 0;
  113. return (toupper(*a)>toupper(*b)) ? 1:-1;
  114. }
  115. int GetCodePage(const tchar_t* ContentType)
  116. {
  117. return Context()->CodePage;
  118. }
  119. #endif