/* * 8to7.c * * ファイル中に埋め込まれた `8bit' という文字列を * `7bit' に書き換えるプログラム * * 使用例: * Microsoft Internet Mail & News が生成 * するヘッダ * Content-Transfer-Encoding: 8bit * が * Content-Transfer-Encoding: 7bit * になるようにロードモジュール(正確には * DLL)を変更する * * cd c:\tmp * 8to7 c:\windows\system\mailnews.dll mailnews.bin * copy mailnews.bin c:\windows\system\mailnews.dll */ #include #include #include void main( argc, argv ) int argc; char *argv[]; { long j = 0, k = 0; int c; FILE *fp = stdin, *gp = stdout; if ( argc >= 1 ) { if ( ( fp = fopen( argv[1], "rb" ) ) == NULL ) { fprintf( stderr, "%s: cannot find <%s>\n", argv[0], argv[1] ); exit( 1 ); } } if ( argc >= 2 ) { if ( ( gp = fopen( argv[2], "wb" ) ) == NULL ) { fprintf( stderr, "%s: cannot create <%s>\n", argv[0], argv[2] ); exit( 1 ); } } while ( 1 ) { if ( ( c = fgetc( fp ) ) == EOF ) break; j++; if ( c == '8' ) { if ( ( c = fgetc( fp ) ) == EOF ) { fputc( '8', gp ); k++; break; } j++; if ( c == 'b' ) { if ( ( c = fgetc( fp ) ) == EOF ) { fputs( "8b", gp ); k += 2; break; } j++; if ( c == 'i' ) { if ( ( c = fgetc( fp ) ) == EOF ) { fputs( "8bi", gp ); k += 3; break; } j++; if ( c == 't' ) { fputs( "7bit", gp ); k += 4; continue; } else { fputs( "8bi", gp ); k += 3; } } else { fputs( "8b", gp ); k += 2; } } else { fputc( '8', gp ); k++; } } fputc( c, gp ); k++; } if ( gp != stdout ) fclose( gp ); if ( fp != stdin ) fclose( fp ); fprintf( stderr, "input: %ld bytes / output: %ld bytes\n", j, k ); exit( 0 ); }