int main(int argc, char **argv) { if(argc != 3) { std::cout << argv[0] << " infile.82m outfile.wav" << std::endl; return EXIT_SUCCESS; } std::fstream fd_data(argv[1], std::ios::in | std::ios::binary); if(fd_data.fail()) { std::cout << "error open file: " << argv[1] << std::endl; return EXIT_SUCCESS; } fd_data.seekg(0, std::ios_base::end); u32 size = fd_data.tellg(); fd_data.seekg(0, std::ios_base::beg); char *body = new char[size]; fd_data.read(body, size); fd_data.close(); std::fstream fd_body(argv[2], std::ios::out | std::ios::binary); if(! fd_body.fail()) { StreamBuf wavHeader(44); wavHeader.putLE32(0x46464952); // RIFF wavHeader.putLE32(size + 0x24); // size wavHeader.putLE32(0x45564157); // WAVE wavHeader.putLE32(0x20746D66); // FMT wavHeader.putLE32(0x10); // size_t wavHeader.putLE16(0x01); // format wavHeader.putLE16(0x01); // channels wavHeader.putLE32(22050); // samples wavHeader.putLE32(22050); // byteper wavHeader.putLE16(0x01); // align wavHeader.putLE16(0x08); // bitsper wavHeader.putLE32(0x61746164); // DATA wavHeader.putLE32(size); // size fd_body.write((const char*) wavHeader.data(), wavHeader.size()); fd_body.close(); } delete [] body; return EXIT_SUCCESS; }
int main(int argc, char **argv) { if(argc != 3) { std::cout << argv[0] << " path_heroes2.agg extract_to_dir" << std::endl; return EXIT_SUCCESS; } std::fstream fd_data(argv[1], std::ios::in | std::ios::binary); if(fd_data.fail()) { std::cout << "error open file: " << argv[1] << std::endl; return EXIT_SUCCESS; } System::MakeDirectory(argv[2]); u16 count = StreamBase::getLE16(fd_data); u16 total = 0; char buf[AGGSIZENAME]; std::vector<aggfat_t> vector(count); for(u16 cur = 0; cur < count; ++cur) { aggfat_t & fat = vector[cur]; fd_data.seekg(-AGGSIZENAME * (count - cur), std::ios_base::end); fd_data.read(buf, AGGSIZENAME); for(u8 ii = 0; ii < AGGSIZENAME; ++ii) buf[ii] = tolower(buf[ii]); fat.name = buf; fd_data.seekg(sizeof(u16) + cur * (3 * sizeof(u32)), std::ios_base::beg); fd_data.seekg(sizeof(u32), std::ios_base::cur); fat.offset = StreamBase::getLE32(fd_data); fat.size = StreamBase::getLE32(fd_data); fd_data.seekg(fat.offset, std::ios_base::beg); char *body = new char[fat.size]; fd_data.read(body, fat.size); const std::string full_name = System::ConcatePath(argv[2], fat.name); std::fstream fd_body(full_name.c_str(), std::ios::out | std::ios::binary); if(! fd_body.fail()) { fd_body.write(body, fat.size); fd_body.close(); ++total; std::cout << "extract: " << full_name << std::endl; } delete [] body; } fd_data.close(); std::cout << "total: " << total << std::endl; return EXIT_SUCCESS; }
int main(int argc, char **argv) { if(argc != 3) { std::cout << argv[0] << " [-d] infile.til extract_to_dir" << std::endl; return EXIT_SUCCESS; } std::fstream fd_data(argv[1], std::ios::in | std::ios::binary); if(fd_data.fail()) { std::cout << "error open file: " << argv[1] << std::endl; return EXIT_SUCCESS; } std::string prefix(argv[2]); std::string shortname(argv[1]); if(shortname == "-d") { } shortname.replace(shortname.find("."), 4, ""); prefix += SEPARATOR + shortname; if(0 != MKDIR(prefix.c_str())) { std::cout << "error mkdir: " << prefix << std::endl; return EXIT_SUCCESS; } fd_data.seekg(0, std::ios_base::end); u32 size = fd_data.tellg(); fd_data.seekg(0, std::ios_base::beg); u16 count, width, height; fd_data.read(reinterpret_cast<char *>(&count), sizeof(u16)); SwapLE16(count); fd_data.read(reinterpret_cast<char *>(&width), sizeof(u16)); SwapLE16(width); fd_data.read(reinterpret_cast<char *>(&height), sizeof(u16)); SwapLE16(height); char *body = new char[size]; fd_data.read(body, size); SDL::Init(); for(u16 cur = 0; cur < count; ++cur) { Surface sf(&body[width * height * cur], width, height, 1, false); std::string dstfile(prefix); dstfile += SEPARATOR; std::ostringstream stream; stream << cur; switch(stream.str().size()) { case 1: dstfile += "00" + stream.str(); break; case 2: dstfile += "0" + stream.str(); break; default: dstfile += stream.str(); break; } #ifndef WITH_IMAGE dstfile += ".bmp"; #else dstfile += ".png"; #endif sf.Save(dstfile.c_str()); } delete [] body; fd_data.close(); std::cout << "expand to: " << prefix << std::endl; SDL::Quit(); return EXIT_SUCCESS; }