// 漢字コード関連関数群 // (C)2002,2003 Yutaka Wada, AirparkLab // [注意] // 相対パスで読み込めるように便宜上ヘッダファイルにしている。 // インクルードするのは唯一のソースファイルのみとし、他はextern宣言して使用すること。 #ifndef __KANJICODE_H__ #define __KANJICODE_H__ // プロトタイプ宣言 long SJIS2JIS( long s ); long JIS2SJIS( long s ); long EUC2JIS( long s ); long JIS2EUC( long s ); long SJIS2EUC( long s ); long EUC2SJIS( long s ); long NextJIS( long s ); // マクロ定義 #define UPPER( s ) ((s>>8)&0xff) #define LOWER( s ) (s&0xff) #define BUILDWORD( u, l ) (u<<8|l) // SJIS から JIS に変換 long SJIS2JIS( long s ) { if( s <= 0xff ) return( s ); long upper = UPPER( s ); long lower = LOWER( s ); upper -= (upper <= 0x9f) ? 0x71 : 0xb1; upper = (upper<<1) + 1; if( lower > 0x7f ) lower--; if( lower >= 0x9e ){ lower -= 0x7d; upper++; } else lower -= 0x1f; return( BUILDWORD( upper, lower ) ); } // JIS から SJIS に変換 long JIS2SJIS( long s ) { if( s <= 0xff ) return( s ); long upper = UPPER( s ); long lower = LOWER( s ); lower += (upper&1) ? 0x1f : 0x7d; if( lower >= 0x7f ) lower++; upper = ((upper-0x21)>>1) + 0x81; if( upper > 0x9f ) upper += 0x40; return( BUILDWORD( upper, lower ) ); } // EUC から JIS に変換 long EUC2JIS( long s ) { if( s <= 0xff ) return( s ); return( s & ~0x8080 ); } // JIS から EUC に変換 long JIS2EUC( long s ) { if( s <= 0xff ) return( s ); return( s | 0x8080 ); } // SJIS から EUC long SJIS2EUC( long s ) { if( s <= 0xff ) return( s ); return( JIS2EUC( SJIS2JIS( s ) ) ); } // EUC から SJIS long EUC2SJIS( long s ) { if( s <= 0xff ) return( s ); return( JIS2SJIS( EUC2JIS( s ) ) ); } // 入力されたJISコードの次の文字を出力する long NextJIS( long s ) { if( s <= 0xff ) return( (s+1)&0xff ); long upper = UPPER( s ); long lower = LOWER( s ); lower++; if( lower >= 0x7f ){ lower = 0x21; upper++; } if( upper >= 0x7f ) return( 0x2121 ); return( BUILDWORD( upper, lower ) ); } #endif