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

📄 encoding.c

📁 multi-tabed terminal based on rxvt
💻 C
📖 第 1 页 / 共 2 页
字号:
char**	    def_mfontName;#ifdef MULTICHAR_SET/* EXTPROTO */voidrxvt_decode_euc2jis (unsigned char* str, int len){    register int    i;    rxvt_dbgmsg ((DBG_DEBUG, DBG_ENCODING, "%s (%s : %d)\n", __func__, str, len));    for (i = 0; i < len; i++)	str[i] &= 0x7F;}/* EXTPROTO */voidrxvt_decode_sjis2jis (unsigned char* str, int len){    register int    i;    unsigned char  *high, *low;    rxvt_dbgmsg ((DBG_DEBUG, DBG_ENCODING, "%s\n", __func__));    for (i = 0; i < len; i += 2, str += 2) {	high = str;	low = str + 1;	(*high) -= (*high > 0x9F ? 0xB1 : 0x71);	*high = (*high) * 2 + 1;	if (*low > 0x9E) {	    *low -= 0x7E;	    (*high)++;	}	else {	    if (*low > 0x7E)		(*low)--;	    *low -= 0x1F;	}    }}/* EXTPROTO */voidrxvt_decode_gb180302jis (unsigned char* str, int len){    register int    i;    rxvt_dbgmsg ((DBG_DEBUG, DBG_ENCODING, "%s\n", __func__));    for (i = 0; i < len; i++)	str[i] &= 0x7F;}/* EXTPROTO */voidrxvt_set_multichar_encoding (rxvt_t* r, const char* str){    struct KNOWN_ENCODINGS* a;    assert (NOT_NULL(str));    rxvt_msg (DBG_INFO, DBG_ENCODING, "trying to set multichar encoding to %s\n", str);    a = (struct KNOWN_ENCODINGS*) known_encodings;    for (; a->name; a++) {	if (0 == STRCASECMP (str, a->name)) {	    r->encoding_method = a->method;	    r->h->multichar_decode = a->func;	    break;	}    }    /* not a known encoding method */    if (IS_NULL(a->name))   {	rxvt_msg (DBG_INFO, DBG_ENCODING, "... effectively set to noenc\n");	r->encoding_method = ENC_NOENC;	r->h->multichar_decode = rxvt_decode_dummy;    }	 else		rxvt_msg (DBG_INFO, DBG_ENCODING, "... effectively set to %s\n", a->name);#ifdef XFT_SUPPORT# ifdef HAVE_ICONV_H    if ((iconv_t) -1 != r->TermWin.xfticonv)	{	iconv_close (r->TermWin.xfticonv);	r->TermWin.xfticonv = (iconv_t) -1;    }    /*    ** If encoding method is set AND mfont is loaded, open the    ** iconv. Otherwise, xfticonv is -1    */    if (ENC_NOENC != r->encoding_method &&	NOTSET_OPTION(r, Opt2_xftNomFont))	r->TermWin.xfticonv = iconv_open ("UTF-8",				rxvt_encoding_name(r));# endif#endif}#endif		    /* MULTICHAR_SET *//* EXTPROTO */voidrxvt_decode_dummy (unsigned char* str, int len){    rxvt_dbgmsg ((DBG_DEBUG, DBG_ENCODING, "%s\n", __func__));}/* EXTPROTO */voidrxvt_set_default_locale (rxvt_t* r){    char*   locale;#if defined(HAVE_SETLOCALE) || defined(HAVE_XSETLOCALE)    char*   lc;#endif    locale = getenv ("LC_ALL");    if (IS_NULL(locale))	locale = getenv ("LC_CTYPE");    if (IS_NULL(locale))	locale = getenv ("LANG");    #if defined(HAVE_SETLOCALE) || defined(HAVE_XSETLOCALE)    lc = setlocale(LC_CTYPE, "");    if (IS_NULL(locale))	locale = lc;#endif    rxvt_msg (DBG_INFO, DBG_ENCODING, "set default locale to %s\n", locale ? locale : "none");    r->h->locale = locale;}/* This function get the encoding method from locale. This should be** the *correct* way to specify encoding method. The old way, using** -km option or multichar_encoding resource, should be abandoned in** the future as we steadily migrate to UTF-8.*//* EXTPROTO */char* rxvt_get_encoding_from_locale (rxvt_t* r){    char*   enc;    if (IS_NULL(r->h->locale))	return NULL;#ifdef HAVE_NL_LANGINFO    if (IS_NULL (enc = nl_langinfo (CODESET)))	return NULL;#else    {	char *end;	// the codeset is between '.' and '@'.	if (IS_NULL(enc = strchr (r->h->locale, '.')))	    return NULL;	if (!IS_NULL (end = strchr (r->h->locale, '@')))	    end[0] = '\0';	enc ++;    }#endif    if ((char) 0 == *enc)	return NULL;    return enc;}/* EXTPROTO */char*rxvt_encoding_name (rxvt_t* r){    assert (r->encoding_method >= 0);    assert (r->encoding_method <= ENC_ISO8859_15);    return encoding_name[r->encoding_method].encname;}#ifdef XFT_SUPPORT/* Fallback XFT fonts *//* EXTPROTO */char*rxvt_fallback_mfont_xft (rxvt_t* r){    assert (r->encoding_method >= 0);    assert (r->encoding_method <= ENC_ISO8859_15);    return fallback_mfont_list_xft[r->encoding_method].fontname;}/* EXTPROTO */voidrxvt_set_default_font_xft (rxvt_t* r){    if (ISSET_OPTION(r, Opt_xft) && IS_NULL(r->h->rs[Rs_xftfont]))	r->h->rs[Rs_xftfont] = DEFAULT_XFT_FONT_NAME;# ifdef MULTICHAR_SET    if (ISSET_OPTION(r, Opt_xft) && IS_NULL(r->h->rs[Rs_xftmfont]))	r->h->rs[Rs_xftmfont] = rxvt_fallback_mfont_xft (r);# endif}#endif	/* XFT_SUPPORT *//* Fallback X11 fonts *//* EXTPROTO */char*rxvt_fallback_mfont_x11 (rxvt_t* r){    assert (r->encoding_method >= 0);    assert (r->encoding_method <= ENC_ISO8859_15);    return fallback_mfont_list_x11[r->encoding_method].fontname;}/* EXTPROTO */voidrxvt_set_default_font_x11 (rxvt_t* r){    register int    i;    rxvt_dbgmsg ((DBG_VERBOSE, DBG_ENCODING, "%s\n", __func__));    /* Set default fonts */    def_fontName = (char**) nfont_list[r->encoding_method].font;#ifdef MULTICHAR_SET    switch (r->encoding_method)	{    case ENC_SJIS :	def_mfontName = (char**) mfont_list[ENC_SJIS].mfont;	break;    case ENC_EUCJ :	def_mfontName = (char**) mfont_list[ENC_EUCJ].mfont;	break;    case ENC_GB   :	def_mfontName = (char**) mfont_list[ENC_GB].mfont;	break;    case ENC_GBK  :	def_mfontName = (char**) mfont_list[ENC_GBK].mfont;	break;    case ENC_GB18030  :	def_mfontName = (char**) mfont_list[ENC_GB18030].mfont;	break;    case ENC_BIG5 :	def_mfontName = (char**) mfont_list[ENC_BIG5].mfont;	break;    case ENC_EUCKR:	def_mfontName = (char**) mfont_list[ENC_EUCKR].mfont;	break;    default:	def_mfontName = (char**) mfont_list[r->encoding_method].mfont;	break;    }    /* Found no mfont, fall back to ISO8859-X font */    if (IS_NULL(def_mfontName[0]))  {	for (i = 0; i < MAX_NFONTS; i ++)   {	    char*   ptr = rxvt_malloc (STRLEN(isofont[i])+4);	    if (r->encoding_method >= ENC_ISO8859_1 &&		r->encoding_method <= ENC_ISO8859_15)		sprintf (ptr, isofont[i],		    r->encoding_method - ENC_ISO8859_1 + 1);	    else		sprintf (ptr, isofont[i], 1);	    def_mfontName[i] = ptr;	}    }#endif    /* Found no font, fall back to ISO8859-X font */    if (IS_NULL(def_fontName[0]))   {	for (i = 0; i < MAX_NFONTS; i ++)   {	    char*   ptr = rxvt_malloc (STRLEN(isofont[i])+4);#ifdef MULTICHAR_SET	    if (r->encoding_method >= ENC_ISO8859_1 &&		r->encoding_method <= ENC_ISO8859_15)		sprintf (ptr, isofont[i],		    r->encoding_method - ENC_ISO8859_1 + 1);	    else#endif	    sprintf (ptr, isofont[i], 1);	    def_fontName[i] = ptr;	}    }    /* Overrided by -km option or X resources */    for (i = 0; i < MAX_NFONTS; i ++)	{	if (IS_NULL(r->h->rs[Rs_font +i]))	    r->h->rs[Rs_font +i] = def_fontName[i];#ifdef MULTICHAR_SET	if (IS_NULL(r->h->rs[Rs_mfont +i]))	    r->h->rs[Rs_mfont +i] = def_mfontName[i];#endif    }}/*----------------------- end-of-file (C source) -----------------------*/

⌨️ 快捷键说明

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