lok: re-load UNO bootstrap pieces and set UserInstallation on second init.
[LibreOffice.git] / lotuswordpro / source / filter / lwpobjhdr.cxx
blob844cdf2a9c62b1e345b6917cd51e6ce2de6aa548
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*************************************************************************
4 * The Contents of this file are made available subject to the terms of
5 * either of the following licenses
7 * - GNU Lesser General Public License Version 2.1
8 * - Sun Industry Standards Source License Version 1.1
10 * Sun Microsystems Inc., October, 2000
12 * GNU Lesser General Public License Version 2.1
13 * =============================================
14 * Copyright 2000 by Sun Microsystems, Inc.
15 * 901 San Antonio Road, Palo Alto, CA 94303, USA
17 * This library is free software; you can redistribute it and/or
18 * modify it under the terms of the GNU Lesser General Public
19 * License version 2.1, as published by the Free Software Foundation.
21 * This library is distributed in the hope that it will be useful,
22 * but WITHOUT ANY WARRANTY; without even the implied warranty of
23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
24 * Lesser General Public License for more details.
26 * You should have received a copy of the GNU Lesser General Public
27 * License along with this library; if not, write to the Free Software
28 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
29 * MA 02111-1307 USA
32 * Sun Industry Standards Source License Version 1.1
33 * =================================================
34 * The contents of this file are subject to the Sun Industry Standards
35 * Source License Version 1.1 (the "License"); You may not use this file
36 * except in compliance with the License. You may obtain a copy of the
37 * License at http://www.openoffice.org/license.html.
39 * Software provided under this License is provided on an "AS IS" basis,
40 * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
41 * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
42 * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
43 * See the License for the specific provisions governing your rights and
44 * obligations concerning the Software.
46 * The Initial Developer of the Original Code is: IBM Corporation
48 * Copyright: 2008 by IBM Corporation
50 * All Rights Reserved.
52 * Contributor(s): _______________________________________
55 ************************************************************************/
56 /*************************************************************************
57 * @file
58 * For LWP filter architecture prototype
59 ************************************************************************/
61 #include "lwpobjhdr.hxx"
62 #include "lwpdefs.hxx"
63 #include "lwpfilehdr.hxx"
65 LwpObjectHeader::LwpObjectHeader()
66 : m_nTag(0), m_ID(), m_nSize(0), m_bCompressed(false)
68 /**
69 * @descr read header from stream
71 bool LwpObjectHeader::Read(LwpSvStream &rStrm)
73 sal_uInt32 nVersionID = 0;
74 sal_uInt32 nRefCount = 0;
75 sal_uInt32 nNextVersionOffset = 0;
76 sal_uInt32 nHeaderSize = 0;
78 sal_Int64 nStartPos = rStrm.Tell();
80 if ( LwpFileHeader::m_nFileRevision < 0x000B)
82 rStrm.ReadUInt32( m_nTag );
83 m_ID.Read(&rStrm);
84 rStrm.ReadUInt32( nVersionID );
85 rStrm.ReadUInt32( nRefCount );
86 rStrm.ReadUInt32( nNextVersionOffset );
88 nHeaderSize = sizeof(m_nTag) + LwpObjectID::DiskSize()
89 + sizeof(nVersionID)
90 + sizeof(nRefCount)
91 + sizeof(nNextVersionOffset)
92 + sizeof(m_nSize);
94 if ((m_nTag == TAG_AMI) || ( LwpFileHeader::m_nFileRevision < 0x0006))
96 sal_uInt32 nNextVersionID = 0;
97 rStrm.ReadUInt32( nNextVersionID );
98 nHeaderSize += sizeof(nNextVersionID);
100 rStrm.ReadUInt32( m_nSize );
102 else
104 sal_uInt8 nFlagBits = 0;
105 sal_uInt16 VOType = 0;
106 rStrm.ReadUInt16( VOType );
107 rStrm.ReadUInt8( nFlagBits );
109 m_nTag = static_cast<sal_uInt32>(VOType);
110 m_ID.ReadIndexed(&rStrm);
111 nHeaderSize = sizeof(VOType) + sizeof(nFlagBits) + m_ID.DiskSizeIndexed();
113 sal_uInt8 tmpByte;
114 sal_uInt16 tmpShort;
115 switch (nFlagBits & VERSION_BITS)
117 case ONE_BYTE_VERSION:
118 rStrm.ReadUInt8( tmpByte );
119 nVersionID = static_cast<sal_uInt32>( tmpByte );
120 nHeaderSize++;
121 break;
123 case TWO_BYTE_VERSION:
124 rStrm.ReadUInt16( tmpShort );
125 nVersionID = static_cast<sal_uInt32>( tmpShort );
126 nHeaderSize += 2;
127 break;
129 case FOUR_BYTE_VERSION:
130 rStrm.ReadUInt32( nVersionID );
131 nHeaderSize += 4;
132 break;
133 case DEFAULT_VERSION: //fall through
134 default:
135 nVersionID = 2;
136 break; // nothing
139 switch (nFlagBits & REFCOUNT_BITS)
141 case ONE_BYTE_REFCOUNT:
142 rStrm.ReadUInt8( tmpByte );
143 nRefCount = static_cast<sal_uInt32>( tmpByte );
144 nHeaderSize++;
145 break;
147 case TWO_BYTE_REFCOUNT:
148 rStrm.ReadUInt16( tmpShort );
149 nRefCount = static_cast<sal_uInt32>( tmpShort );
150 nHeaderSize += 2;
151 break;
153 case FOUR_BYTE_REFCOUNT: //through
154 default:
155 rStrm.ReadUInt32( nRefCount );
156 nHeaderSize += 4;
157 break;
160 if (nFlagBits & HAS_PREVOFFSET)
162 rStrm.ReadUInt32( nNextVersionOffset );
163 nHeaderSize += 4;
165 else
166 nNextVersionOffset = BAD_OFFSET;
168 switch (nFlagBits & SIZE_BITS)
170 case ONE_BYTE_SIZE:
171 rStrm.ReadUInt8( tmpByte );
172 m_nSize = static_cast<sal_uInt32>( tmpByte );
173 nHeaderSize++;
174 break;
176 case TWO_BYTE_SIZE:
177 rStrm.ReadUInt16( tmpShort );
178 m_nSize = static_cast<sal_uInt32>(tmpShort);
179 nHeaderSize += 2;
180 break;
182 case FOUR_BYTE_SIZE: //go through
183 default:
184 rStrm.ReadUInt32( m_nSize );
185 nHeaderSize += 4;
186 break;
189 if (nFlagBits & DATA_COMPRESSED)
191 m_bCompressed = true;
194 sal_Int64 nEndPos = rStrm.Tell();
195 return (nStartPos + nHeaderSize == nEndPos);
198 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */