⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unicode.c

📁 大名鼎鼎的远程登录软件putty的Symbian版源码
💻 C
📖 第 1 页 / 共 3 页
字号:
	0x79, 0x2D, 0x0233}, {	0x44, 0x2C, 0x1E10}, {	0x64, 0x2C, 0x1E11}, {	0x47, 0x2D, 0x1E20}, {	0x67, 0x2D, 0x1E21}, {	0x48, 0x22, 0x1E26}, {	0x68, 0x22, 0x1E27}, {	0x48, 0x2C, 0x1E28}, {	0x68, 0x2C, 0x1E29}, {	0x4B, 0x27, 0x1E30}, {	0x6B, 0x27, 0x1E31}, {	0x4D, 0x27, 0x1E3E}, {	0x6D, 0x27, 0x1E3F}, {	0x50, 0x27, 0x1E54}, {	0x70, 0x27, 0x1E55}, {	0x56, 0x7E, 0x1E7C}, {	0x76, 0x7E, 0x1E7D}, {	0x57, 0x60, 0x1E80}, {	0x77, 0x60, 0x1E81}, {	0x57, 0x27, 0x1E82}, {	0x77, 0x27, 0x1E83}, {	0x57, 0x22, 0x1E84}, {	0x77, 0x22, 0x1E85}, {	0x58, 0x22, 0x1E8C}, {	0x78, 0x22, 0x1E8D}, {	0x5A, 0x5E, 0x1E90}, {	0x7A, 0x5E, 0x1E91}, {	0x74, 0x22, 0x1E97}, {	0x77, 0x2A, 0x1E98}, {	0x79, 0x2A, 0x1E99}, {	0x45, 0x7E, 0x1EBC}, {	0x65, 0x7E, 0x1EBD}, {	0x59, 0x60, 0x1EF2}, {	0x79, 0x60, 0x1EF3}, {	0x59, 0x7E, 0x1EF8}, {	0x79, 0x7E, 0x1EF9},	    /* Compatible/possibles from UCS */	{	0x49, 0x4A, 0x0132}, {	0x69, 0x6A, 0x0133}, {	0x4C, 0x4A, 0x01C7}, {	0x4C, 0x6A, 0x01C8}, {	0x6C, 0x6A, 0x01C9}, {	0x4E, 0x4A, 0x01CA}, {	0x4E, 0x6A, 0x01CB}, {	0x6E, 0x6A, 0x01CC}, {	0x44, 0x5A, 0x01F1}, {	0x44, 0x7A, 0x01F2}, {	0x64, 0x7A, 0x01F3}, {	0x2E, 0x2E, 0x2025}, {	0x21, 0x21, 0x203C}, {	0x3F, 0x21, 0x2048}, {	0x21, 0x3F, 0x2049}, {	0x52, 0x73, 0x20A8}, {	0x4E, 0x6F, 0x2116}, {	0x53, 0x4D, 0x2120}, {	0x54, 0x4D, 0x2122}, {	0x49, 0x49, 0x2161}, {	0x49, 0x56, 0x2163}, {	0x56, 0x49, 0x2165}, {	0x49, 0x58, 0x2168}, {	0x58, 0x49, 0x216A}, {	0x69, 0x69, 0x2171}, {	0x69, 0x76, 0x2173}, {	0x76, 0x69, 0x2175}, {	0x69, 0x78, 0x2178}, {	0x78, 0x69, 0x217A}, {	0x31, 0x30, 0x2469}, {	0x31, 0x31, 0x246A}, {	0x31, 0x32, 0x246B}, {	0x31, 0x33, 0x246C}, {	0x31, 0x34, 0x246D}, {	0x31, 0x35, 0x246E}, {	0x31, 0x36, 0x246F}, {	0x31, 0x37, 0x2470}, {	0x31, 0x38, 0x2471}, {	0x31, 0x39, 0x2472}, {	0x32, 0x30, 0x2473}, {	0x31, 0x2E, 0x2488}, {	0x32, 0x2E, 0x2489}, {	0x33, 0x2E, 0x248A}, {	0x34, 0x2E, 0x248B}, {	0x35, 0x2E, 0x248C}, {	0x36, 0x2E, 0x248D}, {	0x37, 0x2E, 0x248E}, {	0x38, 0x2E, 0x248F}, {	0x39, 0x2E, 0x2490}, {	0x64, 0x61, 0x3372}, {	0x41, 0x55, 0x3373}, {	0x6F, 0x56, 0x3375}, {	0x70, 0x63, 0x3376}, {	0x70, 0x41, 0x3380}, {	0x6E, 0x41, 0x3381}, {	0x6D, 0x41, 0x3383}, {	0x6B, 0x41, 0x3384}, {	0x4B, 0x42, 0x3385}, {	0x4D, 0x42, 0x3386}, {	0x47, 0x42, 0x3387}, {	0x70, 0x46, 0x338A}, {	0x6E, 0x46, 0x338B}, {	0x6D, 0x67, 0x338E}, {	0x6B, 0x67, 0x338F}, {	0x48, 0x7A, 0x3390}, {	0x66, 0x6D, 0x3399}, {	0x6E, 0x6D, 0x339A}, {	0x6D, 0x6D, 0x339C}, {	0x63, 0x6D, 0x339D}, {	0x6B, 0x6D, 0x339E}, {	0x50, 0x61, 0x33A9}, {	0x70, 0x73, 0x33B0}, {	0x6E, 0x73, 0x33B1}, {	0x6D, 0x73, 0x33B3}, {	0x70, 0x56, 0x33B4}, {	0x6E, 0x56, 0x33B5}, {	0x6D, 0x56, 0x33B7}, {	0x6B, 0x56, 0x33B8}, {	0x4D, 0x56, 0x33B9}, {	0x70, 0x57, 0x33BA}, {	0x6E, 0x57, 0x33BB}, {	0x6D, 0x57, 0x33BD}, {	0x6B, 0x57, 0x33BE}, {	0x4D, 0x57, 0x33BF}, {	0x42, 0x71, 0x33C3}, {	0x63, 0x63, 0x33C4}, {	0x63, 0x64, 0x33C5}, {	0x64, 0x42, 0x33C8}, {	0x47, 0x79, 0x33C9}, {	0x68, 0x61, 0x33CA}, {	0x48, 0x50, 0x33CB}, {	0x69, 0x6E, 0x33CC}, {	0x4B, 0x4B, 0x33CD}, {	0x4B, 0x4D, 0x33CE}, {	0x6B, 0x74, 0x33CF}, {	0x6C, 0x6D, 0x33D0}, {	0x6C, 0x6E, 0x33D1}, {	0x6C, 0x78, 0x33D3}, {	0x6D, 0x62, 0x33D4}, {	0x50, 0x48, 0x33D7}, {	0x50, 0x52, 0x33DA}, {	0x73, 0x72, 0x33DB}, {	0x53, 0x76, 0x33DC}, {	0x57, 0x62, 0x33DD}, {	0x66, 0x66, 0xFB00}, {	0x66, 0x69, 0xFB01}, {	0x66, 0x6C, 0xFB02}, {	0x73, 0x74, 0xFB06}, {	0, 0, 0}    }, *c;    int nc = -1;    for (c = composetbl; c->first; c++) {	if (c->first == first && c->second == second)	    return c->composed;    }    if (recurse == 0) {	nc = check_compose_internal(second, first, 1);	if (nc == -1)	    nc = check_compose_internal(toupper(first), toupper(second), 1);	if (nc == -1)	    nc = check_compose_internal(toupper(second), toupper(first), 1);    }    return nc;}int check_compose(int first, int second){    return check_compose_internal(first, second, 0);}int decode_codepage(char *cp_name){    char *s, *d;    const struct cp_list_item *cpi;    int codepage = -1;    CPINFO cpinfo;    if (!*cp_name) {	/*	 * Here we select a plausible default code page based on	 * the locale the user is in. We wish to select an ISO code	 * page or appropriate local default _rather_ than go with	 * the Win125* series, because it's more important to have	 * CSI and friends enabled by default than the ghastly	 * Windows extra quote characters, and because it's more	 * likely the user is connecting to a remote server that	 * does something Unixy or VMSy and hence standards-	 * compliant than that they're connecting back to a Windows	 * box using horrible nonstandard charsets.	 * 	 * Accordingly, Robert de Bath suggests a method for	 * picking a default character set that runs as follows:	 * first call GetACP to get the system's ANSI code page	 * identifier, and translate as follows:	 * 	 * 1250 -> ISO 8859-2	 * 1251 -> KOI8-U	 * 1252 -> ISO 8859-1	 * 1253 -> ISO 8859-7	 * 1254 -> ISO 8859-9	 * 1255 -> ISO 8859-8	 * 1256 -> ISO 8859-6	 * 1257 -> ISO 8859-13 (changed from 8859-4 on advice of a Lithuanian)	 * 	 * and for anything else, choose direct-to-font.	 */	int cp = GetACP();	switch (cp) {	  case 1250: cp_name = "ISO-8859-2"; break;	  case 1251: cp_name = "KOI8-U"; break;	  case 1252: cp_name = "ISO-8859-1"; break;	  case 1253: cp_name = "ISO-8859-7"; break;	  case 1254: cp_name = "ISO-8859-9"; break;	  case 1255: cp_name = "ISO-8859-8"; break;	  case 1256: cp_name = "ISO-8859-6"; break;	  case 1257: cp_name = "ISO-8859-13"; break;	    /* default: leave it blank, which will select -1, direct->font */	}    }    if (cp_name && *cp_name)	for (cpi = cp_list; cpi->name; cpi++) {	    s = cp_name;	    d = cpi->name;	    for (;;) {		while (*s && !isalnum(*s) && *s != ':')		    s++;		while (*d && !isalnum(*d) && *d != ':')		    d++;		if (*s == 0) {		    codepage = cpi->codepage;		    if (codepage == CP_UTF8)			goto break_break;		    if (codepage == -1)			return codepage;		    if (codepage == 0) {			codepage = 65536 + (cpi - cp_list);			goto break_break;		    }		    if (GetCPInfo(codepage, &cpinfo) != 0)			goto break_break;		}		if (tolower(*s++) != tolower(*d++))		    break;	    }	}    if (cp_name && *cp_name) {	d = cp_name;	if (tolower(d[0]) == 'c' && tolower(d[1]) == 'p')	    d += 2;	if (tolower(d[0]) == 'i' && tolower(d[1]) == 'b'	    && tolower(d[1]) == 'm')	    d += 3;	for (s = d; *s >= '0' && *s <= '9'; s++);	if (*s == 0 && s != d)	    codepage = atoi(d);	       /* CP999 or IBM999 */	if (codepage == CP_ACP)	    codepage = GetACP();	if (codepage == CP_OEMCP)	    codepage = GetOEMCP();	if (codepage > 65535)	    codepage = -2;    }  break_break:;    if (codepage != -1) {	if (codepage != CP_UTF8 && codepage < 65536) {	    if (GetCPInfo(codepage, &cpinfo) == 0) {		codepage = -2;	    } else if (cpinfo.MaxCharSize > 1)		codepage = -3;	}    }    if (codepage == -1 && *cp_name)	codepage = -2;    return codepage;}const char *cp_name(int codepage){    const struct cp_list_item *cpi, *cpno;    static char buf[32];    if (codepage == -1) {	sprintf(buf, "Use font encoding");	return buf;    }    if (codepage > 0 && codepage < 65536)	sprintf(buf, "CP%03d", codepage);    else	*buf = 0;    if (codepage >= 65536) {	cpno = 0;	for (cpi = cp_list; cpi->name; cpi++)	    if (cpi == cp_list + (codepage - 65536)) {		cpno = cpi;		break;	    }	if (cpno)	    for (cpi = cp_list; cpi->name; cpi++) {		if (cpno->cp_table == cpi->cp_table)		    return cpi->name;	    }    } else {	for (cpi = cp_list; cpi->name; cpi++) {	    if (codepage == cpi->codepage)		return cpi->name;	}    }    return buf;}/* * Return the nth code page in the list, for use in the GUI * configurer. */const char *cp_enumerate(int index){    if (index < 0 || index >= lenof(cp_list))	return NULL;    return cp_list[index].name;}void get_unitab(int codepage, wchar_t * unitab, int ftype){    char tbuf[4];    int i, max = 256, flg = MB_ERR_INVALID_CHARS;    if (ftype)	flg |= MB_USEGLYPHCHARS;    if (ftype == 2)	max = 128;    if (codepage == CP_UTF8) {	for (i = 0; i < max; i++)	    unitab[i] = i;	return;    }    if (codepage == CP_ACP)	codepage = GetACP();    else if (codepage == CP_OEMCP)	codepage = GetOEMCP();    if (codepage > 0 && codepage < 65536) {	for (i = 0; i < max; i++) {	    tbuf[0] = i;	    if (mb_to_wc(codepage, flg, tbuf, 1, unitab + i, 1)		!= 1)		unitab[i] = 0xFFFD;	}    } else {	int j = 256 - cp_list[codepage & 0xFFFF].cp_size;	for (i = 0; i < max; i++)	    unitab[i] = i;	for (i = j; i < max; i++)	    unitab[i] = cp_list[codepage & 0xFFFF].cp_table[i - j];    }}int wc_to_mb(int codepage, int flags, wchar_t *wcstr, int wclen,	     char *mbstr, int mblen, char *defchr, int *defused,	     struct unicode_data *ucsdata){    char *p;    int i;    if (ucsdata && codepage == ucsdata->line_codepage && ucsdata->uni_tbl) {	/* Do this by array lookup if we can. */	if (wclen < 0) {	    for (wclen = 0; wcstr[wclen++] ;);   /* will include the NUL */	}	for (p = mbstr, i = 0; i < wclen; i++) {	    wchar_t ch = wcstr[i];	    int by;	    char *p1;	    if (ucsdata->uni_tbl && (p1 = ucsdata->uni_tbl[(ch >> 8) & 0xFF])		&& (by = p1[ch & 0xFF]))		*p++ = by;	    else if (ch < 0x80)		*p++ = (char) ch;	    else if (defchr) {		int j;		for (j = 0; defchr[j]; j++)		    *p++ = defchr[j];		if (defused) *defused = 1;	    }#if 1	    else		*p++ = '.';#endif	    assert(p - mbstr < mblen);	}	return p - mbstr;    } else	return WideCharToMultiByte(codepage, flags, wcstr, wclen,				   mbstr, mblen, defchr, defused);}int mb_to_wc(int codepage, int flags, char *mbstr, int mblen,	     wchar_t *wcstr, int wclen){    return MultiByteToWideChar(codepage, flags, mbstr, mblen, wcstr, wclen);}int is_dbcs_leadbyte(int codepage, char byte){    return IsDBCSLeadByteEx(codepage, byte);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -