void TFile::Copy(const TFilePos& SrcFilePos, const TFilePos& DstFilePos)
{
	TFile SrcFile(SrcFilePos);
	TFile DstFile(DstFilePos);

	if(SrcFilePos.m_bPlainFile)
		SrcFile.Open(FOF_BINARYREAD);
	else
		SrcFile.Open(FOF_READ);

	if(DstFilePos.m_bPlainFile)
		DstFile.Open(FOF_BINARYWRITE);
	else
	{
		if(SrcFilePos.m_szLength > DstFilePos.m_szLength)
			INITIATE_FAILURE;

		DstFile.Open(FOF_WRITE);
	}

	const size_t szBufferSize = g_CommonConsts.m_szFileCopyBufferSize;

	TValueArray<BYTE, true> Buf;
	Buf.Allocate(szBufferSize), Buf.Add(szBufferSize);
	
	size_t szNRemaining = SrcFilePos.m_szLength;
	while(szNRemaining)
	{
		size_t szNTransfer = Min(szNRemaining, szBufferSize);
		SrcFile.Read	(Buf.GetDataPtr(), szNTransfer);
		DstFile.Write	(Buf.GetDataPtr(), szNTransfer);

		szNRemaining -= szNTransfer;
	}
}
void ProcessFile( string FName )
{
	fstream File(FName.c_str(),  ios::in | ios::binary);

	if( File.good() == false )
	{
		cout << endl << "[ERROR] Unable to open file "<< FName;
		cout << endl;
		return;
	}


	// - make directory -------------------------------------------------------

	string mdcmd = "mkdir ";
	string pkgdir = ".\\";
	pkgdir.append(FName, 0, FName.find('.'));
	pkgdir.append("\\Classes\\");
	mdcmd.append(pkgdir);

	system(mdcmd.c_str());


	// - header ---------------------------------------------------------------
	PKG_Header PKGHeader;
	File.read((char*)(&PKGHeader), sizeof(PKGHeader));

	// info
//	cout << endl << "Package Version " << dec << LOWORD(PKGHeader.PackageVersion);
//	cout << endl << "Licencee Mode   " << dec << HIWORD(PKGHeader.PackageVersion);


	// - get scripttext index -------------------------------------------------
	
	DWORD STIndex = -1;
	NameItem* NameList = ReadNameTable( File, PKGHeader.NameOffset, PKGHeader.NameCount, STIndex );
	if( STIndex == -1 )
	{
		cout << endl << "[ERROR] ScriptText not found in the NameTable";
		cout << endl;
		return;
	}
	

	// - find scripttexts in export table -------------------------------------

	ExportItem* ExportList = ReadExportTable( File, PKGHeader.ExportOffset, PKGHeader.ExportCount );


	DWORD i;
	for(i=0; i<PKGHeader.ExportCount; i++)
	{
		if( ExportList[i].ObjectName == STIndex )
		{
			//cout << endl << "[" << i << "] " << dec << NameList[ExportList[ExportList[i].Package-1].ObjectName].Name;
			char *buffer = ReadTextBuffer( File, ExportList[i].SerialOffset );
			string fname = pkgdir + "\\" + NameList[ExportList[ExportList[i].Package-1].ObjectName].Name + ".uc";
			fstream SrcFile(fname.c_str(), ios_base::out | ios_base::trunc | ios_base::binary);
			SrcFile << buffer;
			SrcFile.close();

			//cout << endl << buffer;
			delete[] buffer;
		}
	}

	
    File.close();
	return;
}
Beispiel #3
0
json::Array ReadiumJSApi::getJSON(shared_ptr<const ePub3::SMILData::Sequence> seqBody)
{
    json::Array ret;
    //TODO: populateChildren
    const shared_vector<const ePub3::SMILData::TimeContainer>::size_type k = seqBody->GetChildrenCount();
    shared_vector<const SMILData::TimeContainer>::size_type i = 0;
    for (; i < k; ++i)
    {
        shared_ptr<const SMILData::TimeContainer> timeContainer = seqBody->GetChild(i);
        json::Object obj;

        if (timeContainer->IsParallel())
        {
            auto para = std::dynamic_pointer_cast<const ePub3::SMILData::Parallel>(timeContainer);
            auto audio = para->Audio();
            auto text = para->Text();
            json::Array ret1;
            if (audio)
            {
                json::Object obj1;

                {
                    std::ostringstream stringStream;
                    stringStream << audio->ClipEndMilliseconds() / 1000.;
                    std::string copyOfStr = stringStream.str();

                    obj1["clipEnd"] = copyOfStr;
                }

                obj1["nodeType"] = std::string("audio");
                obj1["src"] = std::string(audio->SrcFile().c_str());	//"audio\/mobydick_001_002_melville.mp4",

                {
                    std::ostringstream stringStream;
                    stringStream << audio->ClipBeginMilliseconds() / 1000.;
                    std::string copyOfStr = stringStream.str();

                    obj1["clipBegin"] = copyOfStr;
                }
                ret1.push_back(obj1);
            }
            if (text)
            {
                json::Object obj2;

                obj2["srcFile"] = std::string(text->SrcFile().c_str());				//"chapter_002.xhtml",
                obj2["srcFragmentId"] = std::string(text->SrcFragmentId().c_str());	//"c02h01",
                obj2["nodeType"] = std::string("text");
                obj2["src"] = std::string(text->SrcFile().c_str()) + "#" + std::string(text->SrcFragmentId().c_str());    // "chapter_002.xhtml#c02h01"

                ret1.push_back(obj2);
            }
            obj["children"] = ret1;
            obj["nodeType"] = std::string("par");
        }
        else if (timeContainer->IsSequence())
        {
            auto sequence = std::dynamic_pointer_cast<const ePub3::SMILData::Sequence>(timeContainer);
            obj["textref"] = std::string(sequence->TextRefFile().c_str());
            //obj["textref"] =
            json::Array children = getJSON(sequence);
            obj["children"] = children;
            obj["nodeType"] = std::string("seq");
        }

        //obj["nodeType"] = std::string(timeContainer->Type().c_str());
        obj["epubtype"] = std::string("");

        //"textref" : "",
        //Sequence
        //timeContainer->Name().c_str();
        //"textref" : "",
        //"epubtype" : ""
        //"children" : []
        //qDebug() << obj;
        ret.push_back(obj);
    }
    return ret;
}