/**********************************************************************/ /* インクルードファイル */ /**********************************************************************/ #include #include /**********************************************************************/ /* 定数宣言 */ /**********************************************************************/ #define SS1 0x80 /* EUC mask bit */ #define SS2 0x8e /* 半角カタカナ 開始コード */ #define SS3 0xf6 /* 外字開始コード */ #define SJ1 0x81 /* SJIS コード */ #define SJ2 0xa0 /* 半角カタカナコード(はじめ) */ #define SJ3 0xdf /* 半角カタカナコード(終わり) */ #define SJ4 0xe0 /* SJIS コード */ /**********************************************************************/ /* 関数名: 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 : sj2euc sjis-file [sjis-file] ...\n"); exit(1); } for( n = 1; n < argc; n++ ) { if ( ( fp = fopen( argv[n] , "r" ) ) == NULL ) { printf("sj2euc : file is not found %s\n", argv[n]); } else { while( feof( fp ) == 0 ) { c = fgetc( fp ); if( c == 0x1a || c < 0 ) break; if ( c >= SJ4 ) /* SJIS 第2水準 */ { /* SJIS -> JIS 変換 */ /* 8180〜effc -> 2121〜7e7e */ int hi, lo; lo = fgetc( fp ); hi = ((c - 0xc1) << 1) + 0x21; if ( lo > 0x7f ) lo--; lo -= 0x1f; if ( lo >= 0x7f ) { hi++; lo -= 0x5e; } putchar( hi | SS1 ); putchar( lo | SS1 ); } else if ( c >= SJ2 ) /* 半角カタカナ */ { putchar( SS2 ); putchar( c ); } else if ( c >= SJ1 ) /* SJIS 第1水準 */ { /* SJIS -> JIS 変換 */ /* 8180〜effc -> 2121〜7e7e */ int hi, lo; lo = fgetc( fp ); hi = ((c - 0x81) << 1) + 0x21; if ( lo > 0x7f ) lo--; lo -= 0x1f; if ( lo >= 0x7f ) { hi++; lo -= 0x5e; } putchar( hi | SS1 ); putchar( lo | SS1 ); } else putchar( c ); } fclose( fp ); } } exit(0); } /* ========================== END OF FILE =========================== */