📄 kanji.c
字号:
save = (char *) from; for (out = cvtbuf; *from;) { if (is_shift_jis (*from)) { int code = sjis2euc ((int) from[0] & 0xff, (int) from[1] & 0xff); *out++ = (code >> 8) & 0xff; *out++ = code; from += 2; } else if (is_kana (*from)) { *out++ = (char)euc_kana; *out++ = *from++; } else { *out++ = *from++; } } *out = 0; if (overwrite) { pstrcpy((char *) save, (char *) cvtbuf); return (char *) save; } else { return cvtbuf; }}/******************************************************************* Convert FROM contain EUC codes to SHIFT JIS codes return converted buffer********************************************************************/static char *euc_to_sj(char *from, BOOL overwrite){ char *out; char *save; save = (char *) from; for (out = cvtbuf; *from; ) { if (is_euc (*from)) { int code = euc2sjis ((int) from[0] & 0xff, (int) from[1] & 0xff); *out++ = (code >> 8) & 0xff; *out++ = code; from += 2; } else if (is_euc_kana (*from)) { *out++ = from[1]; from += 2; } else { *out++ = *from++; } } *out = 0; if (overwrite) { pstrcpy(save, (char *) cvtbuf); return save; } else { return cvtbuf; }}/******************************************************************* JIS7,JIS8,JUNET <-> SJIS********************************************************************/static int sjis2jis(int hi, int lo){ if (lo >= 0x9f) return ((hi * 2 - (hi >= 0xe0 ? 0x160 : 0xe0)) << 8) | (lo - 0x7e); else return ((hi * 2 - (hi >= 0xe0 ? 0x161 : 0xe1)) << 8) | (lo - (lo >= 0x7f ? 0x20 : 0x1f));}static int jis2sjis(int hi, int lo){ if (hi & 1) return ((hi / 2 + (hi < 0x5f ? 0x71 : 0xb1)) << 8) | (lo + (lo >= 0x60 ? 0x20 : 0x1f)); else return ((hi / 2 + (hi < 0x5f ? 0x70 : 0xb0)) << 8) | (lo + 0x7e);}/******************************************************************* Convert FROM contain JIS codes to SHIFT JIS codes return converted buffer********************************************************************/static char *jis8_to_sj(char *from, BOOL overwrite){ char *out; int shifted; char *save; shifted = _KJ_ROMAN; save = (char *) from; for (out = cvtbuf; *from;) { if (is_esc (*from)) { if (is_so1 (from[1]) && is_so2 (from[2])) { shifted = _KJ_KANJI; from += 3; } else if (is_si1 (from[1]) && is_si2 (from[2])) { shifted = _KJ_ROMAN; from += 3; } else { /* sequence error */ goto normal; } } else { normal: switch (shifted) { default: case _KJ_ROMAN: *out++ = *from++; break; case _KJ_KANJI: { int code = jis2sjis ((int) from[0] & 0xff, (int) from[1] & 0xff); *out++ = (code >> 8) & 0xff; *out++ = code; from += 2; } break; } } } *out = 0; if (overwrite) { pstrcpy (save, (char *) cvtbuf); return save; } else { return cvtbuf; }}/******************************************************************* Convert FROM contain SHIFT JIS codes to JIS codes return converted buffer********************************************************************/static char *sj_to_jis8(char *from, BOOL overwrite){ char *out; int shifted; char *save; shifted = _KJ_ROMAN; save = (char *) from; for (out = cvtbuf; *from; ) { if (is_shift_jis (*from)) { int code; switch (shifted) { case _KJ_ROMAN: /* to KANJI */ *out++ = jis_esc; *out++ = jis_so1; *out++ = jis_kso; shifted = _KJ_KANJI; break; } code = sjis2jis ((int) from[0] & 0xff, (int) from[1] & 0xff); *out++ = (code >> 8) & 0xff; *out++ = code; from += 2; } else { switch (shifted) { case _KJ_KANJI: /* to ROMAN/KANA */ *out++ = jis_esc; *out++ = jis_si1; *out++ = jis_ksi; shifted = _KJ_ROMAN; break; } *out++ = *from++; } } switch (shifted) { case _KJ_KANJI: /* to ROMAN/KANA */ *out++ = jis_esc; *out++ = jis_si1; *out++ = jis_ksi; shifted = _KJ_ROMAN; break; } *out = 0; if (overwrite) { pstrcpy (save, (char *) cvtbuf); return save; } else { return cvtbuf; }}/******************************************************************* Convert FROM contain 7 bits JIS codes to SHIFT JIS codes return converted buffer********************************************************************/static char *jis7_to_sj(char *from, BOOL overwrite){ char *out; int shifted; char *save; shifted = _KJ_ROMAN; save = (char *) from; for (out = cvtbuf; *from;) { if (is_esc (*from)) { if (is_so1 (from[1]) && is_so2 (from[2])) { shifted = _KJ_KANJI; from += 3; } else if (is_si1 (from[1]) && is_si2 (from[2])) { shifted = _KJ_ROMAN; from += 3; } else { /* sequence error */ goto normal; } } else if (is_so (*from)) { shifted = _KJ_KANA; /* to KANA */ from++; } else if (is_si (*from)) { shifted = _KJ_ROMAN; /* to ROMAN */ from++; } else { normal: switch (shifted) { default: case _KJ_ROMAN: *out++ = *from++; break; case _KJ_KANJI: { int code = jis2sjis ((int) from[0] & 0xff, (int) from[1] & 0xff); *out++ = (code >> 8) & 0xff; *out++ = code; from += 2; } break; case _KJ_KANA: *out++ = ((int) from[0]) + 0x80; break; } } } *out = 0; if (overwrite) { pstrcpy (save, (char *) cvtbuf); return save; } else { return cvtbuf; }}/******************************************************************* Convert FROM contain SHIFT JIS codes to 7 bits JIS codes return converted buffer********************************************************************/static char *sj_to_jis7(char *from, BOOL overwrite){ char *out; int shifted; char *save; shifted = _KJ_ROMAN; save = (char *) from; for (out = cvtbuf; *from; ) { if (is_shift_jis (*from)) { int code; switch (shifted) { case _KJ_KANA: *out++ = jis_si; /* to ROMAN and through down */ case _KJ_ROMAN: /* to KANJI */ *out++ = jis_esc; *out++ = jis_so1; *out++ = jis_kso; shifted = _KJ_KANJI; break; } code = sjis2jis ((int) from[0] & 0xff, (int) from[1] & 0xff); *out++ = (code >> 8) & 0xff; *out++ = code; from += 2; } else if (is_kana (from[0])) { switch (shifted) { case _KJ_KANJI: /* to ROMAN */ *out++ = jis_esc; *out++ = jis_si1; *out++ = jis_ksi; case _KJ_ROMAN: /* to KANA */ *out++ = jis_so; shifted = _KJ_KANA; break; } *out++ = ((int) *from++) - 0x80; } else { switch (shifted) { case _KJ_KANA: *out++ = jis_si; /* to ROMAN */ shifted = _KJ_ROMAN; break; case _KJ_KANJI: /* to ROMAN */ *out++ = jis_esc; *out++ = jis_si1; *out++ = jis_ksi; shifted = _KJ_ROMAN; break; } *out++ = *from++; } } switch (shifted) { case _KJ_KANA: *out++ = jis_si; /* to ROMAN */ break; case _KJ_KANJI: /* to ROMAN */ *out++ = jis_esc; *out++ = jis_si1; *out++ = jis_ksi; break; } *out = 0; if (overwrite) { pstrcpy (save, (char *) cvtbuf); return save; } else { return cvtbuf; }}/******************************************************************* Convert FROM contain 7 bits JIS(junet) codes to SHIFT JIS codes return converted buffer********************************************************************/static char *junet_to_sj(char *from, BOOL overwrite){ char *out; int shifted; char *save; shifted = _KJ_ROMAN; save = (char *) from; for (out = cvtbuf; *from;) { if (is_esc (*from)) { if (is_so1 (from[1]) && is_so2 (from[2])) { shifted = _KJ_KANJI; from += 3; } else if (is_si1 (from[1]) && is_si2 (from[2])) { shifted = _KJ_ROMAN; from += 3; } else if (is_juk1(from[1]) && is_juk2 (from[2])) { shifted = _KJ_KANA; from += 3; } else { /* sequence error */ goto normal; } } else { normal: switch (shifted) { default: case _KJ_ROMAN: *out++ = *from++; break; case _KJ_KANJI: { int code = jis2sjis ((int) from[0] & 0xff, (int) from[1] & 0xff); *out++ = (code >> 8) & 0xff; *out++ = code; from += 2; } break; case _KJ_KANA: *out++ = ((int) from[0]) + 0x80; break; } } } *out = 0; if (overwrite) { pstrcpy (save, (char *) cvtbuf); return save; } else { return cvtbuf; }}/******************************************************************* Convert FROM contain SHIFT JIS codes to 7 bits JIS(junet) codes return converted buffer********************************************************************/static char *sj_to_junet(char *from, BOOL overwrite){ char *out; int shifted; char *save; shifted = _KJ_ROMAN; save = (char *) from; for (out = cvtbuf; *from; ) { if (is_shift_jis (*from)) { int code; switch (shifted) { case _KJ_KANA: case _KJ_ROMAN: /* to KANJI */ *out++ = jis_esc; *out++ = jis_so1; *out++ = jis_so2; shifted = _KJ_KANJI; break; } code = sjis2jis ((int) from[0] & 0xff, (int) from[1] & 0xff); *out++ = (code >> 8) & 0xff; *out++ = code; from += 2; } else if (is_kana (from[0])) { switch (shifted) { case _KJ_KANJI: /* to ROMAN */ case _KJ_ROMAN: /* to KANA */ *out++ = jis_esc; *out++ = junet_kana1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -