static void
c2mu (unsigned char *cp, int l, unsigned char *mp)
{
- unsigned char ch, *ep = cp+l;
-#ifdef UTF2000
- Emchar chr;
+ unsigned char ch, *ep = cp+l;
- while ((cp < ep) && (ch = *cp++))
- {
- if (ch == ISO_CODE_SS2)
- {
- chr = (*cp++) + MIN_CHAR_HALFWIDTH_KATAKANA - 0x20;
- }
- else if (ch == ISO_CODE_SS3)
- {
- ch = *cp++;
- chr = MAKE_CHAR (Vcharset_japanese_jisx0212,
- ch & 0x7f, (*cp++) & 0x7f);
- }
- else if (ch & 0x80)
- {
- chr = MAKE_CHAR (Vcharset_japanese_jisx0208,
- ch & 0x7f, (*cp++) & 0x7f);
- }
- else
- {
- chr = ch;
- }
- if ( chr <= 0x7f )
- {
- *mp++ = chr;
- }
- else if ( chr <= 0x7ff )
- {
- *mp++ = (chr >> 6) | 0xc0;
- *mp++ = (chr & 0x3f) | 0x80;
- }
- else if ( chr <= 0xffff )
- {
- *mp++ = (chr >> 12) | 0xe0;
- *mp++ = ((chr >> 6) & 0x3f) | 0x80;
- *mp++ = (chr & 0x3f) | 0x80;
- }
- else if ( chr <= 0x1fffff )
- {
- *mp++ = (chr >> 18) | 0xf0;
- *mp++ = ((chr >> 12) & 0x3f) | 0x80;
- *mp++ = ((chr >> 6) & 0x3f) | 0x80;
- *mp++ = (chr & 0x3f) | 0x80;
- }
- else if ( chr <= 0x3ffffff )
- {
- *mp++ = (chr >> 24) | 0xf8;
- *mp++ = ((chr >> 18) & 0x3f) | 0x80;
- *mp++ = ((chr >> 12) & 0x3f) | 0x80;
- *mp++ = ((chr >> 6) & 0x3f) | 0x80;
- *mp++ = (chr & 0x3f) | 0x80;
- }
- else
- {
- *mp++ = (chr >> 30) | 0xfc;
- *mp++ = ((chr >> 24) & 0x3f) | 0x80;
- *mp++ = ((chr >> 18) & 0x3f) | 0x80;
- *mp++ = ((chr >> 12) & 0x3f) | 0x80;
- *mp++ = ((chr >> 6) & 0x3f) | 0x80;
- *mp++ = (chr & 0x3f) | 0x80;
- }
- }
-#else
while ((cp < ep) && (ch = *cp))
{
if ((unsigned char) ch == ISO_CODE_SS2)
}
*mp++ = *cp++;
}
-#endif
*mp = 0;
}
m2c (unsigned char *mp, int l, unsigned char *cp)
{
unsigned char ch, *ep = mp + l;
-#ifdef UTF2000
- int len;
- Emchar chr;
-#endif
while ((mp < ep) && (ch = *mp++))
{
-#ifdef UTF2000
- if ( ch >= 0xfc )
- {
- chr = (ch & 0x01);
- len = 5;
- }
- else if ( ch >= 0xf8 )
- {
- chr = ch & 0x03;
- len = 4;
- }
- else if ( ch >= 0xf0 )
- {
- chr = ch & 0x07;
- len = 3;
- }
- else if ( ch >= 0xe0 )
- {
- chr = ch & 0x0f;
- len = 2;
- }
- else if ( ch >= 0xc0 )
- {
- chr = ch & 0x1f;
- len = 1;
- }
- else
- {
- chr = ch;
- len = 0;
- }
- for( ; len > 0; len-- )
- {
- ch = *mp++;
- chr = ( chr << 6 ) | ( ch & 0x3f );
- }
- if ( chr <= 0x7f )
- *cp++ = chr;
- else
- {
- int code;
-
- if ( (code
- = charset_code_point (Vcharset_japanese_jisx0208,
- chr, 0)) >= 0 )
- {
- *cp++ = (code >> 8) | 0x80;
- *cp++ = (code & 0xFF) | 0x80;
- }
- else if ( (code
- = charset_code_point (Vcharset_katakana_jisx0201,
- chr, 0)) >= 0 )
- {
- *cp++ = ISO_CODE_SS2;
- *cp++ = code | 0x80;
- }
- else if ( (code
- = charset_code_point (Vcharset_japanese_jisx0212,
- chr, 0)) >= 0 )
- {
- *cp++ = ISO_CODE_SS3;
- *cp++ = (code >> 8) | 0x80;
- *cp++ = (code & 0xFF) | 0x80;
- }
- }
-#else
switch (ch)
{
case LEADING_BYTE_KATAKANA_JISX0201:
*cp++ = ch;
break;
}
-#endif
}
*cp = 0;
}