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

📄 kanji.c

📁 MC Linux/Unix 终端下文件管理器
💻 C
📖 第 1 页 / 共 3 页
字号:
		*out++ = junet_kana2;		shifted = _KJ_KANA;		break;	    }	    *out++ = ((int) *from++) - 0x80;	} else {	    switch (shifted) {	    case _KJ_KANA:	    case _KJ_KANJI:		/* to ROMAN */		*out++ = jis_esc;		*out++ = jis_si1;		*out++ = jis_si2;		shifted = _KJ_ROMAN;		break;	    }	    *out++ = *from++;	}    }    switch (shifted) {    case _KJ_KANA:    case _KJ_KANJI:			/* to ROMAN */	*out++ = jis_esc;	*out++ = jis_si1;	*out++ = jis_si2;	break;    }    *out = 0;    if (overwrite) {	pstrcpy (save, (char *) cvtbuf);	return save;    } else {	return cvtbuf;    }}/*******************************************************************  HEX <-> SJIS********************************************************************//* ":xx" -> a byte */static char *hex_to_sj(char *from, BOOL overwrite){    char *sp, *dp;        sp = (char *) from;    dp = cvtbuf;    while (*sp) {	if (*sp == hex_tag && isxdigit((int)sp[1]) && isxdigit((int)sp[2])) {	    *dp++ = (hex2bin (sp[1])<<4) | (hex2bin (sp[2]));	    sp += 3;	} else	    *dp++ = *sp++;    }    *dp = '\0';    if (overwrite) {	pstrcpy ((char *) from, (char *) cvtbuf);	return (char *) from;    } else {	return cvtbuf;    }} /*******************************************************************  kanji/kana -> ":xx" ********************************************************************/static char *sj_to_hex(char *from, BOOL overwrite){    unsigned char *sp, *dp;        sp = (unsigned char*) from;    dp = (unsigned char*) cvtbuf;    while (*sp) {	if (is_kana(*sp)) {	    *dp++ = hex_tag;	    *dp++ = bin2hex (((*sp)>>4)&0x0f);	    *dp++ = bin2hex ((*sp)&0x0f);	    sp++;	} else if (is_shift_jis (*sp) && is_shift_jis2 (sp[1])) {	    *dp++ = hex_tag;	    *dp++ = bin2hex (((*sp)>>4)&0x0f);	    *dp++ = bin2hex ((*sp)&0x0f);	    sp++;	    *dp++ = hex_tag;	    *dp++ = bin2hex (((*sp)>>4)&0x0f);	    *dp++ = bin2hex ((*sp)&0x0f);	    sp++;	} else	    *dp++ = *sp++;    }    *dp = '\0';    if (overwrite) {	pstrcpy ((char *) from, (char *) cvtbuf);	return (char *) from;    } else {	return cvtbuf;    }}/*******************************************************************  CAP <-> SJIS********************************************************************//* ":xx" CAP -> a byte */static char *cap_to_sj(char *from, BOOL overwrite){    char *sp, *dp;    sp = (char *) from;    dp = cvtbuf;    while (*sp) {        /*         * The only change between this and hex_to_sj is here. sj_to_cap only         * translates characters greater or equal to 0x80 - make sure that here         * we only do the reverse (that's why the strchr is used rather than         * isxdigit. Based on fix from ado@elsie.nci.nih.gov (Arthur David Olson).         */        if (*sp == hex_tag && (strchr ("89abcdefABCDEF", sp[1]) != NULL) && isxdigit((int)sp[2])) {            *dp++ = (hex2bin (sp[1])<<4) | (hex2bin (sp[2]));            sp += 3;        } else            *dp++ = *sp++;    }    *dp = '\0';    if (overwrite) {        pstrcpy ((char *) from, (char *) cvtbuf);        return (char *) from;    } else {        return cvtbuf;    }}/*******************************************************************  kanji/kana -> ":xx" - CAP format.********************************************************************/static char *sj_to_cap(char *from, BOOL overwrite){    unsigned char *sp, *dp;    sp = (unsigned char*) from;    dp = (unsigned char*) cvtbuf;    while (*sp) {	if (*sp >= 0x80) {	    *dp++ = hex_tag;	    *dp++ = bin2hex (((*sp)>>4)&0x0f);	    *dp++ = bin2hex ((*sp)&0x0f);	    sp++;	} else {	    *dp++ = *sp++;	}    }    *dp = '\0';    if (overwrite) {	pstrcpy ((char *) from, (char *) cvtbuf);	return (char *) from;    } else {	return cvtbuf;    }}/******************************************************************* sj to sj********************************************************************/static char *sj_to_sj(char *from, BOOL overwrite){    if (!overwrite) {	pstrcpy (cvtbuf, (char *) from);	return cvtbuf;    } else {	return (char *) from;    }}/************************************************************************ conversion: _dos_to_unix		_unix_to_dos************************************************************************/static void setup_string_function(int codes){    switch (codes) {    default:        _dos_to_unix = dos2unix_format;        _unix_to_dos = unix2dos_format;        break;    case SJIS_CODE:	_dos_to_unix = sj_to_sj;	_unix_to_dos = sj_to_sj;	break;	    case EUC_CODE:	_dos_to_unix = sj_to_euc;	_unix_to_dos = euc_to_sj;	break;	    case JIS7_CODE:	_dos_to_unix = sj_to_jis7;	_unix_to_dos = jis7_to_sj;	break;    case JIS8_CODE:	_dos_to_unix = sj_to_jis8;	_unix_to_dos = jis8_to_sj;	break;    case JUNET_CODE:	_dos_to_unix = sj_to_junet;	_unix_to_dos = junet_to_sj;	break;    case HEX_CODE:	_dos_to_unix = sj_to_hex;	_unix_to_dos = hex_to_sj;	break;    case CAP_CODE:	_dos_to_unix = sj_to_cap;	_unix_to_dos = cap_to_sj;	break;    }}/************************************************************************ Interpret coding system.************************************************************************/void interpret_coding_system(char *str){    int codes = UNKNOWN_CODE;        if (strequal (str, "sjis")) {	codes = SJIS_CODE;    } else if (strequal (str, "euc")) {	codes = EUC_CODE;    } else if (strequal (str, "cap")) {	codes = CAP_CODE;	hex_tag = HEXTAG;    } else if (strequal (str, "hex")) {	codes = HEX_CODE;	hex_tag = HEXTAG;    } else if (!strncasecmp (str, "hex", 3)) {	codes = HEX_CODE;	hex_tag = (str[3] ? str[3] : HEXTAG);    } else if (strequal (str, "j8bb")) {	codes = JIS8_CODE;	jis_kso = 'B';	jis_ksi = 'B';    } else if (strequal (str, "j8bj") || strequal (str, "jis8")) {	codes = JIS8_CODE;	jis_kso = 'B';	jis_ksi = 'J';    } else if (strequal (str, "j8bh")) {	codes = JIS8_CODE;	jis_kso = 'B';	jis_ksi = 'H';    } else if (strequal (str, "j8@b")) {	codes = JIS8_CODE;	jis_kso = '@';	jis_ksi = 'B';    } else if (strequal (str, "j8@j")) {	codes = JIS8_CODE;	jis_kso = '@';	jis_ksi = 'J';    } else if (strequal (str, "j8@h")) {	codes = JIS8_CODE;	jis_kso = '@';	jis_ksi = 'H';    } else if (strequal (str, "j7bb")) {	codes = JIS7_CODE;	jis_kso = 'B';	jis_ksi = 'B';    } else if (strequal (str, "j7bj") || strequal (str, "jis7")) {	codes = JIS7_CODE;	jis_kso = 'B';	jis_ksi = 'J';    } else if (strequal (str, "j7bh")) {	codes = JIS7_CODE;	jis_kso = 'B';	jis_ksi = 'H';    } else if (strequal (str, "j7@b")) {	codes = JIS7_CODE;	jis_kso = '@';	jis_ksi = 'B';    } else if (strequal (str, "j7@j")) {	codes = JIS7_CODE;	jis_kso = '@';	jis_ksi = 'J';    } else if (strequal (str, "j7@h")) {	codes = JIS7_CODE;	jis_kso = '@';	jis_ksi = 'H';    } else if (strequal (str, "jubb")) {	codes = JUNET_CODE;	jis_kso = 'B';	jis_ksi = 'B';    } else if (strequal (str, "jubj") || strequal (str, "junet")) {	codes = JUNET_CODE;	jis_kso = 'B';	jis_ksi = 'J';    } else if (strequal (str, "jubh")) {	codes = JUNET_CODE;	jis_kso = 'B';	jis_ksi = 'H';    } else if (strequal (str, "ju@b")) {	codes = JUNET_CODE;	jis_kso = '@';	jis_ksi = 'B';    } else if (strequal (str, "ju@j")) {	codes = JUNET_CODE;	jis_kso = '@';	jis_ksi = 'J';    } else if (strequal (str, "ju@h")) {	codes = JUNET_CODE;	jis_kso = '@';	jis_ksi = 'H';    }	    setup_string_function (codes);}/******************************************************************* Non multibyte char function.*******************************************************************/   static size_t skip_non_multibyte_char(char c){  return 0;}/******************************************************************* Function that always says a character isn't multibyte.*******************************************************************/static BOOL not_multibyte_char_1(char c){  return False;}/******************************************************************* Function to determine if we are in a multibyte code page.*******************************************************************/static BOOL is_multibyte_codepage_val = False;BOOL is_multibyte_codepage(void){  return is_multibyte_codepage_val;}/******************************************************************* Setup the function pointers for the functions that are replaced when multi-byte codepages are used. The dos_to_unix and unix_to_dos function pointers are only replaced by setup_string_function called by interpret_coding_system above.*******************************************************************/void initialize_multibyte_vectors( int client_codepage){  switch( client_codepage )  {  case KANJI_CODEPAGE:    multibyte_strchr = sj_strchr;    multibyte_strrchr = sj_strrchr;    multibyte_strstr = sj_strstr;    multibyte_strtok = sj_strtok;    _skip_multibyte_char = skip_kanji_multibyte_char;    is_multibyte_char_1 = is_kanji_multibyte_char_1;    is_multibyte_codepage_val = True;    break;  case HANGUL_CODEPAGE:    multibyte_strchr = generic_multibyte_strchr;    multibyte_strrchr = generic_multibyte_strrchr;    multibyte_strstr = generic_multibyte_strstr;    multibyte_strtok = generic_multibyte_strtok;    _skip_multibyte_char = skip_generic_multibyte_char;    is_multibyte_char_1 = hangul_is_multibyte_char_1;    is_multibyte_codepage_val = True;    break;  case BIG5_CODEPAGE:    multibyte_strchr = generic_multibyte_strchr;    multibyte_strrchr = generic_multibyte_strrchr;    multibyte_strstr = generic_multibyte_strstr;    multibyte_strtok = generic_multibyte_strtok;    _skip_multibyte_char = skip_generic_multibyte_char;    is_multibyte_char_1 = big5_is_multibyte_char_1;    is_multibyte_codepage_val = True;    break;  case SIMPLIFIED_CHINESE_CODEPAGE:    multibyte_strchr = generic_multibyte_strchr;    multibyte_strrchr = generic_multibyte_strrchr;    multibyte_strstr = generic_multibyte_strstr;    multibyte_strtok = generic_multibyte_strtok;    _skip_multibyte_char = skip_generic_multibyte_char;    is_multibyte_char_1 = simpch_is_multibyte_char_1;    is_multibyte_codepage_val = True;    break;  /*   * Single char size code page.   */  default:    multibyte_strchr = (const char *(*)(const char *, int )) strchr;    multibyte_strrchr = (const char *(*)(const char *, int )) strrchr;    multibyte_strstr = (const char *(*)(const char *, const char *)) strstr;    multibyte_strtok = (char *(*)(char *, const char *)) strtok;    _skip_multibyte_char = skip_non_multibyte_char;    is_multibyte_char_1 = not_multibyte_char_1;    is_multibyte_codepage_val = False;    break;   }}

⌨️ 快捷键说明

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