diff --git a/HelloWorld/AppDelegate.cpp b/HelloWorld/AppDelegate.cpp
index 1545151a17..e676bfe14a 100644
--- a/HelloWorld/AppDelegate.cpp
+++ b/HelloWorld/AppDelegate.cpp
@@ -68,6 +68,7 @@ bool AppDelegate::initInstance()
#if (CC_TARGET_PLATFORM == CC_PLATFORM_BADA)
CCEGLView * pMainWnd = new CCEGLView();
CC_BREAK_IF(! pMainWnd|| ! pMainWnd->Create(this));
+ cocos2d::CCFileUtils::setResourcePath("/Res/");
#endif
bRet = true;
} while (0);
diff --git a/HelloWorld/bada/.cproject b/HelloWorld/bada/.cproject
index aa6b2f75a5..6192bbab7a 100644
--- a/HelloWorld/bada/.cproject
+++ b/HelloWorld/bada/.cproject
@@ -45,10 +45,11 @@
diff --git a/cocos2dx/platform/CCImage.cpp b/cocos2dx/platform/CCImage.cpp
index 6f37d7d0b1..cfb042b06a 100644
--- a/cocos2dx/platform/CCImage.cpp
+++ b/cocos2dx/platform/CCImage.cpp
@@ -146,7 +146,7 @@ bool CCImage::_initWithJpgData(void * data, int nSize)
jpeg_create_decompress( &cinfo );
/* this makes the library read from infile */
- //cjh_must jpeg_mem_src( &cinfo, (unsigned char *) data, nSize );
+ jpeg_mem_src( &cinfo, (unsigned char *) data, nSize );
/* reading the image header which contains image information */
jpeg_read_header( &cinfo, true );
@@ -221,8 +221,10 @@ bool CCImage::_initWithPngData(void * pData, int nDatalen)
// init png_info
info_ptr = png_create_info_struct(png_ptr);
- //cjh_must CC_BREAK_IF(!info_ptr || setjmp(png_jmpbuf(png_ptr)));
-
+ CC_BREAK_IF(!info_ptr);
+#if CC_TARGET_PLATFORM != CC_PLATFORM_BADA
+ CC_BREAK_IF(setjmp(png_jmpbuf(png_ptr)));
+#endif
// set the read call back function
tImageSource imageSource;
imageSource.data = (unsigned char*)pData;
@@ -246,7 +248,7 @@ bool CCImage::_initWithPngData(void * pData, int nDatalen)
// init image info
m_bPreMulti = true;
- //cjh_must m_bHasAlpha = ( info_ptr->color_type & PNG_COLOR_MASK_ALPHA ) ? true : false;
+ m_bHasAlpha = ( info_ptr->color_type & PNG_COLOR_MASK_ALPHA ) ? true : false;
// allocate memory and read data
int bytesPerComponent = 3;
@@ -390,12 +392,12 @@ bool CCImage::_saveImageToPNG(const char * pszFilePath, bool bIsToRGB)
break;
}
- //cjh_must if (setjmp(png_jmpbuf(png_ptr)))
- {
- fclose(fp);
- png_destroy_write_struct(&png_ptr, &info_ptr);
- break;
- }
+ //cjh if (setjmp(png_jmpbuf(png_ptr)))
+// {
+// fclose(fp);
+// png_destroy_write_struct(&png_ptr, &info_ptr);
+// break;
+// }
png_init_io(png_ptr, fp);
diff --git a/cocos2dx/platform/bada/CCApplication_bada.cpp b/cocos2dx/platform/bada/CCApplication_bada.cpp
index 4c5667beed..3510ca659f 100644
--- a/cocos2dx/platform/bada/CCApplication_bada.cpp
+++ b/cocos2dx/platform/bada/CCApplication_bada.cpp
@@ -60,16 +60,14 @@ void CCApplication::setAnimationInterval(double interval)
bool CCApplication::OnAppInitializing(AppRegistry& appRegistry)
{
- InitGbkUnicodeTable("/Res/gbk_uni_tb.dat");
- if (applicationDidFinishLaunching())
- return true;
- return false;
+ if (! initInstance() || !applicationDidFinishLaunching())
+ return false;
+ return true;
}
bool CCApplication::OnAppTerminating(AppRegistry& appRegistry, bool forcedTermination)
{
- ReleaseGbkUnicodeTable();
return true;
}
diff --git a/cocos2dx/platform/bada/CCApplication_bada.h b/cocos2dx/platform/bada/CCApplication_bada.h
index bfe020b32f..5e7141978a 100644
--- a/cocos2dx/platform/bada/CCApplication_bada.h
+++ b/cocos2dx/platform/bada/CCApplication_bada.h
@@ -42,7 +42,10 @@ class CC_DLL CCApplication :
public:
CCApplication();
virtual ~CCApplication();
-
+ /**
+ @brief Implement for initialize OpenGL instance, set source path, etc...
+ */
+ virtual bool initInstance() = 0;
/**
@brief Implement Window create, CCDirector and CCScene init code here.
@return true Initialize success, app continue.
diff --git a/cocos2dx/platform/bada/CCImage_bada.cpp b/cocos2dx/platform/bada/CCImage_bada.cpp
index 059d9d5199..076e40938f 100644
--- a/cocos2dx/platform/bada/CCImage_bada.cpp
+++ b/cocos2dx/platform/bada/CCImage_bada.cpp
@@ -38,6 +38,7 @@ bool CCImage::initWithString(
result r = E_FAILURE;
do
{
+ CC_BREAK_IF(nWidth <= 0 || nHeight <= 0);
Canvas * pCanvas = new Canvas();
CC_BREAK_IF(! pCanvas);
diff --git a/cocos2dx/platform/bada/CCPlatformFunc_bada.c b/cocos2dx/platform/bada/CCPlatformFunc_bada.c
index 74e66f7ede..329f46e92c 100644
--- a/cocos2dx/platform/bada/CCPlatformFunc_bada.c
+++ b/cocos2dx/platform/bada/CCPlatformFunc_bada.c
@@ -4,9 +4,66 @@
#include
#include
#include
-#include
#include
#include
+#undef errno
+
+static int errno = 0;
+
+#define _U 01
+#define _L 02
+#define _N 04
+#define _S 010
+#define _P 020
+#define _C 040
+#define _X 0100
+#define _B 0200
+
+#define _CTYPE_DATA_0_127 \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C|_S, _C|_S, _C|_S, _C|_S, _C|_S, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _C, _C, _C, _C, _C, _C, _C, _C, \
+ _S|_B, _P, _P, _P, _P, _P, _P, _P, \
+ _P, _P, _P, _P, _P, _P, _P, _P, \
+ _N, _N, _N, _N, _N, _N, _N, _N, \
+ _N, _N, _P, _P, _P, _P, _P, _P, \
+ _P, _U|_X, _U|_X, _U|_X, _U|_X, _U|_X, _U|_X, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _U, _U, _U, _U, _U, \
+ _U, _U, _U, _P, _P, _P, _P, _P, \
+ _P, _L|_X, _L|_X, _L|_X, _L|_X, _L|_X, _L|_X, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _L, _L, _L, _L, _L, \
+ _L, _L, _L, _P, _P, _P, _P, _C
+
+#define _CTYPE_DATA_128_255 \
+ 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0
+
+char _ctype_b[128 + 256] = {
+ _CTYPE_DATA_128_255,
+ _CTYPE_DATA_0_127,
+ _CTYPE_DATA_128_255
+};
+
+
+char *__ctype_ptr__ = (char *) _ctype_b + 127;
+
int sprintf(char* buf, const char *format, ...)
{
@@ -1285,3 +1342,9 @@ int sscanf (const char *s,const char *format, ...)
return done;
}
+
+void __assert_func(const char *file, int line, const char *a, const char *b)
+{
+
+}
+
diff --git a/cocos2dx/platform/bada/Gbk_Unicode.c b/cocos2dx/platform/bada/Gbk_Unicode.c
new file mode 100644
index 0000000000..49ceea8f46
--- /dev/null
+++ b/cocos2dx/platform/bada/Gbk_Unicode.c
@@ -0,0 +1,540 @@
+/*
+ * Gbk_Unicode.h
+ *
+ * Created on: 2011-9-12
+ * Author: dumganhar
+ */
+
+#include
+#include
+#include
+#include "Gbk_Unicode.h"
+
+#define LOGI //printf
+
+#define USE_MEMORY
+
+#ifdef USE_MEMORY
+#include "gbk_table.h"
+#include "unicode_table.h"
+#endif
+
+#undef SAFE_FREE
+#define SAFE_FREE(p) do \
+ {\
+ if ((p) != NULL) \
+ { \
+ free((p)); \
+ (p) = NULL; \
+ } \
+ }while(0)
+
+#define UNICODE1_BEGIN (0x3000)
+#define UNICODE1_END (0x9FA5)
+#define UNICODE1_TOTAL (UNICODE1_END-UNICODE1_BEGIN+1)
+
+#define UNICODE2_BEGIN (0xFF00)
+#define UNICODE2_END (0xFFEF)
+#define UNICODE2_TOTAL (UNICODE2_END-UNICODE2_BEGIN+1)
+
+#define UNICODE3_BEGIN (0x2000)
+#define UNICODE3_END (0x206F)
+#define UNICODE3_TOTAL (UNICODE3_END-UNICODE3_BEGIN+1)
+
+#define FONT_ROW_BEGIN 129
+#define FONT_ROW_END 254
+#define FONT_COL_BEGIN 64
+#define FONT_COL_END 254
+#define FONT_TOTAL (((FONT_ROW_END)-(FONT_ROW_BEGIN)+1)*((FONT_COL_END)-(FONT_COL_BEGIN)+1))
+
+static unsigned short* g_uni_table = NULL;
+static unsigned short* g_gbk_table1 = NULL;
+static unsigned short* g_gbk_table2 = NULL;
+static unsigned short* g_gbk_table3 = NULL;
+static int s_bInit = 0;
+
+static int myWcslen(const unsigned short* str)
+{
+ int i=0;
+ while(*str++) i++;
+ return i;
+}
+
+int InitGbkUnicodeTable(const char* szTablePath)
+{
+#ifndef USE_MEMORY
+ int ret = 0;
+ FILE* fp = NULL;
+ if (s_bInit)
+ return 0;
+ fp = fopen(szTablePath, "rb");
+ if (fp == NULL)
+ {
+ return 0;
+ }
+ g_uni_table = (unsigned short*)malloc(FONT_TOTAL*2);
+ memset((void*)g_uni_table, 0, FONT_TOTAL*2);
+
+ g_gbk_table1 = (unsigned short*)malloc(UNICODE1_TOTAL*2);
+ memset((void*)g_gbk_table1, 0, UNICODE1_TOTAL*2);
+ g_gbk_table2 = (unsigned short*)malloc(UNICODE2_TOTAL*2);
+ memset((void*)g_gbk_table2, 0, UNICODE2_TOTAL*2);
+ g_gbk_table3 = (unsigned short*)malloc(UNICODE3_TOTAL*2);
+ memset((void*)g_gbk_table3, 0, UNICODE3_TOTAL*2);
+
+
+ ret = fread((void*)g_uni_table, FONT_TOTAL*2, 1, fp);
+
+ ret = fread((void*)g_gbk_table1, UNICODE1_TOTAL*2, 1, fp);
+ ret = fread((void*)g_gbk_table2, UNICODE2_TOTAL*2, 1, fp);
+ ret = fread((void*)g_gbk_table3, UNICODE3_TOTAL*2, 1, fp);
+ fclose(fp);
+
+ s_bInit = 1;
+#else
+ g_uni_table = g_uni_table_array;
+ g_gbk_table1 = g_gbk_table1_array;
+ g_gbk_table2 = g_gbk_table2_array;
+ g_gbk_table3 = g_gbk_table3_array;
+ s_bInit = 1;
+#endif
+ return 1;
+}
+
+void ReleaseGbkUnicodeTable(void)
+{
+#ifndef USE_MEMORY
+ if (s_bInit) {
+ if (g_uni_table != NULL)
+ {
+ free((void*)g_uni_table);
+ g_uni_table = NULL;
+ }
+
+ if (g_gbk_table1 != NULL)
+ {
+ free((void*)g_gbk_table1);
+ g_gbk_table1 = NULL;
+ }
+
+ if (g_gbk_table2 != NULL)
+ {
+ free((void*)g_gbk_table2);
+ g_gbk_table2 = NULL;
+ }
+
+ if (g_gbk_table3 != NULL)
+ {
+ free((void*)g_gbk_table3);
+ g_gbk_table3 = NULL;
+ }
+
+ s_bInit = 0;
+ }
+#endif
+}
+
+#define GET_GBK_WORD(table, s, e) \
+ if (pUnicodeIn[i] >= s && pUnicodeIn[i] <= e) \
+ { \
+ iIndex = pUnicodeIn[i]-s; \
+ oneGbk = table[iIndex]; \
+ pGbk = (unsigned char*)&oneGbk; \
+ pGBKOut[j++] = *(pGbk+1); \
+ pGBKOut[j++] = *pGbk; \
+ continue; \
+ }
+
+
+int MyUnicodeToGBK(char* pGBKOut, int iGbkBufSize, const unsigned short* pUnicodeIn)
+{
+ unsigned char* pOneUnicode = NULL;
+ int len = 0;
+ int iIndex = 0;
+ int i = 0, j = 0;
+
+ if (!s_bInit)
+ return 0;
+
+ if (pUnicodeIn == NULL || pGBKOut == NULL || iGbkBufSize <= 2)
+ {
+ LOGI("pUnicodeIn == NULL || pGBKOut == NULL || iGbkBufSize <= 2");
+ return 0;
+ }
+
+ memset(pGBKOut, 0, iGbkBufSize);
+
+ len = myWcslen(pUnicodeIn);
+ for (i = 0, j = 0; i < len; i++)
+ {
+ unsigned char* pGbk = NULL;
+ unsigned short oneGbk = 0;
+ pOneUnicode = (unsigned char*)&pUnicodeIn[i];
+ if (j >= iGbkBufSize-1)
+ {
+ break;
+ }
+
+ if (pOneUnicode[1] == 0)
+ {// 半角字母符号
+ if (pOneUnicode[0] == 0xb7)
+ {
+ pGBKOut[j++] = 0xa1;
+ pGBKOut[j++] = 0xa4;
+ }
+ else if (pOneUnicode[0] == 0xB0)
+ {
+ pGBKOut[j++] = 0xA1;
+ pGBKOut[j++] = 0xE3;
+ }
+ else
+ {
+ pGBKOut[j++] = pOneUnicode[0];
+ }
+ }
+ else
+ {
+ GET_GBK_WORD(g_gbk_table1, UNICODE1_BEGIN, UNICODE1_END);// 汉字
+ GET_GBK_WORD(g_gbk_table2, UNICODE2_BEGIN, UNICODE2_END);// 全角字母符号
+ GET_GBK_WORD(g_gbk_table3, UNICODE3_BEGIN, UNICODE3_END);// 常用标点符号
+ }
+ }
+
+ j = j > iGbkBufSize-1 ? iGbkBufSize-1 : j;
+
+ pGBKOut[j] = '\0';
+ return 1;
+}
+
+int MyGBKToUnicode(unsigned short* pUnicodeOut, int iUniBufSize, const char* pGBKIn)
+{
+ int i = 0;
+ int j = 0;
+ int len = 0;
+ int iIndex = 0;
+ unsigned char* pUnicode = NULL;
+ unsigned short oneGbkHanzi = 0;
+ unsigned char* pOneGbkHanzi = (unsigned char*)&oneGbkHanzi;
+ const unsigned char* pGBKInU = (const unsigned char*)pGBKIn;
+
+ if (!s_bInit)
+ return 0;
+
+ if (pUnicodeOut == NULL || pGBKIn == NULL || iUniBufSize <= 3)
+ {
+ LOGI("pUnicodeOut == NULL || pGBKIn == NULL || iUniBufSize <= 3");
+ return 0;
+ }
+
+ memset(pUnicodeOut, 0, iUniBufSize);
+
+ len = strlen(pGBKIn);
+ for (i = 0; i < len; i++)
+ {
+ if (j >= iUniBufSize/2-1)
+ {
+ break;
+ }
+
+ pUnicode = (unsigned char*)&pUnicodeOut[j];
+ if (pGBKInU[i] >= 0x00 && pGBKInU[i] <= 0x80)
+ {// 半角字母符号
+ *(pUnicode++) = pGBKInU[i];
+ *pUnicode = 0x00;
+ ++j;
+ }
+ else if ((pGBKInU[i] >= 0x81 && pGBKInU[i] <= 0xFE)
+ &&(pGBKInU[i+1] >= 0x40 && pGBKInU[i+1] <= 0xFE)
+ && (pGBKInU[i+1] != 0x7F)
+ )
+ {// 中文
+ pOneGbkHanzi[1] = pGBKInU[i];
+ pOneGbkHanzi[0] = pGBKInU[i+1];
+ iIndex = (pOneGbkHanzi[1]-0x81)*191+(pOneGbkHanzi[0]-0x40);
+ pUnicodeOut[j] = g_uni_table[iIndex];
+ ++i;
+ ++j;
+ }
+ }
+// LOGI("unicode len = %d", j);
+
+ j = j > iUniBufSize/2-1 ? iUniBufSize/2-1 : j;
+
+ pUnicodeOut[j] = L'\0';
+ return 1;
+}
+
+static int GetUtf8Len(unsigned short* pUniStr)
+{
+ int wideLen = 0;
+ int len = 0;
+ int i = 0;
+
+ if (pUniStr == NULL || (wideLen = myWcslen(pUniStr)) <= 0)
+ return 0;
+
+ for (i = 0; i < wideLen; i++)
+ {
+ unsigned short c = pUniStr[i];
+ if (c < 0x80)
+ {
+ len += 1;
+ }
+ else if (c < 0x800)
+ {
+ len += 2;
+ }
+ else if (c < 0x10000)
+ {
+ len += 3;
+ }
+ else if (c < 0x200000)
+ {
+ len += 4;
+ }
+ else if (c < 0x4000000)
+ {
+ len += 5;
+ }
+ else
+ {
+ len += 6;
+ }
+ }
+ return len;
+}
+
+static int unichar_to_utf8 (unsigned short c, char* outbuf)
+{
+ /* If this gets modified, also update the copy in g_string_insert_unichar() */
+ size_t len = 0;
+ int first;
+ int i;
+
+ if (c < 0x80)
+ {
+ first = 0;
+ len = 1;
+ }
+ else if (c < 0x800)
+ {
+ first = 0xc0;
+ len = 2;
+ }
+ else if (c < 0x10000)
+ {
+ first = 0xe0;
+ len = 3;
+ }
+ else if (c < 0x200000)
+ {
+ first = 0xf0;
+ len = 4;
+ }
+ else if (c < 0x4000000)
+ {
+ first = 0xf8;
+ len = 5;
+ }
+ else
+ {
+ first = 0xfc;
+ len = 6;
+ }
+
+ if (outbuf)
+ {
+ for (i = len - 1; i > 0; --i)
+ {
+ outbuf[i] = (c & 0x3f) | 0x80;
+ c >>= 6;
+ }
+ outbuf[0] = c | first;
+ }
+
+ return len;
+}
+
+int MyGBKToUTF8_M(char** ppszOutUtf8, char* pszGbk)
+{
+ int i = 0;
+ int iRet = 0;
+ int wideLenGuess = 0;
+ int wideLen = 0;
+ int utfLen = 0;
+ unsigned short* pUnicode = NULL;
+ if (ppszOutUtf8 == NULL || pszGbk == NULL || strlen(pszGbk) <= 0)
+ return 0;
+ wideLenGuess = (strlen(pszGbk)+1)*2;
+ pUnicode = (unsigned short*)malloc(wideLenGuess);
+ if (pUnicode == NULL)
+ {
+ LOGI("int MyGBKToUTF8_M malloc unicode buf fails!");
+ return 0;
+ }
+
+ memset(pUnicode, 0, wideLenGuess);
+
+ do {
+ if (0 == MyGBKToUnicode(pUnicode, wideLenGuess, pszGbk))
+ {
+ LOGI("MyGBKToUnicode fails in MyGBKToUTF8_M");
+ break;
+ }
+ wideLen = myWcslen(pUnicode);
+ utfLen = GetUtf8Len(pUnicode);
+ *ppszOutUtf8 = (char*)malloc(utfLen+1);
+ if (*ppszOutUtf8 == NULL)
+ {
+ break;
+ }
+
+ memset(*ppszOutUtf8, 0, utfLen+1);
+ for (i = 0; i < wideLen; i++)
+ {
+ char szTmpUtf8[7] = {0};
+ unichar_to_utf8(pUnicode[i], szTmpUtf8);
+ strcat(*ppszOutUtf8, szTmpUtf8);
+ }
+
+ iRet = 1;
+ }while (0);
+
+ SAFE_FREE(pUnicode);
+
+ return iRet;
+}
+
+/*************************************************************************************************
+
+ * 将UTF8编码转换成Unicode(UCS-2)编码
+
+ * 参数:
+
+ * char* pInput 指向输入字符串(以'\0'结尾)的指针
+
+ * char** ppOutput 指向输出字符串指针的指针
+
+ * 返回值:
+
+ * 返回转换后的Unicode字符串的字节数,如果出错则返回-1
+
+ * 注意:
+
+ * 1. UTF8没有字节序问题,但是Unicode字符有字节序,
+
+ * 字节序分为大端(Big Endian)和小端(Little Endian)两种,
+
+ * 在Intel处理器中采用小端法表示,因此本例中采用小端法表示。(低地址存低位)
+
+ * 2. 在调用本函数后需要手动释放 *ppOutput 指向的内存,否则将会造成内存泄漏。
+
+ **************************************************************************************************/
+
+static int utf8_to_unicode(char* pInput, char** ppOutput)
+{
+ int outputSize = 0; //记录转换后的Unicode字符串的字节数
+ char *tmp = NULL;
+ if (pInput == NULL || strlen(pInput) <= 0)
+ return -1;
+
+ *ppOutput = (char *)malloc(strlen(pInput) * 2); //为输出字符串分配足够大的内存空间
+ memset(*ppOutput, 0, strlen(pInput) * 2);
+ tmp = *ppOutput; //临时变量,用于遍历输出字符串
+
+ while (*pInput)
+ {
+ if (*pInput > 0x00 && *pInput <= 0x7F) //处理单字节UTF8字符(英文字母、数字)
+ {
+ *tmp = *pInput;
+ tmp++;
+ *tmp = 0; //小端法表示,在高地址填补0
+ }
+ else if (((*pInput) & 0xE0) == 0xC0) //处理双字节UTF8字符
+ {
+ char high = *pInput;
+ char low = 0;
+ pInput++;
+ low = *pInput;
+
+ if ((low & 0xC0) != 0x80) //检查是否为合法的UTF8字符表示
+ {
+ return -1; //如果不是则报错
+ }
+
+ *tmp = (high << 6) + (low & 0x3F);
+ tmp++;
+ *tmp = (high >> 2) & 0x07;
+ }
+ else if (((*pInput) & 0xF0) == 0xE0) //处理三字节UTF8字符
+ {
+ char high = *pInput;
+ char middle = 0;
+ char low = 0;
+
+ pInput++;
+ middle = *pInput;
+ pInput++;
+ low = *pInput;
+
+ if (((middle & 0xC0) != 0x80) || ((low & 0xC0) != 0x80))
+ {
+ return -1;
+ }
+
+ *tmp = (middle << 6) + (low & 0x7F);
+ tmp++;
+ *tmp = (high << 4) + ((middle >> 2) & 0x0F);
+ }
+ else //对于其他字节数的UTF8字符不进行处理
+ {
+ return -1;
+ }
+
+ pInput ++;
+ tmp ++;
+ outputSize += 2;
+ }
+
+ *tmp = 0;
+ tmp++;
+ *tmp = 0;
+
+ return outputSize;
+}
+
+int MyUTF8ToGBK_M(char** ppszOutGbk, char* pszUtf8)
+{
+ int iRet = 0;
+ int unicodeBytes = 0;
+ unsigned short* pUnicodeStrChar = NULL;
+
+ if (ppszOutGbk == NULL || pszUtf8 == NULL || strlen(pszUtf8) <= 0)
+ return 0;
+
+ do {
+ unicodeBytes = utf8_to_unicode(pszUtf8, (char**)&pUnicodeStrChar);
+ if (unicodeBytes <= 0)
+ {
+ break;
+ }
+
+ *ppszOutGbk = (char*)malloc(unicodeBytes+1);
+ if (*ppszOutGbk == NULL)
+ {
+ break;
+ }
+ memset(*ppszOutGbk, 0, unicodeBytes+1);
+ if (0 == MyUnicodeToGBK(*ppszOutGbk, unicodeBytes+1, pUnicodeStrChar))
+ {
+ LOGI("MyUnicodeToGBK fails in MyUTF8ToGBK_M");
+ SAFE_FREE(*ppszOutGbk);
+ break;
+ }
+ iRet = 1;
+ } while(0);
+
+ SAFE_FREE(pUnicodeStrChar);
+
+ return iRet;
+}
diff --git a/cocos2dx/platform/bada/Gbk_Unicode.cpp b/cocos2dx/platform/bada/Gbk_Unicode.cpp
deleted file mode 100644
index 87e852a82a..0000000000
--- a/cocos2dx/platform/bada/Gbk_Unicode.cpp
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Gbk_Unicode.cpp
- *
- * Created on: 2010-7-7
- * Author: Administrator
- */
-
-#include
-#include
-#include
-#include
-#include "Gbk_Unicode.h"
-
-#define UNICODE_BEGIN (0x3001)
-#define UNICODE_END (0x9FA5)
-#define UNICODE_TOTAL (UNICODE_END-UNICODE_BEGIN+1)
-#define UNICODE2_BEGIN (0xFF00)
-#define UNICODE2_END (0xFFEF)
-#define UNICODE2_TOTAL (UNICODE2_END-UNICODE2_BEGIN+1)
-
-
-#define FONT_ROW_BEGIN 129
-#define FONT_ROW_END 254
-#define FONT_COL_BEGIN 64
-#define FONT_COL_END 254
-#define FONT_TOTAL (((FONT_ROW_END)-(FONT_ROW_BEGIN)+1)*((FONT_COL_END)-(FONT_COL_BEGIN)+1))
-
-const unsigned short* gbk_table = NULL;
-const unsigned short* gbk_table2 = NULL;
-const unsigned short* uni_table = NULL;
-
-int InitGbkUnicodeTable(char* szTablePath)
-{
- int ret = 0;
- FILE* fp = NULL;
- fp = fopen(szTablePath, "rb");
- if (fp == NULL)
- {
- return 0;
- }
- gbk_table = (unsigned short*)malloc(UNICODE_TOTAL*2);
- memset((void*)gbk_table, 0, UNICODE_TOTAL*2);
- gbk_table2 = (unsigned short*)malloc(UNICODE2_TOTAL*2);
- memset((void*)gbk_table2, 0, UNICODE2_TOTAL*2);
- uni_table = (unsigned short*)malloc(FONT_TOTAL*2);
- memset((void*)uni_table, 0, FONT_TOTAL*2);
-
- ret = fread((void*)uni_table, FONT_TOTAL*2, 1, fp);
- ret = fread((void*)gbk_table, UNICODE_TOTAL*2, 1, fp);
- ret = fread((void*)gbk_table2, UNICODE2_TOTAL*2, 1, fp);
-
-
-
-
- fclose(fp);
-
- return 1;
-}
-
-void ReleaseGbkUnicodeTable(void)
-{
- if (gbk_table != NULL)
- {
- free((void*)gbk_table);
- gbk_table = NULL;
- }
-
- if (gbk_table2 != NULL)
- {
- free((void*)gbk_table2);
- gbk_table2 = NULL;
- }
-
- if (uni_table != NULL)
- {
- free((void*)uni_table);
- uni_table = NULL;
- }
-}
-
-void MyUnicodeToGBK(char* pGBKOut, wchar_t* pUnicodeIn)
-{
- char* pOneUnicode = NULL;
- int len = wcslen(pUnicodeIn);
- int iIndex = 0;
- int i = 0, j = 0;
- if (pUnicodeIn == NULL|| pGBKOut == NULL)
- {
- return;
- }
-
- for (i = 0, j = 0; i < len; i++)
- {
- unsigned char* pGbk = NULL;
- unsigned short oneGbk = 0;
- pOneUnicode = (char*)&pUnicodeIn[i];
- if (pOneUnicode[1] == 0)
- {// 鍗婅瀛楁瘝绗﹀彿
- pGBKOut[j++] = pOneUnicode[0];
- }
- else
- {
- if (pUnicodeIn[i] >= UNICODE_BEGIN && pUnicodeIn[i] <= UNICODE_END)
- {// 姹夊瓧
- iIndex = pUnicodeIn[i]-UNICODE_BEGIN;
- oneGbk = gbk_table[iIndex];
- pGbk = (unsigned char*)&oneGbk;
- pGBKOut[j++] = *(pGbk+1);
- pGBKOut[j++] = *pGbk;
- }
- else if (pUnicodeIn[i] >=UNICODE2_BEGIN && pUnicodeIn[i] <= UNICODE2_END)
- {// 鍏ㄨ瀛楁瘝绗﹀彿
- iIndex = pUnicodeIn[i]-UNICODE2_BEGIN;
- oneGbk = gbk_table2[iIndex];
- pGbk = (unsigned char*)&oneGbk;
- pGBKOut[j++] = *(pGbk+1);
- pGBKOut[j++] = *pGbk;
- }
-
- }
- }
- pGBKOut[j] = '\0';
-}
-
-void MyGBKToUnicode(wchar_t* pUnicodeOut, char* pGBKIn)
-{
- int i = 0;
- int j = 0;
- int len = 0;
- int iIndex = 0;
- unsigned char* pUnicode = NULL;
- unsigned short oneGbkHanzi = 0;
- unsigned char* pOneGbkHanzi = (unsigned char*)&oneGbkHanzi;
- unsigned char* pGBKInU = (unsigned char*)pGBKIn;
-
- if (pUnicodeOut == NULL || pGBKIn == NULL)
- {
- return;
- }
- len = strlen(pGBKIn);
- for (i = 0; i < len; i++)
- {
- pUnicode = (unsigned char*)&pUnicodeOut[j];
- if (pGBKInU[i] >= 0x00 && pGBKInU[i] <= 0x80)
- {// 鍗婅瀛楁瘝绗﹀彿
- *(pUnicode++) = pGBKInU[i];
- *pUnicode = 0x00;;
- ++j;
- }
- else if ((pGBKInU[i] >= 0x81 && pGBKInU[i] <= 0xFE)
- &&(pGBKInU[i+1] >= 0x40 && pGBKInU[i+1] <= 0xFE)
- && (pGBKInU[i+1] != 0x7F)
- )
- {// 涓枃
- pOneGbkHanzi[1] = pGBKInU[i];
- pOneGbkHanzi[0] = pGBKInU[i+1];
- iIndex = (pOneGbkHanzi[1]-0x81)*191+(pOneGbkHanzi[0]-0x40);
- pUnicodeOut[j] = uni_table[iIndex];
- ++i;
- ++j;
- }
- }
- pUnicodeOut[j] = L'\0';
-}
diff --git a/cocos2dx/platform/bada/Gbk_Unicode.h b/cocos2dx/platform/bada/Gbk_Unicode.h
index a232d3f763..1e5c664e9a 100644
--- a/cocos2dx/platform/bada/Gbk_Unicode.h
+++ b/cocos2dx/platform/bada/Gbk_Unicode.h
@@ -1,16 +1,42 @@
-/*
- * Gbk_Unicode.h
- *
- * Created on: 2010-7-7
- * Author: Administrator
- */
-
-#ifndef GBK_UNICODE_H_
-#define GBK_UNICODE_H_
-
-int InitGbkUnicodeTable(char* szTablePath);
-void ReleaseGbkUnicodeTable(void);
-void MyUnicodeToGBK(char* pGBKOut, wchar_t* pUnicodeIn);
-void MyGBKToUnicode(wchar_t* pUnicodeOut, char* pGBKIn);
-
-#endif /* GBK_UNICODE_H_ */
+/*
+ * Gbk_Unicode.h
+ *
+ * Created on: 2011-9-12
+ * Author: dumganhar
+ */
+
+#ifndef GBK_UNICODE_H_
+#define GBK_UNICODE_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * param:
+ * pGbkOut[out]:用于存放输出Gbk的缓冲
+ * iGbkBufSize[in]:用于存放输出Gbk的缓冲的大小,单位为字节, 若pGbkOut为数组, 可使用sizeof()计算数组长度
+ * pUnicodeIn[in]:需要转换的unicode缓冲
+ * return: 0:失败, 1: 成功
+*/
+int MyUnicodeToGBK(char* pGBKOut, int iGbkBufSize, const unsigned short* pUnicodeIn);
+
+/*
+ * param:
+ * pUnicodeOut[out]:用于存放输出unicode的缓冲
+ * iUniBufSize[in]:用于存放输出unicode的缓冲的大小,单位为字节, 若pUnicodeOut为数组, 可使用sizeof()计算数组长度
+ * pGBKIn[in]:需要转换的gbk缓冲
+ * return: 0:失败, 1: 成功
+*/
+int MyGBKToUnicode(unsigned short* pUnicodeOut, int iUniBufSize, const char* pGBKIn);
+// ppszOutUtf8为空指针的地址传入,函数内部对其赋值,_M结束的函数需要用free释放
+int MyGBKToUTF8_M(char** ppszOutUtf8, char* pszGbk);
+// ppszOutGbk为空指针的地址传入,函数内部对其赋值,_M结束的函数需要用free释放
+int MyUTF8ToGBK_M(char** ppszOutGbk, char* pszUtf8);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* GBK_UNICODE_H_ */
diff --git a/cocos2dx/platform/bada/gbk_table.h.REMOVED.git-id b/cocos2dx/platform/bada/gbk_table.h.REMOVED.git-id
new file mode 100644
index 0000000000..6db4f9aad7
--- /dev/null
+++ b/cocos2dx/platform/bada/gbk_table.h.REMOVED.git-id
@@ -0,0 +1 @@
+91648ccc87a82401632a6369a47382bb438d3160
\ No newline at end of file
diff --git a/cocos2dx/platform/bada/unicode_table.h.REMOVED.git-id b/cocos2dx/platform/bada/unicode_table.h.REMOVED.git-id
new file mode 100644
index 0000000000..89f85cc840
--- /dev/null
+++ b/cocos2dx/platform/bada/unicode_table.h.REMOVED.git-id
@@ -0,0 +1 @@
+9260a2c16edf31510bf8a9205b1058140666ef81
\ No newline at end of file