static void x1knjcpy(UINT8 *dst, const UINT8 *src, int from, int to) { int i, j, k; const UINT8 *p; UINT8 *q; UINT sjis; for (i=from; i<to; i++) { q = dst + 0x21000 + (i << 4); for (j=0x21; j<0x7f; j++) { p = NULL; // 漢字のポインタを求める sjis = jis2sjis(((i + 0x20) << 8) | j); if (sjis >= 0x8140 && sjis < 0x84c0) { p = src + 0x00000 + ((sjis - 0x8140) << 5); } else if (sjis >= 0x8890 && sjis < 0xa000) { p = src + 0x07000 + ((sjis - 0x8890) << 5); } else if (sjis >= 0xe040 && sjis < 0xeab0) { p = src + 0x35e00 + ((sjis - 0xe040) << 5); } if (p) { // 規格内コードならば // コピーする for (k=0; k<16; k++) { *(q+k) = *p++; *(q+k+0x800) = *p++; } } q += 0x1000; } } }
char * any2sjis( const char *p ) { char *q; q = utf2sjis( p ); if ( !q ) { // p の charset は UTF-8 ではない if ( strstr( p, "\033$@" ) || strstr( p, "\033$B" ) ) q = jis2sjis( p ); else { q = euc2sjis( p ); if ( !q ) q = (char *)p; // すでに Shift_JIS 変換済み(とみなす) } } return ( q ); }