/* kst32b.c */
/* Programed by AZO */
/* This code is free. At Your Own Risk. */

#include "kst32b.h"
#include <string.h>
#include <iconv.h>

int ConvertCode(const unsigned int i_uiJIS, unsigned int* o_puiUTF16, unsigned int* o_puiUTF8) {
	int iRet = 0;

	*o_puiUTF8 = 0;
	*o_puiUTF16 = 0;
	
	if(i_uiJIS >= 0x00 && i_uiJIS <= 0x7F) {
		*o_puiUTF16 = i_uiJIS;
		*o_puiUTF8  = i_uiJIS;
		iRet = 1;
	} else if(i_uiJIS >= 0x1A20 && i_uiJIS <= 0x1A7F) {
		iRet = 1;
		switch(i_uiJIS) {
			case 0x1A21:
				*o_puiUTF8  = 0xA1C2;
				*o_puiUTF16 = 0xA1;
				break;
			case 0x1A22:
				*o_puiUTF8  = 0xA2C2;
				*o_puiUTF16 = 0xA2;
				break;
			case 0x1A23:
				*o_puiUTF8  = 0xA3C2;
				*o_puiUTF16 = 0xA3;
				break;
			case 0x1A24:
				*o_puiUTF8  = 0xAC82E2;
				*o_puiUTF16 = 0x80;
				break;
			case 0x1A26:
				*o_puiUTF8  = 0xA0C5;
				*o_puiUTF16 = 0x8A;
				break;
			case 0x1A34:
				*o_puiUTF8  = 0xA1C5;
				*o_puiUTF16 = 0x9A;
				break;
			case 0x1A35:
				*o_puiUTF8  = 0xB5C2;
				*o_puiUTF16 = 0xB5;
				break;
			case 0x1A36:
				*o_puiUTF8  = 0xB6C2;
				*o_puiUTF16 = 0xB6;
				break;
			case 0x1A38:
				*o_puiUTF8  = 0xBEC5;
				*o_puiUTF16 = 0x9E;
				break;
			case 0x1A3C:
				*o_puiUTF8  = 0x92C5;
				*o_puiUTF16 = 0x8C;
				break;
			case 0x1A3D:
				*o_puiUTF8  = 0xB6C9;
				*o_puiUTF16 = 0x9C;
				break;
			case 0x1A3E:
				*o_puiUTF8  = 0xB8C5;
				*o_puiUTF16 = 0x9F;
				break;
			case 0x1A3F:
				*o_puiUTF8  = 0xBFC2;
				*o_puiUTF16 = 0xBF;
				break;
			case 0x1A40:
				*o_puiUTF8  = 0x80C3;
				*o_puiUTF16 = 0xC0;
				break;
			case 0x1A41:
				*o_puiUTF8  = 0x81C3;
				*o_puiUTF16 = 0xC1;
				break;
			case 0x1A42:
				*o_puiUTF8  = 0x82C3;
				*o_puiUTF16 = 0xC2;
				break;
			case 0x1A43:
				*o_puiUTF8  = 0x83C3;
				*o_puiUTF16 = 0xC3;
				break;
			case 0x1A44:
				*o_puiUTF8  = 0x84C3;
				*o_puiUTF16 = 0xC4;
				break;
			case 0x1A45:
				*o_puiUTF8  = 0x85C3;
				*o_puiUTF16 = 0xC5;
				break;
			case 0x1A46:
				*o_puiUTF8  = 0x86C3;
				*o_puiUTF16 = 0xC6;
				break;
			case 0x1A47:
				*o_puiUTF8  = 0x87C3;
				*o_puiUTF16 = 0xC7;
				break;
			case 0x1A48:
				*o_puiUTF8  = 0x88C3;
				*o_puiUTF16 = 0xC8;
				break;
			case 0x1A49:
				*o_puiUTF8  = 0x89C3;
				*o_puiUTF16 = 0xC9;
				break;
			case 0x1A4A:
				*o_puiUTF8  = 0x8AC3;
				*o_puiUTF16 = 0xCA;
				break;
			case 0x1A4B:
				*o_puiUTF8  = 0x8BC3;
				*o_puiUTF16 = 0xCB;
				break;
			case 0x1A4C:
				*o_puiUTF8  = 0x8CC3;
				*o_puiUTF16 = 0xCC;
				break;
			case 0x1A4D:
				*o_puiUTF8  = 0x8DC3;
				*o_puiUTF16 = 0xCD;
				break;
			case 0x1A4E:
				*o_puiUTF8  = 0x8EC3;
				*o_puiUTF16 = 0xCE;
				break;
			case 0x1A4F:
				*o_puiUTF8  = 0x8FC3;
				*o_puiUTF16 = 0xCF;
				break;
			case 0x1A50:
				*o_puiUTF8  = 0x90C3;
				*o_puiUTF16 = 0xD0;
				break;
			case 0x1A51:
				*o_puiUTF8  = 0x91C3;
				*o_puiUTF16 = 0xD1;
				break;
			case 0x1A52:
				*o_puiUTF8  = 0x92C3;
				*o_puiUTF16 = 0xD2;
				break;
			case 0x1A53:
				*o_puiUTF8  = 0x93C3;
				*o_puiUTF16 = 0xD3;
				break;
			case 0x1A54:
				*o_puiUTF8  = 0x94C3;
				*o_puiUTF16 = 0xD4;
				break;
			case 0x1A55:
				*o_puiUTF8  = 0x95C3;
				*o_puiUTF16 = 0xD5;
				break;
			case 0x1A56:
				*o_puiUTF8  = 0x96C3;
				*o_puiUTF16 = 0xD6;
				break;
			case 0x1A57:
				*o_puiUTF8  = 0x97C3;
				*o_puiUTF16 = 0xD7;
				break;
			case 0x1A58:
				*o_puiUTF8  = 0x98C3;
				*o_puiUTF16 = 0xD8;
				break;
			case 0x1A59:
				*o_puiUTF8  = 0x99C3;
				*o_puiUTF16 = 0xD9;
				break;
			case 0x1A5A:
				*o_puiUTF8  = 0x9AC3;
				*o_puiUTF16 = 0xDA;
				break;
			case 0x1A5B:
				*o_puiUTF8  = 0x9BC3;
				*o_puiUTF16 = 0xDB;
				break;
			case 0x1A5C:
				*o_puiUTF8  = 0x9CC3;
				*o_puiUTF16 = 0xDC;
				break;
			case 0x1A5D:
				*o_puiUTF8  = 0x9DC3;
				*o_puiUTF16 = 0xDD;
				break;
			case 0x1A5E:
				*o_puiUTF8  = 0x9EC3;
				*o_puiUTF16 = 0xDE;
				break;
			case 0x1A5F:
				*o_puiUTF8  = 0x9FC3;
				*o_puiUTF16 = 0xDF;
				break;
			case 0x1A60:
				*o_puiUTF8  = 0xA0C3;
				*o_puiUTF16 = 0xE0;
				break;
			case 0x1A61:
				*o_puiUTF8  = 0xA1C3;
				*o_puiUTF16 = 0xE1;
				break;
			case 0x1A62:
				*o_puiUTF8  = 0xA2C3;
				*o_puiUTF16 = 0xE2;
				break;
			case 0x1A63:
				*o_puiUTF8  = 0xA3C3;
				*o_puiUTF16 = 0xE3;
				break;
			case 0x1A64:
				*o_puiUTF8  = 0xA4C3;
				*o_puiUTF16 = 0xE4;
				break;
			case 0x1A65:
				*o_puiUTF8  = 0xA5C3;
				*o_puiUTF16 = 0xE5;
				break;
			case 0x1A66:
				*o_puiUTF8  = 0xA6C3;
				*o_puiUTF16 = 0xE6;
				break;
			case 0x1A67:
				*o_puiUTF8  = 0xA7C3;
				*o_puiUTF16 = 0xE7;
				break;
			case 0x1A68:
				*o_puiUTF8  = 0xA8C3;
				*o_puiUTF16 = 0xE8;
				break;
			case 0x1A69:
				*o_puiUTF8  = 0xA9C3;
				*o_puiUTF16 = 0xE9;
				break;
			case 0x1A6A:
				*o_puiUTF8  = 0xAAC3;
				*o_puiUTF16 = 0xEA;
				break;
			case 0x1A6B:
				*o_puiUTF8  = 0xABC3;
				*o_puiUTF16 = 0xEB;
				break;
			case 0x1A6C:
				*o_puiUTF8  = 0xACC3;
				*o_puiUTF16 = 0xEC;
				break;
			case 0x1A6D:
				*o_puiUTF8  = 0xADC3;
				*o_puiUTF16 = 0xED;
				break;
			case 0x1A6E:
				*o_puiUTF8  = 0xAEC3;
				*o_puiUTF16 = 0xEE;
				break;
			case 0x1A6F:
				*o_puiUTF8  = 0xAFC3;
				*o_puiUTF16 = 0xEF;
				break;
			case 0x1A70:
				*o_puiUTF8  = 0xB0C3;
				*o_puiUTF16 = 0xF0;
				break;
			case 0x1A71:
				*o_puiUTF8  = 0xB1C3;
				*o_puiUTF16 = 0xF1;
				break;
			case 0x1A72:
				*o_puiUTF8  = 0xB2C3;
				*o_puiUTF16 = 0xF2;
				break;
			case 0x1A73:
				*o_puiUTF8  = 0xB3C3;
				*o_puiUTF16 = 0xF3;
				break;
			case 0x1A74:
				*o_puiUTF8  = 0xB4C3;
				*o_puiUTF16 = 0xF4;
				break;
			case 0x1A75:
				*o_puiUTF8  = 0xB5C3;
				*o_puiUTF16 = 0xF5;
				break;
			case 0x1A76:
				*o_puiUTF8  = 0xB6C3;
				*o_puiUTF16 = 0xF6;
				break;
			case 0x1A77:
				*o_puiUTF8  = 0xB7C3;
				*o_puiUTF16 = 0xF7;
				break;
			case 0x1A78:
				*o_puiUTF8  = 0xB8C3;
				*o_puiUTF16 = 0xF8;
				break;
			case 0x1A79:
				*o_puiUTF8  = 0xB9C3;
				*o_puiUTF16 = 0xF9;
				break;
			case 0x1A7A:
				*o_puiUTF8  = 0xBAC3;
				*o_puiUTF16 = 0xFA;
				break;
			case 0x1A7B:
				*o_puiUTF8  = 0xBBC3;
				*o_puiUTF16 = 0xFB;
				break;
			case 0x1A7C:
				*o_puiUTF8  = 0xBCC3;
				*o_puiUTF16 = 0xFC;
				break;
			case 0x1A7D:
				*o_puiUTF8  = 0xBDC3;
				*o_puiUTF16 = 0xFD;
				break;
			case 0x1A7E:
				*o_puiUTF8  = 0xBEC3;
				*o_puiUTF16 = 0xFE;
				break;
			case 0x1A7F:
				*o_puiUTF8  = 0xBFC3;
				*o_puiUTF16 = 0xFF;
				break;
			default:
				iRet = 0;
				break;
		}
	} else {
		char src[16], dest1[16], dest2[16];
		char* psrc1;
		char* psrc2;
		char* pdest1;
		char* pdest2;
		size_t bufsizes1;
		size_t bufsizes2;
		size_t bufsized1;
		size_t bufsized2;
		size_t unicode16size, unicode8size;
		unsigned int uiCount;
		iconv_t ic1, ic2;

		iRet = 1;

		memset(src, 0, 16);
		memset(dest1, 0, 16);
		memset(dest2, 0, 16);
		psrc1 = src;
		psrc2 = src;
		pdest1 = dest1;
		pdest2 = dest2;
		bufsized1 = 16;
		bufsized2 = 16;

		if(i_uiJIS < 0x100) {
			ic1 = iconv_open("UTF-16", "SHIFT_JIS");
			ic2 = iconv_open("UTF-8", "SHIFT_JIS");
			src[0] = i_uiJIS;
			bufsizes1 = 1;
			bufsizes2 = 1;
		} else {
			ic1 = iconv_open("UTF-16", "ISO-2022-JP-3");
			ic2 = iconv_open("UTF-8", "ISO-2022-JP-3");
			src[0] = 0x1B;
			src[1] = 0x24;
			src[2] = 0x42;
			src[3] = (i_uiJIS >> 8) & 0xFF;
			src[4] =  i_uiJIS       & 0xFF;
			bufsizes1 = 5;
			bufsizes2 = 5;
		}
		iconv(ic1, &psrc1, &bufsizes1, &pdest1, &bufsized1);
		iconv(ic2, &psrc2, &bufsizes2, &pdest2, &bufsized2);
		iconv_close(ic1);
		iconv_close(ic2);

		if(bufsized1 != 16) {
			unicode16size = 14 - bufsized1;
			for(uiCount = 0; uiCount < unicode16size; uiCount++) {
				((char*)(o_puiUTF16))[uiCount] = dest1[2 + uiCount] & 0xFF;
			}
			unicode8size = 16 - bufsized2;
			for(uiCount = 0; uiCount < unicode8size; uiCount++) {
				((char*)(o_puiUTF8))[uiCount] = dest2[uiCount] & 0xFF;
			}
		} else {
			switch(i_uiJIS) {
				case 0x2230:
					*o_puiUTF8  = 0xB99FE2;
					*o_puiUTF16 = 0x27F9;
					break;
				case 0x2231:
					*o_puiUTF8  = 0xB89FE2;
					*o_puiUTF16 = 0x27F8;
					break;
				case 0x2235:
					*o_puiUTF8  = 0xB69FE2;
					*o_puiUTF16 = 0x27F6;
					break;
				case 0x2236:
					*o_puiUTF8  = 0xB59FE2;
					*o_puiUTF16 = 0x27F5;
					break;
				case 0x227A:
					*o_puiUTF8  = 0xAE99E2;
					*o_puiUTF16 = 0x266E;
					break;
				case 0x232B:
					*o_puiUTF8  = 0xAE99E2;
					*o_puiUTF16 = 0x216A;
					break;
				case 0x232C:
					*o_puiUTF8  = 0xAA85E2;
					*o_puiUTF16 = 0x216B;
					break;
				case 0x233A:
					*o_puiUTF8  = 0xBDC2;
					*o_puiUTF16 = 0xBD;
					break;
				case 0x233B:
					*o_puiUTF8  = 0x9385E2;
					*o_puiUTF16 = 0x2153;
					break;
				case 0x233C:
					*o_puiUTF8  = 0xBCC2;
					*o_puiUTF16 = 0xBC;
					break;
				case 0x233D:
					*o_puiUTF8  = 0x9485E2;
					*o_puiUTF16 = 0x2154;
					break;
				case 0x233E:
					*o_puiUTF8  = 0xBEC2;
					*o_puiUTF16 = 0xBE;
					break;
				case 0x235B:
					*o_puiUTF8  = 0x9388E2;
					*o_puiUTF16 = 0x2213;
					break;
				case 0x2661:
					*o_puiUTF8  = 0xB692E2;
					*o_puiUTF16 = 0x24D0;
					break;
				case 0x2662:
					*o_puiUTF8  = 0xB792E2;
					*o_puiUTF16 = 0x24D1;
					break;
				case 0x2663:
					*o_puiUTF8  = 0xB892E2;
					*o_puiUTF16 = 0x24D2;
					break;
				case 0x2664:
					*o_puiUTF8  = 0xB992E2;
					*o_puiUTF16 = 0x24D3;
					break;
				case 0x2665:
					*o_puiUTF8  = 0xBA92E2;
					*o_puiUTF16 = 0x24D4;
					break;
				case 0x2666:
					*o_puiUTF8  = 0xBB92E2;
					*o_puiUTF16 = 0x24D5;
					break;
				case 0x2667:
					*o_puiUTF8  = 0xBC92E2;
					*o_puiUTF16 = 0x24D6;
					break;
				case 0x2668:
					*o_puiUTF8  = 0xBD92E2;
					*o_puiUTF16 = 0x24D7;
					break;
				case 0x2669:
					*o_puiUTF8  = 0xBE92E2;
					*o_puiUTF16 = 0x24D8;
					break;
				case 0x266A:
					*o_puiUTF8  = 0xBF92E2;
					*o_puiUTF16 = 0x24D9;
					break;
				case 0x266B:
					*o_puiUTF8  = 0x8093E2;
					*o_puiUTF16 = 0x24DA;
					break;
				case 0x266C:
					*o_puiUTF8  = 0x8193E2;
					*o_puiUTF16 = 0x24DB;
					break;
				case 0x266D:
					*o_puiUTF8  = 0x8293E2;
					*o_puiUTF16 = 0x24DC;
					break;
				case 0x266E:
					*o_puiUTF8  = 0x8393E2;
					*o_puiUTF16 = 0x24DD;
					break;
				case 0x266F:
					*o_puiUTF8  = 0x8493E2;
					*o_puiUTF16 = 0x24DE;
					break;
				case 0x2670:
					*o_puiUTF8  = 0x8593E2;
					*o_puiUTF16 = 0x24DF;
					break;
				case 0x2671:
					*o_puiUTF8  = 0x8693E2;
					*o_puiUTF16 = 0x24E0;
					break;
				case 0x2672:
					*o_puiUTF8  = 0x8793E2;
					*o_puiUTF16 = 0x24E1;
					break;
				case 0x2673:
					*o_puiUTF8  = 0x8893E2;
					*o_puiUTF16 = 0x24E2;
					break;
				case 0x2674:
					*o_puiUTF8  = 0x8993E2;
					*o_puiUTF16 = 0x24E3;
					break;
				case 0x2675:
					*o_puiUTF8  = 0x8A93E2;
					*o_puiUTF16 = 0x24E4;
					break;
				case 0x2676:
					*o_puiUTF8  = 0x8B93E2;
					*o_puiUTF16 = 0x24E5;
					break;
				case 0x2677:
					*o_puiUTF8  = 0x8C93E2;
					*o_puiUTF16 = 0x24E6;
					break;
				case 0x2678:
					*o_puiUTF8  = 0x8D93E2;
					*o_puiUTF16 = 0x24E7;
					break;
				case 0x2679:
					*o_puiUTF8  = 0x8E93E2;
					*o_puiUTF16 = 0x24E8;
					break;
				case 0x267A:
					*o_puiUTF8  = 0x8F93E2;
					*o_puiUTF16 = 0x24E9;
					break;
				case 0x2772:
					*o_puiUTF8  = 0xB085E2;
					*o_puiUTF16 = 0x2170;
					break;
				case 0x2773:
					*o_puiUTF8  = 0xB185E2;
					*o_puiUTF16 = 0x2171;
					break;
				case 0x2774:
					*o_puiUTF8  = 0xB285E2;
					*o_puiUTF16 = 0x2172;
					break;
				case 0x2775:
					*o_puiUTF8  = 0xB385E2;
					*o_puiUTF16 = 0x2173;
					break;
				case 0x2776:
					*o_puiUTF8  = 0xB485E2;
					*o_puiUTF16 = 0x2174;
					break;
				case 0x2777:
					*o_puiUTF8  = 0xB585E2;
					*o_puiUTF16 = 0x2175;
					break;
				case 0x2778:
					*o_puiUTF8  = 0xB685E2;
					*o_puiUTF16 = 0x2176;
					break;
				case 0x2779:
					*o_puiUTF8  = 0xB785E2;
					*o_puiUTF16 = 0x2177;
					break;
				case 0x277A:
					*o_puiUTF8  = 0xB885E2;
					*o_puiUTF16 = 0x2178;
					break;
				case 0x277B:
					*o_puiUTF8  = 0xB985E2;
					*o_puiUTF16 = 0x2179;
					break;
				case 0x2847:
					*o_puiUTF8  = 0xA6C2;
					*o_puiUTF16 = 0xA6;
					break;
				case 0x2850:
					*o_puiUTF8  = 0x9D81E2;
					*o_puiUTF16 = 0x205D;
					break;
				case 0x2851:
					*o_puiUTF8  = 0x9A81E2;
					*o_puiUTF16 = 0x205A;
					break;
				case 0x2852:
					*o_puiUTF8  = 0x9C8FE2;
					*o_puiUTF16 = 0x23DC;
					break;
				case 0x2853:
					*o_puiUTF8  = 0x9D8FE2;
					*o_puiUTF16 = 0x23DD;
					break;
				case 0x2854:
					*o_puiUTF8  = 0xA08FE2;
					*o_puiUTF16 = 0x23E0;
					break;
				case 0x2855:
					*o_puiUTF8  = 0xA18FE2;
					*o_puiUTF16 = 0x23E1;
					break;
				case 0x2858:
					*o_puiUTF8  = 0x9E8FE2;
					*o_puiUTF16 = 0x23DE;
					break;
				case 0x2859:
					*o_puiUTF8  = 0x9F8FE2;
					*o_puiUTF16 = 0x23DF;
					break;
				case 0x2924:
					*o_puiUTF8  = 0xA4C2;
					*o_puiUTF16 = 0xA4;
					break;
				case 0x2926:
					*o_puiUTF8  = 0xA9C2;
					*o_puiUTF16 = 0xA9;
					break;
				case 0x292A:
					*o_puiUTF8  = 0xAEC2;
					*o_puiUTF16 = 0xAE;
					break;
				case 0x292C:
					*o_puiUTF8  = 0xB2C2;
					*o_puiUTF16 = 0xB2;
					break;
				case 0x292D:
					*o_puiUTF8  = 0xB3C2;
					*o_puiUTF16 = 0xB3;
					break;
				case 0x2930:
					*o_puiUTF8  = 0xB9C2;
					*o_puiUTF16 = 0xB9;
					break;
				case 0x2931:
					*o_puiUTF8  = 0xBAC2;
					*o_puiUTF16 = 0xBA;
					break;
				case 0x2D21:
					*o_puiUTF8  = 0xA091E2;
					*o_puiUTF16 = 0x2460;
					break;
				case 0x2D22:
					*o_puiUTF8  = 0xA191E2;
					*o_puiUTF16 = 0x2461;
					break;
				case 0x2D23:
					*o_puiUTF8  = 0xA291E2;
					*o_puiUTF16 = 0x2462;
					break;
				case 0x2D24:
					*o_puiUTF8  = 0xA391E2;
					*o_puiUTF16 = 0x2463;
					break;
				case 0x2D25:
					*o_puiUTF8  = 0xA491E2;
					*o_puiUTF16 = 0x2464;
					break;
				case 0x2D26:
					*o_puiUTF8  = 0xA591E2;
					*o_puiUTF16 = 0x2465;
					break;
				case 0x2D27:
					*o_puiUTF8  = 0xA691E2;
					*o_puiUTF16 = 0x2466;
					break;
				case 0x2D28:
					*o_puiUTF8  = 0xA791E2;
					*o_puiUTF16 = 0x2467;
					break;
				case 0x2D29:
					*o_puiUTF8  = 0xA891E2;
					*o_puiUTF16 = 0x2468;
					break;
				case 0x2D2A:
					*o_puiUTF8  = 0xA991E2;
					*o_puiUTF16 = 0x2469;
					break;
				case 0x2D2B:
					*o_puiUTF8  = 0xAA91E2;
					*o_puiUTF16 = 0x246A;
					break;
				case 0x2D2C:
					*o_puiUTF8  = 0xAB91E2;
					*o_puiUTF16 = 0x246B;
					break;
				case 0x2D2D:
					*o_puiUTF8  = 0xAC91E2;
					*o_puiUTF16 = 0x246C;
					break;
				case 0x2D2E:
					*o_puiUTF8  = 0xAD91E2;
					*o_puiUTF16 = 0x246D;
					break;
				case 0x2D2F:
					*o_puiUTF8  = 0xAE91E2;
					*o_puiUTF16 = 0x246E;
					break;
				case 0x2D30:
					*o_puiUTF8  = 0xAF91E2;
					*o_puiUTF16 = 0x246F;
					break;
				case 0x2D31:
					*o_puiUTF8  = 0xB091E2;
					*o_puiUTF16 = 0x2470;
					break;
				case 0x2D32:
					*o_puiUTF8  = 0xB191E2;
					*o_puiUTF16 = 0x2471;
					break;
				case 0x2D33:
					*o_puiUTF8  = 0xB291E2;
					*o_puiUTF16 = 0x2472;
					break;
				case 0x2D34:
					*o_puiUTF8  = 0xB391E2;
					*o_puiUTF16 = 0x2473;
					break;
				case 0x2D35:
					*o_puiUTF8  = 0xB391E2;
					*o_puiUTF16 = 0x2160;
					break;
				case 0x2D36:
					*o_puiUTF8  = 0xA085E2;
					*o_puiUTF16 = 0x2161;
					break;
				case 0x2D37:
					*o_puiUTF8  = 0xA185E2;
					*o_puiUTF16 = 0x2162;
					break;
				case 0x2D38:
					*o_puiUTF8  = 0xA285E2;
					*o_puiUTF16 = 0x2163;
					break;
				case 0x2D39:
					*o_puiUTF8  = 0xA385E2;
					*o_puiUTF16 = 0x2164;
					break;
				case 0x2D3A:
					*o_puiUTF8  = 0xA485E2;
					*o_puiUTF16 = 0x2165;
					break;
				case 0x2D3B:
					*o_puiUTF8  = 0xA585E2;
					*o_puiUTF16 = 0x2166;
					break;
				case 0x2D3C:
					*o_puiUTF8  = 0xA685E2;
					*o_puiUTF16 = 0x2167;
					break;
				case 0x2D3D:
					*o_puiUTF8  = 0xA785E2;
					*o_puiUTF16 = 0x2168;
					break;
				case 0x2D3E:
					*o_puiUTF8  = 0xA885E2;
					*o_puiUTF16 = 0x2169;
					break;
				case 0x2D40:
					*o_puiUTF8  = 0xA085E2;
					*o_puiUTF16 = 0x3349;
					break;
				case 0x2D41:
					*o_puiUTF8  = 0x898DE3;
					*o_puiUTF16 = 0x3314;
					break;
				case 0x2D42:
					*o_puiUTF8  = 0xA28CE3;
					*o_puiUTF16 = 0x3322;
					break;
				case 0x2D43:
					*o_puiUTF8  = 0x8D8DE3;
					*o_puiUTF16 = 0x334D;
					break;
				case 0x2D44:
					*o_puiUTF8  = 0x988CE3;
					*o_puiUTF16 = 0x3318;
					break;
				case 0x2D45:
					*o_puiUTF8  = 0xA78CE3;
					*o_puiUTF16 = 0x3327;
					break;
				case 0x2D46:
					*o_puiUTF8  = 0x838CE3;
					*o_puiUTF16 = 0x3303;
					break;
				case 0x2D47:
					*o_puiUTF8  = 0xB68CE3;
					*o_puiUTF16 = 0x3336;
					break;
				case 0x2D48:
					*o_puiUTF8  = 0x918DE3;
					*o_puiUTF16 = 0x3351;
					break;
				case 0x2D49:
					*o_puiUTF8  = 0x978DE3;
					*o_puiUTF16 = 0x3357;
					break;
				case 0x2D4A:
					*o_puiUTF8  = 0x8D8CE3;
					*o_puiUTF16 = 0x330D;
					break;
				case 0x2D4B:
					*o_puiUTF8  = 0xA68CE3;
					*o_puiUTF16 = 0x3326;
					break;
				case 0x2D4C:
					*o_puiUTF8  = 0xA38CE3;
					*o_puiUTF16 = 0x3323;
					break;
				case 0x2D4D:
					*o_puiUTF8  = 0xAB8CE3;
					*o_puiUTF16 = 0x332B;
					break;
				case 0x2D4E:
					*o_puiUTF8  = 0x8A8DE3;
					*o_puiUTF16 = 0x334A;
					break;
				case 0x2D4F:
					*o_puiUTF8  = 0xBB8CE3;
					*o_puiUTF16 = 0x333B;
					break;
				case 0x2D50:
					*o_puiUTF8  = 0x9C8EE3;
					*o_puiUTF16 = 0x339C;
					break;
				case 0x2D51:
					*o_puiUTF8  = 0x9D8EE3;
					*o_puiUTF16 = 0x339D;
					break;
				case 0x2D52:
					*o_puiUTF8  = 0x9E8EE3;
					*o_puiUTF16 = 0x339E;
					break;
				case 0x2D53:
					*o_puiUTF8  = 0x8E8EE3;
					*o_puiUTF16 = 0x338E;
					break;
				case 0x2D54:
					*o_puiUTF8  = 0x8F8EE3;
					*o_puiUTF16 = 0x338F;
					break;
				case 0x2D55:
					*o_puiUTF8  = 0x848FE3;
					*o_puiUTF16 = 0x33C4;
					break;
				case 0x2D56:
					*o_puiUTF8  = 0xA18EE3;
					*o_puiUTF16 = 0x33A1;
					break;
				case 0x2D5F:
					*o_puiUTF8  = 0xBB8DE3;
					*o_puiUTF16 = 0x337B;
					break;
				case 0x2D60:
					*o_puiUTF8  = 0x9D80E3;
					*o_puiUTF16 = 0x301D;
					break;
				case 0x2D61:
					*o_puiUTF8  = 0x9F80E3;
					*o_puiUTF16 = 0x301F;
					break;
				case 0x2D62:
					*o_puiUTF8  = 0x9684E2;
					*o_puiUTF16 = 0x2116;
					break;
				case 0x2D63:
					*o_puiUTF8  = 0x8D8FE3;
					*o_puiUTF16 = 0x33CD;
					break;
				case 0x2D64:
					*o_puiUTF8  = 0xA184E2;
					*o_puiUTF16 = 0x2121;
					break;
				case 0x2D65:
					*o_puiUTF8  = 0xA48AE3;
					*o_puiUTF16 = 0x32A4;
					break;
				case 0x2D66:
					*o_puiUTF8  = 0xA58AE3;
					*o_puiUTF16 = 0x32A5;
					break;
				case 0x2D67:
					*o_puiUTF8  = 0xA68AE3;
					*o_puiUTF16 = 0x32A6;
					break;
				case 0x2D68:
					*o_puiUTF8  = 0xA78AE3;
					*o_puiUTF16 = 0x32A7;
					break;
				case 0x2D69:
					*o_puiUTF8  = 0xA88AE3;
					*o_puiUTF16 = 0x32A8;
					break;
				case 0x2D6A:
					*o_puiUTF8  = 0xB188E3;
					*o_puiUTF16 = 0x3231;
					break;
				case 0x2D6B:
					*o_puiUTF8  = 0xB288E3;
					*o_puiUTF16 = 0x3232;
					break;
				case 0x2D6C:
					*o_puiUTF8  = 0xB988E3;
					*o_puiUTF16 = 0x3239;
					break;
				case 0x2D6D:
					*o_puiUTF8  = 0xBE8DE3;
					*o_puiUTF16 = 0x337E;
					break;
				case 0x2D6E:
					*o_puiUTF8  = 0xBD8DE3;
					*o_puiUTF16 = 0x337D;
					break;
				case 0x2D6F:
					*o_puiUTF8  = 0xBC8DE3;
					*o_puiUTF16 = 0x337C;
					break;
				case 0x4F58:
					*o_puiUTF8  = 0xBA88E3;
					*o_puiUTF16 = 0x323A;
					break;
				case 0x4F5B:
					*o_puiUTF8  = 0x9E8AE3;
					*o_puiUTF16 = 0x329E;
					break;
				case 0x4F5C:
					*o_puiUTF8  = 0x9D8AE3;
					*o_puiUTF16 = 0x329D;
					break;
				case 0x4F5D:
					*o_puiUTF8  = 0x9486E2;
					*o_puiUTF16 = 0x2194;
					break;
				case 0x4F5E:
					*o_puiUTF8  = 0x9786E2;
					*o_puiUTF16 = 0x2197;
					break;
				case 0x4F5F:
					*o_puiUTF8  = 0x9986E2;
					*o_puiUTF16 = 0x2199;
					break;
				case 0x4F60:
					*o_puiUTF8  = 0x9686E2;
					*o_puiUTF16 = 0x2196;
					break;
				case 0x4F61:
					*o_puiUTF8  = 0x9886E2;
					*o_puiUTF16 = 0x2198;
					break;
				case 0x4F66:
					*o_puiUTF8  = 0xA58EE3;
					*o_puiUTF16 = 0x33A5;
					break;
				case 0x4F68:
					*o_puiUTF8  = 0x9F8AE3;
					*o_puiUTF16 = 0x329F;
					break;
				case 0x4F69:
					*o_puiUTF8  = 0x9A8AE3;
					*o_puiUTF16 = 0x329A;
					break;
				case 0x4F6A:
					*o_puiUTF8  = 0x9B8AE3;
					*o_puiUTF16 = 0x329B;
					break;
				case 0x4F6B:
					*o_puiUTF8  = 0xA38AE3;
					*o_puiUTF16 = 0x32A3;
					break;
				case 0x4F71:
					*o_puiUTF8  = 0xBF88E3;
					*o_puiUTF16 = 0x323F;
					break;
				case 0x4F75:
					*o_puiUTF8  = 0x9D98E2;
					*o_puiUTF16 = 0x261D;
					break;
				case 0x4F76:
					*o_puiUTF8  = 0x9F98E2;
					*o_puiUTF16 = 0x261F;
					break;
				case 0x4F77:
					*o_puiUTF8  = 0xA499E2;
					*o_puiUTF16 = 0x2664;
					break;
				case 0x4F78:
					*o_puiUTF8  = 0xA199E2;
					*o_puiUTF16 = 0x2661;
					break;
				case 0x4F79:
					*o_puiUTF8  = 0xA299E2;
					*o_puiUTF16 = 0x2662;
					break;
				case 0x4F7A:
					*o_puiUTF8  = 0xA799E2;
					*o_puiUTF16 = 0x2667;
					break;
				default:
					iRet = 0;
					break;
			}
		}
	}

	return iRet;
}
