Add toolchain and mbtk source

Change-Id: Ie12546301367ea59240bf23d5e184ad7e36e40b3
diff --git a/mbtk/mbtk_lib/inc/mbtk_utf.h b/mbtk/mbtk_lib/inc/mbtk_utf.h
new file mode 100644
index 0000000..6a16ced
--- /dev/null
+++ b/mbtk/mbtk_lib/inc/mbtk_utf.h
@@ -0,0 +1,85 @@
+//

+// Created by hitmoon on 15-12-17.

+//

+

+#ifndef SMS_UTF_H

+#define SMS_UTF_H

+

+#include <stddef.h>

+#include <sys/types.h>

+

+typedef unsigned int UTF32;

+/* at least 32 bits */

+typedef unsigned short UTF16;

+/* at least 16 bits */

+typedef unsigned char UTF8;

+/* typically 8 bits */

+typedef unsigned char Boolean; /* 0 or 1 */

+

+/* Some fundamental constants */

+#define UNI_REPLACEMENT_CHAR (UTF32)0x0000FFFD

+#define UNI_MAX_BMP (UTF32)0x0000FFFF

+#define UNI_MAX_UTF16 (UTF32)0x0010FFFF

+#define UNI_MAX_UTF32 (UTF32)0x7FFFFFFF

+#define UNI_MAX_LEGAL_UTF32 (UTF32)0x0010FFFF

+

+typedef enum {

+    conversionOK, /* conversion successful */

+            sourceExhausted, /* partial character in source, but hit end */

+            targetExhausted, /* insuff. room in target for conversion */

+            sourceIllegal        /* source sequence is illegal/malformed */

+} ConversionResult;

+

+typedef enum {

+    strictConversion = 0,

+    lenientConversion

+} ConversionFlags;

+

+/* This is for C++ and does no harm in C */

+#ifdef __cplusplus

+extern "C" {

+#endif

+

+ConversionResult ConvertUTF8toUTF16(

+        const UTF8 **sourceStart, const UTF8 *sourceEnd,

+        UTF16 **targetStart, UTF16 *targetEnd, ConversionFlags flags);

+

+ConversionResult ConvertUTF16toUTF8(

+        const UTF16 **sourceStart, const UTF16 *sourceEnd,

+        UTF8 **targetStart, UTF8 *targetEnd, ConversionFlags flags);

+

+ConversionResult ConvertUTF8toUTF32(

+        const UTF8 **sourceStart, const UTF8 *sourceEnd,

+        UTF32 **targetStart, UTF32 *targetEnd, ConversionFlags flags);

+

+ConversionResult ConvertUTF32toUTF8(

+        const UTF32 **sourceStart, const UTF32 *sourceEnd,

+        UTF8 **targetStart, UTF8 *targetEnd, ConversionFlags flags);

+

+ConversionResult ConvertUTF16toUTF32(

+        const UTF16 **sourceStart, const UTF16 *sourceEnd,

+        UTF32 **targetStart, UTF32 *targetEnd, ConversionFlags flags);

+

+ConversionResult ConvertUTF32toUTF16(

+        const UTF32 **sourceStart, const UTF32 *sourceEnd,

+        UTF16 **targetStart, UTF16 *targetEnd, ConversionFlags flags);

+

+Boolean isLegalUTF8Sequence(const UTF8 *source, const UTF8 *sourceEnd);

+

+#ifdef __cplusplus

+}

+#endif

+

+// 获得下一个char的起始地址

+u_int32_t next_char(unsigned char **string);

+

+const unsigned char *utf32toutf8(wchar_t *source, unsigned char *target, size_t size,  int *len);

+

+unsigned char *utf16toutf8(unsigned short *source, unsigned char *target, size_t size,  int *len);

+unsigned short *utf8toutf16(unsigned char *source, unsigned short *target, size_t size,  int *len);

+

+int utf8len(unsigned char *string);

+int is_acsii(unsigned char *string);

+size_t utf8_get_size(unsigned char *source, size_t num);

+

+#endif //SMS_UTF_H