Ejemplo n.º 1
0
    size_t CelFile::readCl2ArchiveFrames(FAIO::FAFile* file)
    {
        FAIO::FAfseek(file, 0, SEEK_SET);
        
        std::vector<uint32_t> headerOffsets(8);
        FAIO::FAfread(&headerOffsets[0], 4, 8, file);
        
        uint32_t numFrames;

        for(size_t i = 0; i < 8; i++)
        {
            FAIO::FAfseek(file, headerOffsets[i], SEEK_SET);

            FAIO::FAfread(&numFrames, 4, 1, file);

            std::vector<uint32_t> frameOffsets(numFrames+1);


            for(size_t j = 0; j <= numFrames; j++)
                FAIO::FAfread(&frameOffsets[j], 4, 1, file);


            FAIO::FAfseek(file, headerOffsets[i]+ frameOffsets[0], SEEK_SET);
            
            for(size_t j = 0; j < numFrames; j++)
            {
                mFrames.push_back(std::vector<uint8_t>(frameOffsets[j+1]-frameOffsets[j]));
                FAIO::FAfread(&mFrames[mFrames.size()-1][0], 1, frameOffsets[j+1]-frameOffsets[j], file);
            }
        }

        return numFrames;
    }
Ejemplo n.º 2
0
    size_t CelFile::readCl2ArchiveFrames(FAIO::FAFile* file)
    {
        FAIO::FAfseek(file, 0, SEEK_SET);
        
        std::vector<uint32_t> headerOffsets(8);
        FAIO::FAfread(&headerOffsets[0], 4, 8, file);
        
        uint32_t numFrames;

        for(size_t i = 0; i < 8; i++)
        {
            FAIO::FAfseek(file, headerOffsets[i], SEEK_SET);

            FAIO::FAfread(&numFrames, 4, 1, file);

            std::vector<uint32_t> frameOffsets(numFrames+1);

            bool error = false;

            for(size_t j = 0; j <= numFrames; j++)
            {
                int success = FAIO::FAfread(&frameOffsets[j], 4, 1, file);

                // Dirty hack to prevent further loading cl2 
                // that can't be loaded because we don't know how.
                if(!success)
                {
                    error = true;
                    numFrames = 0;
                    break;
                }
            }

            if(error)
                break;

            FAIO::FAfseek(file, headerOffsets[i]+ frameOffsets[0], SEEK_SET);
            
            for(size_t j = 0; j < numFrames; j++)
            {
                int diff = frameOffsets[j+1]-frameOffsets[j];

                if(diff > 0)
                {
                    mFrames.push_back(std::vector<uint8_t>(diff));
                    FAIO::FAfread(&mFrames[mFrames.size()-1][0], 1, diff, file);
                }
            }
        }

        return numFrames;
    }