コード例 #1
0
ファイル: 82m2wav.cpp プロジェクト: gerstrong/fheroes2plus
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;
}
コード例 #2
0
ファイル: extractor.cpp プロジェクト: mastermind-/free-heroes
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;
}
コード例 #3
0
ファイル: til2img.cpp プロジェクト: asimonov-im/fheroes2
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;
}