Beispiel #1
0
 public void Append(byte[] data)
 {
     m_PageBuffer.put(data);
 }
Beispiel #2
0
        void AddHeader(byte[] thumbnail)
        {
            // Put magic marker at front
            m_FileData.putChar(0, 'L');
            m_FileData.putChar(2, 'R');
            m_FileData.putChar(4, 'F');

            // Put LRF version in file
            m_FileData.putShort(LRF_VERSION, 999);             // 0x3E7

            // Put in an encryption key (place holder for now)
            m_FileData.putShort(LRF_PSUEDOKEY, 0x30);

            // Set book direction to forwards
            m_FileData.put(LRF_DIRECTION, LRF_DIRECTION_FORWARDS);

            // Put Dimensions
            m_FileData.putShort(LRF_UNK1, 800 * 2);
            m_FileData.putShort(LRF_UNK2, 600);
            m_FileData.putShort(LRF_UNK3, 800);

            // Various unknown (but critical) values
            m_FileData.put(LRF_UNK4, 0x18);

            m_FileData.putShort(LRF_TOC_OFFSET, 0x1536);             // XXX is this legit?

            m_FileData.put(LRF_UNK6, 0x14);

            // Set position to just past header
            m_FileData.Position = 0x54;

            // XML file containing metadata
            byte[] metaData         = SerializeMetaData();
            int    compressedLength = putCompressedBytes(metaData);

            m_FileData.putShort(LRF_INFOLEN, (ushort)(compressedLength + 4));

            // Thumbnail (60x80)
            m_FileData.putInt(LRF_THUMBNAIL_LENGTH, thumbnail.Length);
            m_FileData.put(thumbnail);

            // 16-byte align before placing first BBeBObject into file.
            m_FileData.AlignPosition(16);

            // Put BBeBObjects into file
            for (int i = 0; i < m_BookObjects.Count; i++)
            {
                putObjectData(m_BookObjects[i]);
            }

            // 16-byte align before placing BBeBObject tree into file
            m_FileData.AlignPosition(16);

            // Put BBEBObject info into LRF header
            // And yes, these are technically 64 bits each...
            m_FileData.putInt(LRF_OBJECT_COUNT, m_BookObjects.Count);
            m_FileData.putInt(LRF_OBJECTTREE_OFFSET, (int)m_FileData.Position);

            // Put BBeBObject tree into file
            for (int i = 0; i < m_BookObjects.Count; i++)
            {
                LegacyBBeBObject obj = m_BookObjects[i];
                m_FileData.putInt(obj.m_Id);
                m_FileData.putInt((int)obj.m_nFileLocation);
                m_FileData.putInt(obj.m_nSizeInFile);
                m_FileData.putInt(0);
            }
        }