/**********************************************************************/ /* インクルードファイル */ /**********************************************************************/ #include #include /**********************************************************************/ /* 定数宣言 */ /**********************************************************************/ #define SS1 0x80 /* EUC mask bit */ #define SS2 0x8e /* 半角カタカナ 開始コード */ #define SS3 0xf6 /* 外字開始コード */ /**********************************************************************/ /* 関数名: void main( argc, argv ) */ /* 機能: メイン関数 */ /* 外部参照: */ /* 入力: int argc : パラメータの数 */ /* char *argv[] : パラメータの文字列の配列 */ /* 戻り値: */ /*--------------------------------------------------------------------*/ /* 備考: */ /**********************************************************************/ void main( argc, argv ) int argc; char *argv[]; { FILE *fp; int n, c; if ( argc <= 1 ) { printf("Useage : euc2sj euc-file [euc-file] ...\n"); exit(1); } for( n = 1; n < argc; n++ ) { if ( ( fp = fopen( argv[n] , "r" ) ) == NULL ) { printf("euc2sj : file is not found %s\n", argv[n]); } else { while( feof( fp ) == 0 ) { c = fgetc( fp ); if( c == 0x1a || c < 0 ) break; if ( c == SS2 ) /* 半角カタカナ */ { c = fgetc( fp ); if ( c == 0x1a || c < 0 ) break; putchar( c ); } else if( c == SS3 ) /* EUC kanji 外字 upper byte? */ { int hi, lo; lo = fgetc( fp ) & 0x7f; hi = c & 0x7f; if ( hi & 1 ) lo += 0x1f; else lo += 0x7d; if ( lo >= 0x7f ) lo++; hi = ((hi - 0x21) >> 1) + 0x81; if ( hi > 0x9f ) hi += 0x40; putchar( hi ); putchar( lo ); } else if ( c >= SS1 ) /* EUC kanji upper byte? */ { int hi, lo; lo = fgetc( fp ) & 0x7f; hi = c & 0x7f; if ( hi & 1 ) lo += 0x1f; else lo += 0x7d; if ( lo >= 0x7f ) lo++; hi = ((hi - 0x21) >> 1) + 0x81; if ( hi > 0x9f ) hi += 0x40; putchar( hi ); putchar( lo ); } else putchar( c ); } fclose( fp ); } } exit(0); } /* ========================== END OF FILE =========================== */