public void Append(byte[] data) { m_PageBuffer.put(data); }
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); } }