Changed iskanji[12] to inline functions.

This commit is contained in:
Yoshihiro Takahashi 2002-01-31 08:29:46 +00:00
parent e523a353a2
commit f9df78bb95
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=90012
2 changed files with 344 additions and 350 deletions

View file

@ -130,9 +130,178 @@ static int default_kanji = UJIS;
static void scterm_scan_esc(scr_stat *scp, term_stat *tcp,
u_char c);
static int mask2attr(term_stat *tcp);
static u_char iskanji1(u_char mode, u_char c);
static u_char iskanji2(u_char mode, u_char c);
static u_short kanji_convert(u_char mode, u_char h, u_char l);
#ifdef KANJI
__inline static u_char
iskanji1(u_char mode, u_char c)
{
if ((mode == KTYPE_7JIS) && (c >= 0x21) && (c <= 0x7e)) {
/* JIS */
default_kanji = UJIS;
return KTYPE_7JIS;
}
if ((mode == KTYPE_JKANA) && (c >= 0x21) && (c <= 0x5f)) {
/* JIS HANKAKU */
default_kanji = UJIS;
return KTYPE_JKANA;
}
#if 1
if ((c >= 0xa1) && (c <= 0xdf) && (default_kanji == UJIS)) {
/* UJIS */
return KTYPE_UJIS;
}
#endif
if ((c >= 0x81) && (c <= 0x9f) && (c != 0x8e)) {
/* SJIS */
default_kanji = SJIS;
return KTYPE_SJIS;
}
if ((c >= 0xa1) && (c <= 0xdf) && (default_kanji == SJIS)) {
/* SJIS HANKAKU */
return KTYPE_KANA;
}
#if 0
if ((c >= 0xa1) && (c <= 0xdf) && (default_kanji == UJIS)) {
/* UJIS */
return KTYPE_UJIS;
}
#endif
if ((c >= 0xf0) && (c <= 0xfe)) {
/* UJIS */
default_kanji = UJIS;
return KTYPE_UJIS;
}
if ((c >= 0xe0) && (c <= 0xef)) {
/* SJIS or UJIS */
return KTYPE_SUJIS;
}
if (c == 0x8e) {
/* SJIS or UJIS HANKAKU */
return KTYPE_SUKANA;
}
return KTYPE_ASCII;
}
__inline static u_char
iskanji2(u_char mode, u_char c)
{
switch (mode) {
case KTYPE_7JIS:
if ((c >= 0x21) && (c <= 0x7e)) {
/* JIS */
return KTYPE_7JIS;
}
break;
case KTYPE_SJIS:
if ((c >= 0x40) && (c <= 0xfc) && (c != 0x7f)) {
/* SJIS */
return KTYPE_SJIS;
}
break;
case KTYPE_UJIS:
if ((c >= 0xa1) && (c <= 0xfe)) {
/* UJIS */
return KTYPE_UJIS;
}
break;
case KTYPE_SUKANA:
if ((c >= 0xa1) && (c <= 0xdf) && (default_kanji == UJIS)) {
/* UJIS HANKAKU */
return KTYPE_KANA;
}
if ((c >= 0x40) && (c <= 0xfc) && (c != 0x7f)) {
/* SJIS */
default_kanji = SJIS;
return KTYPE_SJIS;
}
break;
case KTYPE_SUJIS:
if ((c >= 0x40) && (c <= 0xa0) && (c != 0x7f)) {
/* SJIS */
default_kanji = SJIS;
return KTYPE_SJIS;
}
if ((c == 0xfd) || (c == 0xfe)) {
/* UJIS */
default_kanji = UJIS;
return KTYPE_UJIS;
}
if ((c >= 0xa1) && (c <= 0xfc)) {
if (default_kanji == SJIS)
return KTYPE_SJIS;
if (default_kanji == UJIS)
return KTYPE_UJIS;
}
break;
}
return KTYPE_ASCII;
}
/*
* JIS X0208-83 keisen conversion table
*/
static u_short keiConv[32] = {
0x240c, 0x260c, 0x300c, 0x340c, 0x3c0c, 0x380c, 0x400c, 0x500c,
0x480c, 0x580c, 0x600c, 0x250c, 0x270c, 0x330c, 0x370c, 0x3f0c,
0x3b0c, 0x470c, 0x570c, 0x4f0c, 0x5f0c, 0x6f0c, 0x440c, 0x530c,
0x4c0c, 0x5b0c, 0x630c, 0x410c, 0x540c, 0x490c, 0x5c0c, 0x660c
};
static u_short
kanji_convert(u_char mode, u_char h, u_char l)
{
u_short tmp, high, low, c;
high = (u_short) h;
low = (u_short) l;
switch (mode) {
case KTYPE_SJIS: /* SHIFT JIS */
if (low >= 0xe0) {
low -= 0x40;
}
low = (low - 0x81) * 2 + 0x21;
if (high > 0x7f) {
high--;
}
if (high > 0x9d) {
low++;
high -= 0x9e - 0x21;
} else {
high -= 0x40 - 0x21;
}
high &= 0x7F;
low &= 0x7F;
tmp = ((high << 8) | low) - 0x20;
break;
case KTYPE_7JIS: /* JIS */
case KTYPE_UJIS: /* UJIS */
high &= 0x7F;
low &= 0x7F;
tmp = ((high << 8) | low) - 0x20;
break;
default:
tmp = 0;
break;
}
/* keisen */
c = ((tmp & 0xff) << 8) | (tmp >> 8);
/* 0x2821 .. 0x2840 */
if (0x0821 <= c && c <= 0x0840)
tmp = keiConv[c - 0x0821];
return (tmp);
}
#endif /* KANJI */
static int
scterm_init(scr_stat *scp, void **softc, int code)
@ -1034,176 +1203,4 @@ mask2attr(term_stat *tcp)
return (attr << 8);
}
#ifdef KANJI
static u_char
iskanji1(u_char mode, u_char c)
{
if ((mode == KTYPE_7JIS) && (c >= 0x21) && (c <= 0x7e)) {
/* JIS */
default_kanji = UJIS;
return KTYPE_7JIS;
}
if ((mode == KTYPE_JKANA) && (c >= 0x21) && (c <= 0x5f)) {
/* JIS HANKAKU */
default_kanji = UJIS;
return KTYPE_JKANA;
}
#if 1
if ((c >= 0xa1) && (c <= 0xdf) && (default_kanji == UJIS)) {
/* UJIS */
return KTYPE_UJIS;
}
#endif
if ((c >= 0x81) && (c <= 0x9f) && (c != 0x8e)) {
/* SJIS */
default_kanji = SJIS;
return KTYPE_SJIS;
}
if ((c >= 0xa1) && (c <= 0xdf) && (default_kanji == SJIS)) {
/* SJIS HANKAKU */
return KTYPE_KANA;
}
#if 0
if ((c >= 0xa1) && (c <= 0xdf) && (default_kanji == UJIS)) {
/* UJIS */
return KTYPE_UJIS;
}
#endif
if ((c >= 0xf0) && (c <= 0xfe)) {
/* UJIS */
default_kanji = UJIS;
return KTYPE_UJIS;
}
if ((c >= 0xe0) && (c <= 0xef)) {
/* SJIS or UJIS */
return KTYPE_SUJIS;
}
if (c == 0x8e) {
/* SJIS or UJIS HANKAKU */
return KTYPE_SUKANA;
}
return KTYPE_ASCII;
}
static u_char
iskanji2(u_char mode, u_char c)
{
switch (mode) {
case KTYPE_7JIS:
if ((c >= 0x21) && (c <= 0x7e)) {
/* JIS */
return KTYPE_7JIS;
}
break;
case KTYPE_SJIS:
if ((c >= 0x40) && (c <= 0xfc) && (c != 0x7f)) {
/* SJIS */
return KTYPE_SJIS;
}
break;
case KTYPE_UJIS:
if ((c >= 0xa1) && (c <= 0xfe)) {
/* UJIS */
return KTYPE_UJIS;
}
break;
case KTYPE_SUKANA:
if ((c >= 0xa1) && (c <= 0xdf) && (default_kanji == UJIS)) {
/* UJIS HANKAKU */
return KTYPE_KANA;
}
if ((c >= 0x40) && (c <= 0xfc) && (c != 0x7f)) {
/* SJIS */
default_kanji = SJIS;
return KTYPE_SJIS;
}
break;
case KTYPE_SUJIS:
if ((c >= 0x40) && (c <= 0xa0) && (c != 0x7f)) {
/* SJIS */
default_kanji = SJIS;
return KTYPE_SJIS;
}
if ((c == 0xfd) || (c == 0xfe)) {
/* UJIS */
default_kanji = UJIS;
return KTYPE_UJIS;
}
if ((c >= 0xa1) && (c <= 0xfc)) {
if (default_kanji == SJIS)
return KTYPE_SJIS;
if (default_kanji == UJIS)
return KTYPE_UJIS;
}
break;
}
return KTYPE_ASCII;
}
/*
* JIS X0208-83 keisen conversion table
*/
static u_short keiConv[32] = {
0x240c, 0x260c, 0x300c, 0x340c, 0x3c0c, 0x380c, 0x400c, 0x500c,
0x480c, 0x580c, 0x600c, 0x250c, 0x270c, 0x330c, 0x370c, 0x3f0c,
0x3b0c, 0x470c, 0x570c, 0x4f0c, 0x5f0c, 0x6f0c, 0x440c, 0x530c,
0x4c0c, 0x5b0c, 0x630c, 0x410c, 0x540c, 0x490c, 0x5c0c, 0x660c
};
static u_short
kanji_convert(u_char mode, u_char h, u_char l)
{
u_short tmp, high, low, c;
high = (u_short) h;
low = (u_short) l;
switch (mode) {
case KTYPE_SJIS: /* SHIFT JIS */
if (low >= 0xe0) {
low -= 0x40;
}
low = (low - 0x81) * 2 + 0x21;
if (high > 0x7f) {
high--;
}
if (high > 0x9d) {
low++;
high -= 0x9e - 0x21;
} else {
high -= 0x40 - 0x21;
}
high &= 0x7F;
low &= 0x7F;
tmp = ((high << 8) | low) - 0x20;
break;
case KTYPE_7JIS: /* JIS */
case KTYPE_UJIS: /* UJIS */
high &= 0x7F;
low &= 0x7F;
tmp = ((high << 8) | low) - 0x20;
break;
default:
tmp = 0;
break;
}
/* keisen */
c = ((tmp & 0xff) << 8) | (tmp >> 8);
/* 0x2821 .. 0x2840 */
if (0x0821 <= c && c <= 0x0840)
tmp = keiConv[c - 0x0821];
return (tmp);
}
#endif /* KANJI */
#endif /* SC_DUMB_TERMINAL */

View file

@ -130,9 +130,178 @@ static int default_kanji = UJIS;
static void scterm_scan_esc(scr_stat *scp, term_stat *tcp,
u_char c);
static int mask2attr(term_stat *tcp);
static u_char iskanji1(u_char mode, u_char c);
static u_char iskanji2(u_char mode, u_char c);
static u_short kanji_convert(u_char mode, u_char h, u_char l);
#ifdef KANJI
__inline static u_char
iskanji1(u_char mode, u_char c)
{
if ((mode == KTYPE_7JIS) && (c >= 0x21) && (c <= 0x7e)) {
/* JIS */
default_kanji = UJIS;
return KTYPE_7JIS;
}
if ((mode == KTYPE_JKANA) && (c >= 0x21) && (c <= 0x5f)) {
/* JIS HANKAKU */
default_kanji = UJIS;
return KTYPE_JKANA;
}
#if 1
if ((c >= 0xa1) && (c <= 0xdf) && (default_kanji == UJIS)) {
/* UJIS */
return KTYPE_UJIS;
}
#endif
if ((c >= 0x81) && (c <= 0x9f) && (c != 0x8e)) {
/* SJIS */
default_kanji = SJIS;
return KTYPE_SJIS;
}
if ((c >= 0xa1) && (c <= 0xdf) && (default_kanji == SJIS)) {
/* SJIS HANKAKU */
return KTYPE_KANA;
}
#if 0
if ((c >= 0xa1) && (c <= 0xdf) && (default_kanji == UJIS)) {
/* UJIS */
return KTYPE_UJIS;
}
#endif
if ((c >= 0xf0) && (c <= 0xfe)) {
/* UJIS */
default_kanji = UJIS;
return KTYPE_UJIS;
}
if ((c >= 0xe0) && (c <= 0xef)) {
/* SJIS or UJIS */
return KTYPE_SUJIS;
}
if (c == 0x8e) {
/* SJIS or UJIS HANKAKU */
return KTYPE_SUKANA;
}
return KTYPE_ASCII;
}
__inline static u_char
iskanji2(u_char mode, u_char c)
{
switch (mode) {
case KTYPE_7JIS:
if ((c >= 0x21) && (c <= 0x7e)) {
/* JIS */
return KTYPE_7JIS;
}
break;
case KTYPE_SJIS:
if ((c >= 0x40) && (c <= 0xfc) && (c != 0x7f)) {
/* SJIS */
return KTYPE_SJIS;
}
break;
case KTYPE_UJIS:
if ((c >= 0xa1) && (c <= 0xfe)) {
/* UJIS */
return KTYPE_UJIS;
}
break;
case KTYPE_SUKANA:
if ((c >= 0xa1) && (c <= 0xdf) && (default_kanji == UJIS)) {
/* UJIS HANKAKU */
return KTYPE_KANA;
}
if ((c >= 0x40) && (c <= 0xfc) && (c != 0x7f)) {
/* SJIS */
default_kanji = SJIS;
return KTYPE_SJIS;
}
break;
case KTYPE_SUJIS:
if ((c >= 0x40) && (c <= 0xa0) && (c != 0x7f)) {
/* SJIS */
default_kanji = SJIS;
return KTYPE_SJIS;
}
if ((c == 0xfd) || (c == 0xfe)) {
/* UJIS */
default_kanji = UJIS;
return KTYPE_UJIS;
}
if ((c >= 0xa1) && (c <= 0xfc)) {
if (default_kanji == SJIS)
return KTYPE_SJIS;
if (default_kanji == UJIS)
return KTYPE_UJIS;
}
break;
}
return KTYPE_ASCII;
}
/*
* JIS X0208-83 keisen conversion table
*/
static u_short keiConv[32] = {
0x240c, 0x260c, 0x300c, 0x340c, 0x3c0c, 0x380c, 0x400c, 0x500c,
0x480c, 0x580c, 0x600c, 0x250c, 0x270c, 0x330c, 0x370c, 0x3f0c,
0x3b0c, 0x470c, 0x570c, 0x4f0c, 0x5f0c, 0x6f0c, 0x440c, 0x530c,
0x4c0c, 0x5b0c, 0x630c, 0x410c, 0x540c, 0x490c, 0x5c0c, 0x660c
};
static u_short
kanji_convert(u_char mode, u_char h, u_char l)
{
u_short tmp, high, low, c;
high = (u_short) h;
low = (u_short) l;
switch (mode) {
case KTYPE_SJIS: /* SHIFT JIS */
if (low >= 0xe0) {
low -= 0x40;
}
low = (low - 0x81) * 2 + 0x21;
if (high > 0x7f) {
high--;
}
if (high > 0x9d) {
low++;
high -= 0x9e - 0x21;
} else {
high -= 0x40 - 0x21;
}
high &= 0x7F;
low &= 0x7F;
tmp = ((high << 8) | low) - 0x20;
break;
case KTYPE_7JIS: /* JIS */
case KTYPE_UJIS: /* UJIS */
high &= 0x7F;
low &= 0x7F;
tmp = ((high << 8) | low) - 0x20;
break;
default:
tmp = 0;
break;
}
/* keisen */
c = ((tmp & 0xff) << 8) | (tmp >> 8);
/* 0x2821 .. 0x2840 */
if (0x0821 <= c && c <= 0x0840)
tmp = keiConv[c - 0x0821];
return (tmp);
}
#endif /* KANJI */
static int
scterm_init(scr_stat *scp, void **softc, int code)
@ -1034,176 +1203,4 @@ mask2attr(term_stat *tcp)
return (attr << 8);
}
#ifdef KANJI
static u_char
iskanji1(u_char mode, u_char c)
{
if ((mode == KTYPE_7JIS) && (c >= 0x21) && (c <= 0x7e)) {
/* JIS */
default_kanji = UJIS;
return KTYPE_7JIS;
}
if ((mode == KTYPE_JKANA) && (c >= 0x21) && (c <= 0x5f)) {
/* JIS HANKAKU */
default_kanji = UJIS;
return KTYPE_JKANA;
}
#if 1
if ((c >= 0xa1) && (c <= 0xdf) && (default_kanji == UJIS)) {
/* UJIS */
return KTYPE_UJIS;
}
#endif
if ((c >= 0x81) && (c <= 0x9f) && (c != 0x8e)) {
/* SJIS */
default_kanji = SJIS;
return KTYPE_SJIS;
}
if ((c >= 0xa1) && (c <= 0xdf) && (default_kanji == SJIS)) {
/* SJIS HANKAKU */
return KTYPE_KANA;
}
#if 0
if ((c >= 0xa1) && (c <= 0xdf) && (default_kanji == UJIS)) {
/* UJIS */
return KTYPE_UJIS;
}
#endif
if ((c >= 0xf0) && (c <= 0xfe)) {
/* UJIS */
default_kanji = UJIS;
return KTYPE_UJIS;
}
if ((c >= 0xe0) && (c <= 0xef)) {
/* SJIS or UJIS */
return KTYPE_SUJIS;
}
if (c == 0x8e) {
/* SJIS or UJIS HANKAKU */
return KTYPE_SUKANA;
}
return KTYPE_ASCII;
}
static u_char
iskanji2(u_char mode, u_char c)
{
switch (mode) {
case KTYPE_7JIS:
if ((c >= 0x21) && (c <= 0x7e)) {
/* JIS */
return KTYPE_7JIS;
}
break;
case KTYPE_SJIS:
if ((c >= 0x40) && (c <= 0xfc) && (c != 0x7f)) {
/* SJIS */
return KTYPE_SJIS;
}
break;
case KTYPE_UJIS:
if ((c >= 0xa1) && (c <= 0xfe)) {
/* UJIS */
return KTYPE_UJIS;
}
break;
case KTYPE_SUKANA:
if ((c >= 0xa1) && (c <= 0xdf) && (default_kanji == UJIS)) {
/* UJIS HANKAKU */
return KTYPE_KANA;
}
if ((c >= 0x40) && (c <= 0xfc) && (c != 0x7f)) {
/* SJIS */
default_kanji = SJIS;
return KTYPE_SJIS;
}
break;
case KTYPE_SUJIS:
if ((c >= 0x40) && (c <= 0xa0) && (c != 0x7f)) {
/* SJIS */
default_kanji = SJIS;
return KTYPE_SJIS;
}
if ((c == 0xfd) || (c == 0xfe)) {
/* UJIS */
default_kanji = UJIS;
return KTYPE_UJIS;
}
if ((c >= 0xa1) && (c <= 0xfc)) {
if (default_kanji == SJIS)
return KTYPE_SJIS;
if (default_kanji == UJIS)
return KTYPE_UJIS;
}
break;
}
return KTYPE_ASCII;
}
/*
* JIS X0208-83 keisen conversion table
*/
static u_short keiConv[32] = {
0x240c, 0x260c, 0x300c, 0x340c, 0x3c0c, 0x380c, 0x400c, 0x500c,
0x480c, 0x580c, 0x600c, 0x250c, 0x270c, 0x330c, 0x370c, 0x3f0c,
0x3b0c, 0x470c, 0x570c, 0x4f0c, 0x5f0c, 0x6f0c, 0x440c, 0x530c,
0x4c0c, 0x5b0c, 0x630c, 0x410c, 0x540c, 0x490c, 0x5c0c, 0x660c
};
static u_short
kanji_convert(u_char mode, u_char h, u_char l)
{
u_short tmp, high, low, c;
high = (u_short) h;
low = (u_short) l;
switch (mode) {
case KTYPE_SJIS: /* SHIFT JIS */
if (low >= 0xe0) {
low -= 0x40;
}
low = (low - 0x81) * 2 + 0x21;
if (high > 0x7f) {
high--;
}
if (high > 0x9d) {
low++;
high -= 0x9e - 0x21;
} else {
high -= 0x40 - 0x21;
}
high &= 0x7F;
low &= 0x7F;
tmp = ((high << 8) | low) - 0x20;
break;
case KTYPE_7JIS: /* JIS */
case KTYPE_UJIS: /* UJIS */
high &= 0x7F;
low &= 0x7F;
tmp = ((high << 8) | low) - 0x20;
break;
default:
tmp = 0;
break;
}
/* keisen */
c = ((tmp & 0xff) << 8) | (tmp >> 8);
/* 0x2821 .. 0x2840 */
if (0x0821 <= c && c <= 0x0840)
tmp = keiConv[c - 0x0821];
return (tmp);
}
#endif /* KANJI */
#endif /* SC_DUMB_TERMINAL */