--- nwatowav.cc 2004-06-02 00:55:17.197648000 +0900 +++ nwatowav.cpp 2004-06-02 03:09:54.333361600 +0900 @@ -150,6 +150,7 @@ // #define NDEBUG /* なぜか assertが入った方が速い、、、 */ #include +#include #include #include /* BEGIN S.Kino */ @@ -340,8 +341,10 @@ if (tmpdata) delete[] tmpdata; } int BlockLength(void) { - if (offsets == 0) return false; - if (tmpdata == 0) return false; + if( complevel != -1 ) { + if (offsets == 0) return false; + if (tmpdata == 0) return false; + } return blocksize * (bps/8); } /* data は BlockLength 以上の長さを持つこと @@ -354,7 +357,6 @@ void NWAData::ReadHeader(FILE* in) { char header[0x2c]; struct stat sb; - int i; if (offsets) delete[] offsets; if (tmpdata) delete[] tmpdata; offsets = 0; @@ -387,7 +389,6 @@ if (complevel == -1) { blocks = 1; blocksize = RAW_PCM_BLOCK_SIZE; - offsets = (int*)-1; return; } /* END S.Kino */ @@ -419,7 +420,7 @@ return; } int NWAData::CheckHeader(void) { - if (offsets == 0) return false; + if (complevel != -1 && offsets == 0) return false; /* データそのもののチェック */ if (channels != 1 && channels != 2) { fprintf(stderr,"This program only supports mono / stereo data : data have %d channels.\n",channels); @@ -435,7 +436,6 @@ } /* BEGIN S.Kino */ if (complevel == -1) { - tmpdata = (char*)-1; return true; } /* END S.Kino */ @@ -469,7 +469,7 @@ int UseRunLength(void) const { return false; } }; int NWAData::Decode(FILE* in, char* data) { - if (offsets == 0 || tmpdata == 0) return -1; + if ((complevel != -1) && (offsets == 0 || tmpdata == 0)) return -1; if (blocks == curblock) return 0; if (feof(in) || ferror(in)) return -1; if (curblock == -1) { @@ -517,6 +517,30 @@ fprintf(stderr,"Cannot open file : %s\n",argv[2]); return -1; } + + { + char *ewav = ".wav"; + char *outfile; + char *pext; + + outfile = new char[ strlen( argv[1] ) + 1 + strlen( ewav ) ]; + strcpy( outfile, argv[1] ); + + pext = strrchr( outfile, '.' ); + if( pext != NULL ) { + *pext = NULL; + } + strcat( outfile, ewav ); + + out = fopen( outfile, "wb" ); + if( out == NULL ) { + perror( outfile ); + delete[] outfile; + return -1; + } + + delete[] outfile; + } } else if (argc == 3) { in = fopen(argv[1],"rb"); out = fopen(argv[2],"wb");