diff options
| author | Ted Gould <ted@gould.cx> | 2006-07-31 05:14:00 +0000 |
|---|---|---|
| committer | gouldtj <gouldtj@users.sourceforge.net> | 2006-07-31 05:14:00 +0000 |
| commit | 1b268270d703d308dad917363a9e1ad950bbe566 (patch) | |
| tree | cdb3579b27d2223cd75ef135e84e0b0e253438b5 /src/extension/internal/libwpg/WPGHeader.cpp | |
| parent | handling recieved messages (diff) | |
| download | inkscape-1b268270d703d308dad917363a9e1ad950bbe566.tar.gz inkscape-1b268270d703d308dad917363a9e1ad950bbe566.zip | |
r13105@tres: ted | 2006-07-30 11:08:56 -0700
Copying in libwpg as it seems they have no releases.
(bzr r1522)
Diffstat (limited to 'src/extension/internal/libwpg/WPGHeader.cpp')
| -rw-r--r-- | src/extension/internal/libwpg/WPGHeader.cpp | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/src/extension/internal/libwpg/WPGHeader.cpp b/src/extension/internal/libwpg/WPGHeader.cpp new file mode 100644 index 000000000..8daf35700 --- /dev/null +++ b/src/extension/internal/libwpg/WPGHeader.cpp @@ -0,0 +1,123 @@ +/* libwpg + * Copyright (C) 2006 Ariya Hidayat (ariya@kde.org) + * Copyright (C) 2004 Marc Oude Kotte (marc@solcon.nl) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02111-1301 USA + * + * For further information visit http://libwpg.sourceforge.net + */ + +/* "This product is not manufactured, approved, or supported by + * Corel Corporation or Corel Corporation Limited." + */ + +#include "WPGHeader.h" +#include "libwpg_utils.h" + +namespace +{ +static inline unsigned short readU16( const void* p ) +{ + const unsigned char* ptr = (const unsigned char*) p; + return ptr[0]+(ptr[1]<<8); +} + +static inline unsigned long readU32( const void* p ) +{ + const unsigned char* ptr = (const unsigned char*) p; + return ptr[0]+(ptr[1]<<8)+(ptr[2]<<16)+(ptr[3]<<24); +} +} + +using namespace libwpg; + +WPGHeader::WPGHeader() +{ + // create a sensible default header + m_identifier[0] = 0xff; + m_identifier[1] = 'W'; + m_identifier[2] = 'P'; + m_identifier[3] = 'C'; + m_productType = 0x01; + m_fileType = 0x16; + m_encryptionKey = 0x00; + m_majorVersion = 0x02; + m_minorVersion = 0x00; + m_encryptionKey = 0; + m_startOfPacketData = 0; + m_entryCount = 0; + m_resourceComplete = 0; + m_encryptionBlockOffset = 0; + m_fileSize = 0; + m_encryptVersion = 0; +} + +bool WPGHeader::load(WPGInputStream *input) +{ + input->seek(0); + + unsigned char prefix[26]; + long n = input->read(26, (char*)prefix); + if(n < 26) + return false; + + m_identifier[0] = prefix[0]; + m_identifier[1] = prefix[1]; + m_identifier[2] = prefix[2]; + m_identifier[3] = prefix[3]; + m_startOfDocument = readU32(prefix+4); + m_productType = prefix[8]; + m_fileType = prefix[9]; + m_majorVersion = prefix[10]; + m_minorVersion = prefix[11]; + m_encryptionKey = readU16(prefix+12); + m_startOfPacketData = readU16(prefix+14); + + WPG_DEBUG_MSG(("Header Identifier = %c%c%c\n", m_identifier[1], + m_identifier[2], m_identifier[3])); + WPG_DEBUG_MSG(("Product type = 0x%x\n", m_productType)); + WPG_DEBUG_MSG(("File type = 0x%x\n", m_fileType)); + WPG_DEBUG_MSG(("Major version = 0x%x\n", m_majorVersion)); + WPG_DEBUG_MSG(("Minor version = 0x%x\n", m_minorVersion)); + WPG_DEBUG_MSG(("Encryption key = 0x%x\n", m_encryptionKey)); + + return true; +} + +bool WPGHeader::isSupported() const +{ + return ( + (m_identifier[0] == 0xFF) && + (m_identifier[1] == 'W') && + (m_identifier[2] == 'P') && + (m_identifier[3] == 'C') && + (m_productType == 0x01) && + (m_fileType == 0x16) && + (m_encryptionKey == 0x00) && // we don't support encryption + ((m_majorVersion == 0x02) || (m_majorVersion == 0x01)) && + (m_minorVersion == 0x00) +); +} + +unsigned long WPGHeader::startOfDocument() const +{ + return m_startOfDocument; +} + +int WPGHeader::majorVersion() const +{ + return m_majorVersion; +} |
