summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorOliver Bolte <obo@openoffice.org>2009-09-07 14:41:16 +0000
committerOliver Bolte <obo@openoffice.org>2009-09-07 14:41:16 +0000
commit712e83090c793bd4a29ca77022e52d7fd82b70f7 (patch)
treea99332b510e1f35aa87260ce05f266cd821cf023 /sc
parent613092ae9962ef82c9b752de54ab1573f369ed15 (diff)
CWS-TOOLING: integrate CWS dr72
2009-08-26 10:24:00 +0200 dr r275402 : #i92645# CODEPAGE is encrypted... 2009-08-24 14:37:36 +0200 dr r275316 : #i10000# enable exceptions for xlroot.cxx 2009-08-24 14:33:15 +0200 dr r275313 : #i10000# link openssl under solaris correctly 2009-08-21 17:41:16 +0200 dr r275267 : #i10000# unxlngi6 warning 2009-08-21 15:35:56 +0200 dr r275265 : #i10000# remove files again, already deleted in previous milestone... 2009-08-21 11:24:57 +0200 dr r275227 : #160401# port to DEV300 2009-08-21 09:53:45 +0200 dr r275221 : #i92645# full support for encrypted Word2007 files 2009-08-21 09:50:52 +0200 dr r275219 : #i92645# final changes for decryption 2009-08-20 19:48:40 +0200 dr r275195 : #i104370# missing parentheses, patch from cmc 2009-08-20 18:28:22 +0200 dr r275193 : #i92645# rework package decryption to repair 'Reload Document' functionality 2009-08-20 13:55:14 +0200 dr r275179 : #i92645# add new property names 2009-08-19 19:24:21 +0200 dr r275159 : #160401# open writeprotected files read-only, merged to DEV300 2009-08-18 14:41:47 +0200 dr r275109 : #i92645# add 'Aborted' property 2009-08-18 11:20:34 +0200 dr r275084 : #i92645# write back password to medium 2009-08-17 17:52:51 +0200 dr r275066 : #i92645# detect Word2007 docs with oox detection impl, this adds support of encryped Word2007; correct detection of templates and macro-enabled docs 2009-08-17 17:51:31 +0200 dr r275065 : #i92645# detect Word2007 docs with oox detection impl, this adds support of encryped Word2007; correct detection of templates and macro-enabled docs 2009-08-17 11:06:39 +0200 dr r275035 : #i92645# more password handling 2009-08-17 11:05:21 +0200 dr r275034 : #i92645# use new password input mechanism for BIFF filter and dumper in oox 2009-08-14 16:33:53 +0200 nn r274996 : #i104228# DelBroadcastAreasInRange: remove area from hash_set before deleting 2009-08-14 16:27:12 +0200 nn r274995 : #i104059# restore a change lost in the integration of fhawfixes1 2009-08-14 16:24:00 +0200 dr r274994 : #i92645# adapt BIFF import to latest changes 2009-08-14 16:21:30 +0200 dr r274993 : #i92645# adapt BIFF import to latest changes 2009-08-14 16:20:43 +0200 dr r274992 : #i92645# do not add default passwords to media descriptor 2009-08-13 19:20:45 +0200 dr r274965 : #i92645# add a helper to request a document password 2009-08-13 19:09:35 +0200 dr r274964 : #i92645# add a helper to request a document password 2009-08-13 19:09:03 +0200 dr r274963 : #i92645# add a helper to request a document password 2009-08-13 14:35:01 +0200 dr r274946 : #i92645# comment typo 2009-08-13 14:33:47 +0200 dr r274945 : #i92645# add a helper to request a document password 2009-08-13 14:04:47 +0200 dr r274941 : #i92645# add a helper to request a document password 2009-08-13 14:04:22 +0200 dr r274940 : #i92645# add a helper to request a document password 2009-08-13 11:16:27 +0200 dr r274927 : #i42303# show quick help if field name too long for button 2009-08-13 10:55:48 +0200 dr r274925 : #i31600# cut field name and add ellipsis, if too long for button 2009-08-12 18:47:26 +0200 dr r274914 : #i92645# ask user for a password 2009-08-12 18:02:39 +0200 dr r274909 : #i104183# move svtools/DocPasswordRequest to comphelper to be able to use it in oox 2009-08-12 16:59:11 +0200 dr r274906 : #i104183# move svtools/DocPasswordRequest to comphelper to be able to use it in oox 2009-08-12 16:41:18 +0200 dr r274905 : #i104183# move svtools/DocPasswordRequest to comphelper to be able to use it in oox 2009-08-12 16:40:33 +0200 dr r274904 : #i104183# move svtools/DocPasswordRequest to comphelper to be able to use it in oox 2009-08-12 16:40:08 +0200 dr r274903 : #i104183# move svtools/DocPasswordRequest to comphelper to be able to use it in oox 2009-08-12 16:39:30 +0200 dr r274902 : #i104183# move svtools/DocPasswordRequest to comphelper to be able to use it in oox 2009-08-12 16:15:28 +0200 dr r274899 : #i104183# move svtools/DocPasswordRequest to comphelper to be able to use it in oox 2009-08-11 19:51:12 +0200 dr r274877 : #i92645# open encrypted MSOOXML package protected with standard XL password 'VelvetSweatshop'
Diffstat (limited to 'sc')
-rw-r--r--sc/source/core/data/bcaslot.cxx2
-rw-r--r--sc/source/filter/excel/biffdump.cxx9864
-rw-r--r--sc/source/filter/excel/excel.cxx36
-rw-r--r--sc/source/filter/excel/impop.cxx11
-rw-r--r--sc/source/filter/excel/makefile.mk2
-rw-r--r--sc/source/filter/excel/read.cxx5
-rw-r--r--sc/source/filter/excel/xestream.cxx2
-rw-r--r--sc/source/filter/excel/xicontent.cxx34
-rw-r--r--sc/source/filter/excel/xiroot.cxx12
-rw-r--r--sc/source/filter/excel/xistream.cxx164
-rw-r--r--sc/source/filter/excel/xlroot.cxx8
-rw-r--r--sc/source/filter/excel/xlstream.cxx52
-rw-r--r--sc/source/filter/ftools/fapihelper.cxx53
-rw-r--r--sc/source/filter/inc/fapihelper.hxx6
-rw-r--r--sc/source/filter/inc/fdumper.hxx1520
-rw-r--r--sc/source/filter/inc/fdumperole.hxx186
-rw-r--r--sc/source/filter/inc/imp_op.hxx2
-rw-r--r--sc/source/filter/inc/xestream.hxx3
-rw-r--r--sc/source/filter/inc/xiroot.hxx6
-rw-r--r--sc/source/filter/inc/xistream.hxx62
-rw-r--r--sc/source/filter/inc/xlcontent.hxx4
-rw-r--r--sc/source/filter/inc/xldumper.hxx683
-rw-r--r--sc/source/filter/inc/xlroot.hxx8
-rw-r--r--sc/source/filter/inc/xlstream.hxx13
-rw-r--r--sc/source/ui/dbgui/fieldwnd.cxx60
-rw-r--r--sc/source/ui/inc/fieldwnd.hxx9
-rw-r--r--sc/source/ui/view/output2.cxx6
27 files changed, 252 insertions, 12561 deletions
diff --git a/sc/source/core/data/bcaslot.cxx b/sc/source/core/data/bcaslot.cxx
index ff82d1fd362f..85f8a4921242 100644
--- a/sc/source/core/data/bcaslot.cxx
+++ b/sc/source/core/data/bcaslot.cxx
@@ -294,13 +294,13 @@ void ScBroadcastAreaSlot::DelBroadcastAreasInRange( const ScRange& rRange )
if (rRange.In( rAreaRange))
{
ScBroadcastArea* pArea = *aIter;
+ aBroadcastAreaTbl.erase( aIter++); // erase before modifying
if (!pArea->DecRef())
{
if (pBASM->IsInBulkBroadcast())
pBASM->RemoveBulkArea( pArea);
delete pArea;
}
- aBroadcastAreaTbl.erase( aIter++);
}
else
++aIter;
diff --git a/sc/source/filter/excel/biffdump.cxx b/sc/source/filter/excel/biffdump.cxx
deleted file mode 100644
index c3478cf8cb50..000000000000
--- a/sc/source/filter/excel/biffdump.cxx
+++ /dev/null
@@ -1,9864 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: biffdump.cxx,v $
- * $Revision: 1.91 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_sc.hxx"
-#include "biffdump.hxx"
-
-#if EXC_INCL_DUMPER
-#include <tools/stream.hxx>
-#include <sfx2/docfile.hxx>
-#include <sfx2/objsh.hxx>
-#include <sot/storinfo.hxx>
-
-#include <string.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-#include <rtl/math.hxx>
-#include "document.hxx"
-#include "global.hxx"
-#include "fprogressbar.hxx"
-#include "xlpivot.hxx"
-#include "xicontent.hxx"
-#include "imp_op.hxx"
-
-#define GETSTR(s) ByteString( s, RTL_TEXTENCODING_MS_1252 )
-
-static const sal_Char* __pHexPrefix = "0x";
-static const sal_Char* __pBinPrefix = "0b";
-static const sal_Char* pU = "UNKNOWN ";
-
-const sal_Char* Biff8RecDumper::pLevelPreString = " ";
-const sal_Char* Biff8RecDumper::pLevelPreStringNT = pLevelPreString + strlen( pLevelPreString );
-UINT32 Biff8RecDumper::nInstances = 0;
-sal_Char* Biff8RecDumper::pBlankLine = NULL;
-const UINT16 Biff8RecDumper::nLenBlankLine = 255;
-const UINT16 Biff8RecDumper::nRecCnt = 0x2020;
-UINT8* Biff8RecDumper::pCharType = NULL;
-UINT8* Biff8RecDumper::pCharVal = NULL;
-
-static const UINT16 nLevelInc = 1;
-
-static UINT16 nXFCount = 0;
-
-static UINT16 nSXLISize[2] = {0, 0}; // array size for SXLI records [rows/cols]
-static UINT16 nSXLIIndex = 0; // current index for SXLI records
-
-// ============================================================================
-
-namespace {
-
-// decimal --------------------------------------------------------------------
-
-inline void lclAppendDec( ByteString& rStr, sal_uInt8 nData )
-{
- rStr.Append( ByteString::CreateFromInt32( nData ) );
-}
-
-inline void lclAppendDec( ByteString& rStr, sal_Int8 nData )
-{
- rStr.Append( ByteString::CreateFromInt32( nData ) );
-}
-
-inline void lclAppendDec( ByteString& rStr, sal_uInt16 nData )
-{
- rStr.Append( ByteString::CreateFromInt32( nData ) );
-}
-
-inline void lclAppendDec( ByteString& rStr, sal_Int16 nData )
-{
- rStr.Append( ByteString::CreateFromInt32( nData ) );
-}
-
-inline void lclAppendDec( ByteString& rStr, sal_uInt32 nData )
-{
- rStr.Append( ByteString::CreateFromInt64( nData ) );
-}
-
-inline void lclAppendDec( ByteString& rStr, sal_Int32 nData )
-{
- rStr.Append( ByteString::CreateFromInt32( nData ) );
-}
-
-inline void lclAppendDec( ByteString& rStr, float fData )
-{
- rStr.Append( ByteString( ::rtl::math::doubleToString( fData, rtl_math_StringFormat_G, 15, '.', true ) ) );
-}
-
-inline void lclAppendDec( ByteString& rStr, double fData )
-{
- rStr.Append( ByteString( ::rtl::math::doubleToString( fData, rtl_math_StringFormat_G, 15, '.', true ) ) );
-}
-
-// hexadecimal ----------------------------------------------------------------
-
-void lclAppendHex( ByteString& rStr, sal_uInt8 nData, bool bPrefix = true )
-{
- static const sal_Char spcHexDigits[] = "0123456789ABCDEF";
- static const ByteString saPrefix( "0x" );
-
- if( bPrefix )
- rStr.Append( saPrefix );
- rStr.Append( spcHexDigits[ (nData >> 4) & 0x0F ] ).Append( spcHexDigits[ nData & 0x0F ] );
-}
-
-inline void lclAppendHex( ByteString& rStr, sal_Int8 nData, bool bPrefix = true )
-{
- lclAppendHex( rStr, static_cast< sal_uInt8 >( nData ), bPrefix );
-}
-
-void lclAppendHex( ByteString& rStr, sal_uInt16 nData, bool bPrefix = true )
-{
- lclAppendHex( rStr, static_cast< sal_uInt8 >( nData >> 8 ), bPrefix );
- lclAppendHex( rStr, static_cast< sal_uInt8 >( nData ), false );
-}
-
-inline void lclAppendHex( ByteString& rStr, sal_Int16 nData, bool bPrefix = true )
-{
- lclAppendHex( rStr, static_cast< sal_uInt16 >( nData ), bPrefix );
-}
-
-void lclAppendHex( ByteString& rStr, sal_uInt32 nData, bool bPrefix = true )
-{
- lclAppendHex( rStr, static_cast< sal_uInt16 >( nData >> 16 ), bPrefix );
- lclAppendHex( rStr, static_cast< sal_uInt16 >( nData ), false );
-}
-
-inline void lclAppendHex( ByteString& rStr, sal_Int32 nData, bool bPrefix = true )
-{
- lclAppendHex( rStr, static_cast< sal_uInt32 >( nData ), bPrefix );
-}
-
-inline void lclAppendHex( ByteString& rStr, double fData, bool bPrefix = true )
-{
- const sal_uInt32* pnData = reinterpret_cast< const sal_uInt32* >( &fData );
- lclAppendHex( rStr, pnData[ 0 ], bPrefix );
- lclAppendHex( rStr, pnData[ 1 ], false );
-}
-
-// others ---------------------------------------------------------------------
-
-void lclAppendGuid( ByteString& rStr, const XclGuid& rGuid )
-{
- lclAppendHex( rStr, SVBT32ToUInt32( rGuid.mpnData ), false );
- rStr.Append( '-' );
- lclAppendHex( rStr, SVBT16ToShort( rGuid.mpnData + 4 ), false );
- rStr.Append( '-' );
- lclAppendHex( rStr, SVBT16ToShort( rGuid.mpnData + 6 ), false );
- rStr.Append( '-' );
- lclAppendHex( rStr, rGuid.mpnData[ 8 ], false );
- lclAppendHex( rStr, rGuid.mpnData[ 9 ], false );
- rStr.Append( '-' );
- lclAppendHex( rStr, rGuid.mpnData[ 10 ], false );
- lclAppendHex( rStr, rGuid.mpnData[ 11 ], false );
- lclAppendHex( rStr, rGuid.mpnData[ 12 ], false );
- lclAppendHex( rStr, rGuid.mpnData[ 13 ], false );
- lclAppendHex( rStr, rGuid.mpnData[ 14 ], false );
- lclAppendHex( rStr, rGuid.mpnData[ 15 ], false );
-}
-
-} // namespace
-
-// ============================================================================
-
-static void __AddHexNibble( ByteString& r, UINT8 nVal )
-{
- const sal_Char pH[] = "0123456789ABCDEF";
-
- nVal &= 0x0F;
-
- r += pH[ nVal ];
-}
-
-
-static void __AddPureHex( ByteString& r, UINT8 nVal )
-{
- __AddHexNibble( r, nVal >> 4 );
- __AddHexNibble( r, nVal );
-}
-
-
-static void __AddHex( ByteString& r, UINT8 nVal )
-{
- r += __pHexPrefix;
- __AddHexNibble( r, nVal >> 4 );
- __AddHexNibble( r, nVal );
-}
-
-
-static void __AddPureHex( ByteString& r, UINT16 nVal )
-{
- __AddHexNibble( r, ( UINT8 ) ( nVal >> 12 ) );
- __AddHexNibble( r, ( UINT8 ) ( nVal >> 8 ) );
- __AddHexNibble( r, ( UINT8 ) ( nVal >> 4 ) );
- __AddHexNibble( r, ( UINT8 ) nVal );
-}
-
-
-static void __AddHex( ByteString& r, UINT16 nVal )
-{
- r += __pHexPrefix;
- __AddHexNibble( r, ( UINT8 ) ( nVal >> 12 ) );
- __AddHexNibble( r, ( UINT8 ) ( nVal >> 8 ) );
- __AddHexNibble( r, ( UINT8 ) ( nVal >> 4 ) );
- __AddHexNibble( r, ( UINT8 ) nVal );
-}
-
-
-static void __AddPureHex( ByteString& r, UINT32 nVal )
-{
- __AddHexNibble( r, ( UINT8 ) ( nVal >> 28 ) );
- __AddHexNibble( r, ( UINT8 ) ( nVal >> 24 ) );
- __AddHexNibble( r, ( UINT8 ) ( nVal >> 20 ) );
- __AddHexNibble( r, ( UINT8 ) ( nVal >> 16 ) );
- __AddHexNibble( r, ( UINT8 ) ( nVal >> 12 ) );
- __AddHexNibble( r, ( UINT8 ) ( nVal >> 8 ) );
- __AddHexNibble( r, ( UINT8 ) ( nVal >> 4 ) );
- __AddHexNibble( r, ( UINT8 ) nVal );
-}
-
-
-static void __AddHex( ByteString& r, UINT32 nVal )
-{
- r += __pHexPrefix;
- __AddHexNibble( r, ( UINT8 ) ( nVal >> 28 ) );
- __AddHexNibble( r, ( UINT8 ) ( nVal >> 24 ) );
- __AddHexNibble( r, ( UINT8 ) ( nVal >> 20 ) );
- __AddHexNibble( r, ( UINT8 ) ( nVal >> 16 ) );
- __AddHexNibble( r, ( UINT8 ) ( nVal >> 12 ) );
- __AddHexNibble( r, ( UINT8 ) ( nVal >> 8 ) );
- __AddHexNibble( r, ( UINT8 ) ( nVal >> 4 ) );
- __AddHexNibble( r, ( UINT8 ) nVal );
-}
-
-
-static void __AddHex( ByteString& r, INT32 nVal )
-{
- __AddHex( r, (UINT32) nVal );
-}
-
-
-static void __AddPureBinNibble( ByteString& r, UINT8 nVal )
-{
- nVal <<= 4;
- for( int n = 4 ; n ; n-- )
- {
- r += ( nVal & 0x80 )? "1" : "0";
- nVal <<= 1;
- }
-}
-
-
-static void __AddPureBin( ByteString& r, UINT8 nVal )
-{
- __AddPureBinNibble( r, nVal >> 4 );
- r += " ";
- __AddPureBinNibble( r, nVal );
-}
-
-
-static void __AddPureBin( ByteString& r, UINT16 nVal )
-{
- const sal_Char* pIn = " ";
- __AddPureBin( r, ( UINT8 ) ( nVal >> 8 ) );
- r += pIn;
- __AddPureBin( r, ( UINT8 ) nVal );
-}
-
-
-static void __AddPureBin( ByteString& r, UINT32 nVal )
-{
- const sal_Char* pIn = " ";
- __AddPureBin( r, ( UINT8 ) ( nVal >> 24 ) );
- r += pIn;
- __AddPureBin( r, ( UINT8 ) ( nVal >> 16 ) );
- r += pIn;
- __AddPureBin( r, ( UINT8 ) ( nVal >> 8 ) );
- r += pIn;
- __AddPureBin( r, ( UINT8 ) nVal );
-}
-
-
-inline static void __AddDec( ByteString& r, UINT32 n )
-{
- sal_Char p[ 32 ];
- sprintf( p, "%u", n ); // #100211# - checked
- r += p;
-}
-
-
-inline static void __AddDec( ByteString& r, UINT16 n )
-{
- __AddDec( r, ( UINT32 ) n );
-}
-
-
-inline static void __AddDec( ByteString& r, UINT8 n )
-{
- __AddDec( r, ( UINT32 ) n );
-}
-
-
-inline static void __AddDec( ByteString& r, INT32 n )
-{
- sal_Char p[ 32 ];
- sprintf( p, "%d", n ); // #100211# - checked
- r += p;
-}
-
-
-inline static void __AddDec( ByteString& r, INT16 n )
-{
- __AddDec( r, ( INT32 ) n );
-}
-
-inline static void __AddDec( ByteString& r, sal_Int8 n )
-{
- __AddDec( r, ( INT32 ) n );
-}
-
-
-static void __AddDec( ByteString& r, UINT32 nVal, UINT16 nNumOfDig, sal_Char c = ' ' )
-{
- ByteString t;
- ByteString aVal;
- __AddDec( aVal, nVal );
- if( nNumOfDig > (UINT16) aVal.Len() )
- t.Fill( nNumOfDig - (UINT16) aVal.Len(), c );
- r += t;
- r += aVal;
-}
-
-
-inline static void __AddDec1616( ByteString& r, UINT32 n )
-{
- __AddDec( r, (UINT16)(n >> 16) );
- r += '.';
- __AddDec( r, (UINT16)(n & 0xFFFF) );
-}
-
-
-static void __AddDouble( ByteString& r, const double f )
-{
- r += ByteString( ::rtl::math::doubleToString( f, rtl_math_StringFormat_G, 15, '.', TRUE ) );
-}
-
-
-static inline void __AddRK( ByteString& rString, sal_Int32 nRKValue )
-{
- __AddDouble( rString, XclTools::GetDoubleFromRK( nRKValue ) );
-}
-
-
-inline static void __Add16p16( ByteString& r, UINT32 n )
-{
- __AddDouble( r, double(n) / 65536.0 );
-}
-
-
-static void lcl_AddRef( ByteString& rStr, sal_uInt16 nCol, sal_uInt16 nRow )
-{
- ScAddress aRef( static_cast< SCCOL >( nCol ), static_cast< SCROW >( nRow ), 0 );
- rStr.Append( GETSTR( aRef.GetColRowString() ) );
-}
-
-
-static void lcl_AddRangeRef( ByteString& rStr, sal_uInt16 nCol1, sal_uInt16 nRow1, sal_uInt16 nCol2, sal_uInt16 nRow2 )
-{
- lcl_AddRef( rStr, nCol1, nRow1 );
- if( (nCol1 != nCol2) || (nRow1 != nRow2) )
- {
- rStr.Append( ':' );
- lcl_AddRef( rStr, nCol2, nRow2 );
- }
-}
-
-
-static void __AddCellHead( ByteString& r, const UINT16 nC, const UINT16 nR, const UINT16 nXF )
-{
- lcl_AddRef( r, (UINT8) nC, nR );
- r += " (XF=";
- __AddDec( r, nXF );
- r += ')';
-}
-
-
-inline static void lcl_AddFlag(
- ByteString& rString, bool bFlag, const sal_Char* pcTrue = "true", const sal_Char* pcFalse = "false" )
-{
- rString += (bFlag ? pcTrue : pcFalse);
-}
-
-inline static void lcl_AddOnOff( ByteString& rString, bool bFlag )
-{
- lcl_AddFlag( rString, bFlag, "on", "off" );
-}
-
-
-static void lcl_AddEnum(
- ByteString& rString, long nValue, const sal_Char* const ppcEnums[], long nSize,
- const sal_Char* pcDefault = 0, long nOffset = 0 )
-{
- nValue -= nOffset;
- const sal_Char* pcText = "!unknown!";
- if( (0 <= nValue) && (nValue < nSize) && ppcEnums[ nValue ] )
- pcText = ppcEnums[ nValue ];
- else if( pcDefault )
- pcText = pcDefault;
- if( *pcText ) // nonempty string
- rString.Append( " (" ).Append( pcText ).Append( ')' );
-}
-
-
-namespace {
-
-void lclDumpString( SvStream& rOutStrm, const ByteString& rData )
-{
- ByteString aOutStr;
- xub_StrLen nIdx = 0;
- for( ; (nIdx < rData.Len()) && (aOutStr.Len() < 80); ++nIdx )
- {
- sal_Char cChar = rData.GetChar( nIdx );
- if( 32 <= cChar )
- aOutStr.Append( cChar );
- else
- {
- aOutStr.Append( '<' );
- __AddHex( aOutStr, static_cast< sal_uInt8 >( cChar ) );
- aOutStr.Append( '>' );
- }
- }
- rOutStrm << aOutStr.GetBuffer();
- if( nIdx < rData.Len() )
- rOutStrm << "<...>";
-}
-
-void lclDumpStringValue( SvStream& rOutStrm, const ByteString& rName, const ByteString& rData )
-{
- rOutStrm << rName.GetBuffer() << "='";
- lclDumpString( rOutStrm, rData );
- rOutStrm << '\'';
-}
-
-void lclDumpString( SvStream& rOutStrm, const String& rData )
-{
- ByteString aOutStr;
- xub_StrLen nIdx = 0;
- for( ; (nIdx < rData.Len()) && (aOutStr.Len() < 80); ++nIdx )
- {
- sal_Unicode cChar = rData.GetChar( nIdx );
- if( (32 <= cChar) && (cChar <= 255) )
- aOutStr.Append( static_cast< sal_Char >( cChar ) );
- else
- {
- aOutStr.Append( '<' );
- if( cChar < 256 )
- __AddHex( aOutStr, static_cast< sal_uInt8 >( cChar ) );
- else
- __AddHex( aOutStr, static_cast< sal_uInt16 >( cChar ) );
- aOutStr.Append( '>' );
- }
- }
- rOutStrm << aOutStr.GetBuffer();
- if( nIdx < rData.Len() )
- rOutStrm << "<...>";
-}
-
-void lclDumpStringValue( SvStream& rOutStrm, const ByteString& rName, const String& rData )
-{
- rOutStrm << rName.GetBuffer() << "='";
- lclDumpString( rOutStrm, rData );
- rOutStrm << '\'';
-}
-
-} // namespace
-
-
-IdRangeList::~IdRangeList()
-{
- Clear();
-}
-
-
-void IdRangeList::Clear( void )
-{
- IdRange* p = ( IdRange* ) First();
-
- while( p )
- {
- delete p;
- p = ( IdRange* ) Next();
- }
-
- List::Clear();
-}
-
-// ============================================================================
-//
-// H E L P E R O B J E C T S
-//
-// ============================================================================
-
-namespace {
-
-// ----------------------------------------------------------------------------
-
-class XclDumpStreamHeader
-{
-public:
- explicit XclDumpStreamHeader( SvStream& rInStrm, SvStream& rOutStrm, const String& rStrmName, const String& rStrmPath );
- ~XclDumpStreamHeader();
- inline ULONG GetStreamLen() const { return mnStrmLen; }
-
-private:
- SvStream& mrOutStrm;
- String maStrmName;
- String maStrmPath;
- ByteString maSeparator;
- ULONG mnStrmLen;
-};
-
-XclDumpStreamHeader::XclDumpStreamHeader( SvStream& rInStrm, SvStream& rOutStrm, const String& rStrmName, const String& rStrmPath ) :
- mrOutStrm( rOutStrm ),
- maStrmName( rStrmName ),
- maStrmPath( rStrmPath ),
- mnStrmLen( 0 )
-{
- maSeparator.Assign( '+' ).Expand( 78, '-' );
-
- rInStrm.Seek( STREAM_SEEK_TO_END );
- mnStrmLen = rInStrm.Tell();
- rInStrm.Seek( STREAM_SEEK_TO_BEGIN );
-
- ByteString aLine;
- lclAppendDec( aLine, mnStrmLen );
-
- mrOutStrm << maSeparator.GetBuffer() << "\n";
- mrOutStrm << "| STREAM-BEGIN\n";
- mrOutStrm << "| ";
- lclDumpStringValue( mrOutStrm, "stream-name", maStrmName );
- mrOutStrm << "\n| ";
- lclDumpStringValue( mrOutStrm, "stream-path", maStrmPath );
- mrOutStrm << "\n| stream-len=" << aLine.GetBuffer() << "\n";
- mrOutStrm << "|\n\n";
-}
-
-XclDumpStreamHeader::~XclDumpStreamHeader()
-{
- mrOutStrm << "|\n";
- mrOutStrm << "| ";
- lclDumpStringValue( mrOutStrm, "stream-name", maStrmName );
- mrOutStrm << "\n| ";
- lclDumpStringValue( mrOutStrm, "stream-path", maStrmPath );
- mrOutStrm << "\n";
- mrOutStrm << "| STREAM-END\n";
- mrOutStrm << maSeparator.GetBuffer() << "\n\n";
-}
-
-// ----------------------------------------------------------------------------
-
-class XclDumpStorageHeader
-{
-public:
- explicit XclDumpStorageHeader( SotStorage& rInStrg, SvStream& rOutStrm, const String& rStrgPath );
- ~XclDumpStorageHeader();
-
-private:
- SvStream& mrOutStrm;
- String maStrgName;
- String maStrgPath;
- ByteString maSeparator;
-};
-
-XclDumpStorageHeader::XclDumpStorageHeader( SotStorage& rInStrg, SvStream& rOutStrm, const String& rStrgPath ) :
- mrOutStrm( rOutStrm ),
- maStrgName( rInStrg.GetName() ),
- maStrgPath( rStrgPath )
-{
- maSeparator.Assign( "++" ).Expand( 78, '=' );
-
- mrOutStrm << maSeparator.GetBuffer() << "\n";
- mrOutStrm << "|| STORAGE-BEGIN\n";
- mrOutStrm << "|| ";
- lclDumpStringValue( mrOutStrm, "storage-name", maStrgName );
- mrOutStrm << "\n|| ";
- lclDumpStringValue( mrOutStrm, "storage-path", maStrgPath );
- mrOutStrm << "\n";
-
- SvStorageInfoList aInfoList;
- rInStrg.FillInfoList( &aInfoList );
- ByteString aLine;
- lclAppendDec( aLine, aInfoList.Count() );
- mrOutStrm << "|| directory-size=" << aLine.GetBuffer() << "\n";
-
- for( ULONG nInfo = 0; nInfo < aInfoList.Count(); ++nInfo )
- {
- SvStorageInfo& rInfo = aInfoList.GetObject( nInfo );
- mrOutStrm << "|| type=";
- if( rInfo.IsStream() )
- mrOutStrm << "stream ";
- else if( rInfo.IsStorage() )
- mrOutStrm << "storage ";
- else
- mrOutStrm << "unknown ";
- lclDumpStringValue( mrOutStrm, "name", rInfo.GetName() );
- mrOutStrm << "\n";
- }
-
- mrOutStrm << "||\n\n";
-}
-
-XclDumpStorageHeader::~XclDumpStorageHeader()
-{
- mrOutStrm << "||\n";
- mrOutStrm << "|| ";
- lclDumpStringValue( mrOutStrm, "storage-name", maStrgName );
- mrOutStrm << "\n|| ";
- lclDumpStringValue( mrOutStrm, "storage-path", maStrgPath );
- mrOutStrm << "\n";
- mrOutStrm << "|| STORAGE-END\n";
- mrOutStrm << maSeparator.GetBuffer() << "\n\n";
-}
-
-// ----------------------------------------------------------------------------
-
-}
-
-// ============================================================================
-//
-// ============================================================================
-
-void Biff8RecDumper::Print( const ByteString& r )
-{
- DBG_ASSERT( pDumpStream, "-Biff8RecDumper::Print(): Stream is wech!" );
- *pDumpStream << '\n' << pLevelPre;
- pDumpStream->Write( r.GetBuffer(), r.Len() );
-}
-
-
-void Biff8RecDumper::Print( const sal_Char* p )
-{
- DBG_ASSERT( pDumpStream, "-Biff8RecDumper::Print(): Stream is wech!" );
- DBG_ASSERT( p, "-Biff8RecDumper::Print(): ByteString is wech!" );
-
- *pDumpStream << '\n' << pLevelPre << p;
-}
-
-
-static const sal_Char* GetSeriesType( const UINT16 n )
-{
- const sal_Char* p;
-
- switch( n )
- {
- case 0: p = "(date) "; break;
- case 1: p = "(numeric) "; break;
- case 2: p = "(sequence)"; break;
- case 3: p = "(text) "; break;
- default: p = "(unknown) ";
- }
-
- return p;
-}
-
-
-static const sal_Char* GetLineType( const UINT16 n )
-{
- const sal_Char* p;
-
- switch( n )
- {
- case 0: p = "solid"; break;
- case 1: p = "dash"; break;
- case 2: p = "dot"; break;
- case 3: p = "dash-dot"; break;
- case 4: p = "dash-dot-dot"; break;
- case 5: p = "none"; break;
- case 6: p = "dark gray pattern"; break;
- case 7: p = "medium gray pattern"; break;
- case 8: p = "light gray pattern"; break;
- default: p = pU;
- }
-
- return p;
-}
-
-
-static ByteString GetRGB( const UINT32 n )
-{
- ByteString s;
-
- s += "R";
- __AddDec( s, ( UINT8 ) n );
- s += " G";
- __AddDec( s, ( UINT8 ) ( n >> 8 ) );
- s += " B";
- __AddDec( s, ( UINT8 ) ( n >> 16 ) );
-
- return s;
-}
-
-
-static void AddRef( ByteString& t, UINT16 nRow, UINT16 nC, BOOL bName, UINT16 nTab = 0xFFFF )
-{
- BOOL bColRel = ( nC & 0x4000 ) != 0;
- BOOL bRowRel = ( nC & 0x8000 ) != 0;
- UINT8 nCol = (UINT8) nC;
- INT8 nRelCol = (INT8) nCol;
- INT16 nRelRow = (INT16) nRow;
-
- if( nTab < 0xFFFF )
- {
- t += "XTI(";
- __AddDec( t, nTab );
- t += ")!";
- }
-
- if( bName )
- {
- // dump relative: [Column|Row]
- // [C-1,R-1] = one column left, one row up
- // [C+1,R+1] = one column right, one row down
- // [C,R] = same column/row
- // [C=B,R=2] = absolute column B/row 2
- t += "[C";
- if( bColRel )
- {
- if( nRelCol > 0 )
- t += '+';
- if( nRelCol != 0 )
- __AddDec( t, (INT16)nRelCol );
- }
- else
- {
- t += '=';
- t += GETSTR( ::ScScColToAlpha( nCol ) );
- }
-
- t += ",R";
- if( bRowRel )
- {
- if( nRelRow > 0 )
- t += "+";
- if( nRelRow != 0 )
- __AddDec( t, nRelRow );
- }
- else
- {
- t += '=';
- __AddDec( t, (INT32)nRow + 1 );
- }
- t += ']';
- }
- else
- {
- if( !bColRel )
- t += '$';
- t += GETSTR( ::ScColToAlpha( nCol ) );
- if( !bRowRel )
- t += '$';
- __AddDec( t, (UINT16)(nRow + 1) );
- }
-}
-
-static void AddRangeRef( ByteString& t, UINT16 nRow1, UINT16 nC1, UINT16 nRow2, UINT16 nC2, BOOL bName, UINT16 nTab = 0xFFFF )
-{
- AddRef( t, nRow1, nC1, bName, nTab );
- if( (nRow1 != nRow2) || (nC1 != nC2) )
- {
- t += ':';
- AddRef( t, nRow2, nC2, bName );
- }
-}
-
-
-
-static BOOL AddUNICODEString( ByteString& rStr, XclImpStream& rStrm, const BOOL b16BitLen = TRUE, UINT16 nLen = 0, ByteString* pRawName = 0 )
-{
- BOOL bRet = TRUE;
-
- if( !nLen )
- nLen = b16BitLen ? rStrm.ReaduInt16() : rStrm.ReaduInt8();
- UINT8 nGrbit = rStrm.ReaduInt8();
-
- UINT32 nExtLen;
- UINT16 nCrun;
- bool b16Bit, bFarEast, bRichString;
- rStrm.ReadUniStringExtHeader( b16Bit, bRichString, bFarEast, nCrun, nExtLen, nGrbit );
-
- rStr += "(l=";
- __AddDec( rStr, nLen );
- rStr += " f=";
- __AddHex( rStr, nGrbit );
- rStr += " ";
- rStr += b16Bit ? "16-Bit" : "8-Bit";
-
- if( bRichString && bFarEast )
- rStr += " rich far-east";
- else if( bRichString && !bFarEast )
- rStr += " rich";
- else if ( !bRichString && bFarEast )
- rStr += " far-east";
- rStr += ") '";
-
- ByteString aData( rStrm.ReadRawUniString( nLen, b16Bit ), RTL_TEXTENCODING_MS_1252 );
- if( pRawName ) *pRawName = aData;
-
- xub_StrLen nIndex = 0;
- while( (nIndex < aData.Len()) && (nIndex < 255) )
- {
- UINT8 nChar = (UINT8)aData.GetChar( nIndex );
- if( nChar < ' ' )
- {
- ByteString aIns( '<' );
- __AddHex( aIns, nChar );
- aIns += '>';
- aData.Erase( nIndex, 1 ).Insert( aIns, nIndex );
- nIndex += 5;
- }
- nIndex++;
- }
-
- rStr += aData.Copy( 0, 255 );
- rStr += '\'';
- if( aData.Len() > 255 )
- rStr += "...";
-
- if( nCrun )
- {
- rStr += " + ";
- __AddDec( rStr, nCrun );
- rStr += " format blocks (";
- nCrun *= 4;
- __AddDec( rStr, nCrun );
- rStr += " bytes)";
- rStrm.Ignore( nCrun );
- }
- if( nExtLen )
- {
- rStr += " + ";
- __AddDec( rStr, nExtLen );
- rStr += " byte extended:";
- for( sal_uInt32 nIdx = 0; rStrm.IsValid() && (nIdx < nExtLen); ++nIdx )
- {
- rStr.Append( ' ' );
- __AddPureHex( rStr, rStrm.ReaduInt8() );
- }
- }
-
- return bRet;
-}
-
-
-DUMP_ERR::~DUMP_ERR()
-{
- if( pHint )
- delete pHint;
-}
-
-
-
-
-#define Read1(rIn) (rIn).ReaduInt8()
-#define Read2(rIn) (rIn).ReaduInt16()
-#define Read4(rIn) (rIn).ReaduInt32()
-#define Read8(rIn) (rIn).ReadDouble()
-#define LINESTART() {t.Erase();t+=pPre;}
-#define IGNORE(n) rIn.Ignore(n)
-#define ADDBIN(n) __AddBin( t, Read##n( rIn ) )
-#define ADDHEX(n) __AddHex( t, Read##n( rIn ) )
-#define ADDDEC(n) __AddDec( t, Read##n( rIn ) )
-#define ADDDOUBLE() __AddDouble( t, rIn.ReadDouble() )
-#define ADD16P16() __Add16p16( t, Read4( rIn ) )
-#define ADDTEXT(T) t += T
-#define PRINT() Print( t )
-#define PreDump(LEN) {rIn.PushPosition();ContDump(LEN);rIn.PopPosition();}
-#define ADDCELLHEAD() {UINT16 nR,nC,nX;rIn>>nR>>nC>>nX;__AddCellHead(t,nC,nR,nX);}
-#define STARTFLAG() {ADDTEXT( "flags=" ); __AddHex( t, __nFlags ); ADDTEXT( " " );}
-#define ADDFLAG(mask,text) {if( __nFlags & mask ) t.Append( ' ' ).Append( text );}
-#define ADDRESERVED(mask) ADDFLAG(mask,"!RESERVED!")
-
-
-UINT16 Biff8RecDumper::DumpXF( XclImpStream& rStrm, const sal_Char* pPre )
-{
- ByteString t; // "t" needed by macros
-
- sal_uInt32 nBorder1, nBorder2;
- sal_uInt16 nFont, nNumFmt, nTypeProt, nAlign, nMiscAttrib, nArea, __nFlags, nTmp;
- rStrm >> nFont >> nNumFmt >> nTypeProt >> nAlign >> nMiscAttrib >> nBorder1 >> nBorder2 >> nArea;
- bool bCell = !::get_flag( nTypeProt, EXC_XF_STYLE );
-
- // XF type/parent
- LINESTART();
- ::extract_value( nTmp, nTypeProt, 4, 12 );
- ADDTEXT( "index=#" ); __AddDec( t, nXFCount++ );
- ADDTEXT( " type=" ); lcl_AddFlag( t, bCell, "cell", "style" );
- ADDTEXT( " parent-xf=#" ); __AddDec( t, nTmp );
- PRINT();
-
- // attribute used flags
- LINESTART();
- ::extract_value( __nFlags, nMiscAttrib, 10, 6 );
- if( !bCell ) __nFlags ^= 0x3F; // in style XFs a 0 means used
- ADDTEXT( "used " ); STARTFLAG();
- ADDFLAG( EXC_XF_DIFF_VALFMT, "numfmt" );
- ADDFLAG( EXC_XF_DIFF_FONT, "font" );
- ADDFLAG( EXC_XF_DIFF_ALIGN, "align" );
- ADDFLAG( EXC_XF_DIFF_BORDER, "border" );
- ADDFLAG( EXC_XF_DIFF_AREA, "area" );
- ADDFLAG( EXC_XF_DIFF_PROT, "prot" );
- PRINT();
-
- // cell protection/font/number format
- LINESTART();
- ADDTEXT( "cell-lock=" ); lcl_AddOnOff( t, ::get_flag( nTypeProt, EXC_XF_LOCKED ) );
- ADDTEXT( " hidden=" ); lcl_AddOnOff( t, ::get_flag( nTypeProt, EXC_XF_HIDDEN ) );
- ADDTEXT( " font=" ); __AddDec( t, nFont );
- ADDTEXT( " num-fmt=" ); __AddDec( t, nNumFmt );
- PRINT();
-
- // alignment
- LINESTART();
- ::extract_value( nTmp, nAlign, 0, 3 );
- ADDTEXT( "hor-align=" ); __AddDec( t, nTmp );
- ADDTEXT( " (" );
- switch( nTmp )
- {
- case EXC_XF_HOR_GENERAL: ADDTEXT( "general" ); break;
- case EXC_XF_HOR_LEFT: ADDTEXT( "left" ); break;
- case EXC_XF_HOR_CENTER: ADDTEXT( "center" ); break;
- case EXC_XF_HOR_RIGHT: ADDTEXT( "right" ); break;
- case EXC_XF_HOR_FILL: ADDTEXT( "fill" ); break;
- case EXC_XF_HOR_JUSTIFY: ADDTEXT( "justify" ); break;
- case EXC_XF_HOR_CENTER_AS: ADDTEXT( "center-as" ); break;
- case EXC_XF_HOR_DISTRIB: ADDTEXT( "distrib" ); break;
- default: ADDTEXT( "!unknown!" );
- };
- ::extract_value( nTmp, nAlign, 4, 3 );
- ADDTEXT( ") ver-align=" ); __AddDec( t, nTmp );
- ADDTEXT( " (" );
- switch( nTmp )
- {
- case EXC_XF_VER_TOP: ADDTEXT( "top" ); break;
- case EXC_XF_VER_CENTER: ADDTEXT( "center" ); break;
- case EXC_XF_VER_BOTTOM: ADDTEXT( "bottom" ); break;
- case EXC_XF_VER_JUSTIFY: ADDTEXT( "justify" ); break;
- case EXC_XF_VER_DISTRIB: ADDTEXT( "distrib" ); break;
- default: ADDTEXT( "!unknown!" );
- };
- ADDTEXT( ") text-wrap=" ); lcl_AddOnOff( t, ::get_flag( nAlign, EXC_XF_LINEBREAK ) );
- PRINT();
-
- LINESTART();
- ::extract_value( nTmp, nAlign, 8, 8 );
- ADDTEXT( "rotation=" ); __AddDec( t, nTmp );
- ADDTEXT( " (" );
- if( nTmp < 91 )
- { __AddDec( t, nTmp ); ADDTEXT( "\xB0" ); }
- else if( nTmp < 181 )
- { __AddDec( t, static_cast< sal_Int32 >( 90 - nTmp ) ); ADDTEXT( "\xB0" ); }
- else if( nTmp == EXC_ROT_STACKED )
- { ADDTEXT( "stacked" ); }
- else
- { ADDTEXT( "!unknown!" ); }
- ::extract_value( nTmp, nMiscAttrib, 0, 4 );
- ADDTEXT( ") indent=" ); __AddDec( t, nTmp );
- ADDTEXT( " shrink=" ); lcl_AddOnOff( t, ::get_flag( nMiscAttrib, EXC_XF8_SHRINK ) );
- ::extract_value( nTmp, nMiscAttrib, 6, 2 );
- ADDTEXT( " text-dir=" ); __AddDec( t, nTmp );
- ADDTEXT( " (" );
- switch( nTmp )
- {
- case EXC_XF_TEXTDIR_CONTEXT: ADDTEXT( "context" ); break;
- case EXC_XF_TEXTDIR_LTR: ADDTEXT( "ltr" ); break;
- case EXC_XF_TEXTDIR_RTL: ADDTEXT( "rtl" ); break;
- default: ADDTEXT( "!unknown!" );
- };
- ADDTEXT( ")" );
- PRINT();
-
- // border/area
- LINESTART();
- ::extract_value( nTmp, nBorder1, 0, 4 );
- ADDTEXT( "left-line=" ); __AddDec( t, nTmp );
- ::extract_value( nTmp, nBorder1, 16, 7 );
- ADDTEXT( " color=" ); __AddDec( t, nTmp );
- ::extract_value( nTmp, nBorder1, 4, 4 );
- ADDTEXT( " right-line =" ); __AddDec( t, nTmp );
- ::extract_value( nTmp, nBorder1, 23, 7 );
- ADDTEXT( " color=" ); __AddDec( t, nTmp );
- PRINT();
- LINESTART();
- ::extract_value( nTmp, nBorder1, 8, 4 );
- ADDTEXT( "top-line =" ); __AddDec( t, nTmp );
- ::extract_value( nTmp, nBorder2, 0, 7 );
- ADDTEXT( " color=" ); __AddDec( t, nTmp );
- ::extract_value( nTmp, nBorder1, 12, 4 );
- ADDTEXT( " bottom-line=" ); __AddDec( t, nTmp );
- ::extract_value( nTmp, nBorder2, 7, 7 );
- ADDTEXT( " color=" ); __AddDec( t, nTmp );
- PRINT();
- LINESTART();
- ::extract_value( nTmp, nBorder2, 21, 4 );
- ADDTEXT( "diag-line=" ); __AddDec( t, nTmp );
- ::extract_value( nTmp, nBorder2, 14, 7 );
- ADDTEXT( " color=" ); __AddDec( t, nTmp );
- ADDTEXT( " diag-tl-to-br=" ); lcl_AddOnOff( t, ::get_flag( nBorder1, 0x40000000UL ) );
- ADDTEXT( " diag-bl-to-tr=" ); lcl_AddOnOff( t, ::get_flag( nBorder1, 0x80000000UL ) );
- PRINT();
- LINESTART();
- ::extract_value( nTmp, nBorder2, 26, 6 );
- ADDTEXT( "area-pattern=" ); __AddDec( t, nTmp );
- ::extract_value( nTmp, nArea, 0, 7 );
- ADDTEXT( " fore-color=" ); __AddDec( t, nTmp );
- ::extract_value( nTmp, nArea, 7, 7 );
- ADDTEXT( " back-color=" ); __AddDec( t, nTmp );
- PRINT();
-
- return 0;
-}
-
-void Biff8RecDumper::DumpValidPassword( XclImpStream& rIn, const sal_Char* pPre )
-{
- ByteString t;
- UINT16 nHash;
- rIn >> nHash;
- LINESTART();
- ADDTEXT( "hash=" );
- __AddHex( t, nHash );
- if( nHash )
- {
- ByteString sPasswd;
- ByteString sDummy;
- UINT16 nLen = 9;
- UINT16 nDummy;
- UINT16 nNewChar;
-
- nHash ^= 0xCE4B;
- nDummy = nHash;
- ADDTEXT( " without-mask=" );
- __AddHex( t, nHash );
- while( !(nDummy & 0x8000) && nLen )
- {
- nLen--;
- nDummy <<= 1;
- }
- if( !nLen ) nLen = 2;
- if( (nLen ^ nHash) & 0x0001 ) nLen++;
- if( nLen == 9 )
- {
- nLen = 10;
- nHash ^= 0x8001;
- }
- nHash ^= nLen;
- if( nLen < 9 ) nHash <<= (8 - nLen);
- for( UINT16 iChar = nLen; iChar > 0; iChar-- )
- {
- switch( iChar )
- {
- case 10:
- nNewChar = (nHash & 0xC000) | 0x0400;
- nHash ^= nNewChar;
- nNewChar >>= 2;
- break;
- case 9:
- nNewChar = 0x4200;
- nHash ^= nNewChar;
- nNewChar >>= 1;
- break;
- case 1:
- nNewChar = nHash & 0xFF00;
- break;
- default:
- nNewChar = (nHash & 0xE000) ^ 0x2000;
- if( !nNewChar ) nNewChar = (nHash & 0xF000) ^ 0x1800;
- if( nNewChar == 0x6000 ) nNewChar = 0x6100;
- nHash ^= nNewChar;
- nHash <<= 1;
- break;
- }
- nNewChar >>= 8;
- nNewChar &= 0x00FF;
- sDummy = sPasswd;
- sPasswd = (sal_Char) nNewChar;
- sPasswd += sDummy;
- }
- ADDTEXT( " valid-password='" );
- t += sPasswd;
- ADDTEXT( "'" );
- }
- PRINT();
-}
-
-
-void __AddGUID( ByteString& rStr, XclImpStream& rIn )
-{
- UINT16 nIndex;
- __AddPureHex( rStr, Read4( rIn ) );
- rStr += "-";
- __AddPureHex( rStr, Read2( rIn ) );
- rStr += "-";
- __AddPureHex( rStr, Read2( rIn ) );
- rStr += "-";
- // last 2 parts byte for byte
- for( nIndex = 0; nIndex < 2; nIndex++ )
- __AddPureHex( rStr, Read1( rIn ) );
- rStr += "-";
- for( nIndex = 0; nIndex < 6; nIndex++ )
- __AddPureHex( rStr, Read1( rIn ) );
-}
-
-
-void Biff8RecDumper::PreDumpDecrypted( ULONG nL )
-{
- if( !nL ) return;
-
- ByteString t;
- const sal_Char* pPre = (pLevelPre > pLevelPreString) ? pLevelPre - 1 : pLevelPre;
-
- LINESTART();
- ADDTEXT( "*** encrypted ***" );
- PRINT();
- pIn->DisableDecryption();
- pIn->Seek( EXC_REC_SEEK_TO_BEGIN );
- ContDump( nL );
-
- if( pIn->HasValidDecrypter() )
- {
- LINESTART();
- ADDTEXT( "*** decrypted ***" );
- PRINT();
- pIn->EnableDecryption();
- pIn->Seek( EXC_REC_SEEK_TO_BEGIN );
- ContDump( nL );
- }
-}
-
-
-void Biff8RecDumper::RecDump( BOOL bSubStream )
-{
- const sal_Char* p;
- BOOL bDec = FALSE;
- ByteString aTmp;
- UINT16 __nFlags;
- const UINT16 nR = pIn->GetRecId();
- const ByteString* pName = GetName( nR );
-
- // set CONTINUE handling mode
- switch( nR )
- {
- case 0x000A: // EOF
- case 0x003C: // CONT
- case 0x005D: // OBJ
- case 0x00EC: // MSODRAWING
- case 0x01B6: // TXO
- pIn->ResetRecord( false );
- break;
- case 0x1066: // CHGELFRAME
- pIn->ResetRecord( bReadContRecs, 0x1066 );
- break;
- default:
- pIn->ResetRecord( bReadContRecs );
- }
- const ULONG nL = pIn->GetRecSize();
-
- switch( nR )
- {
- case 0x0009:
- case 0x0209:
- case 0x0409:
- case 0x0809:
- nLevelCnt = 0;
- break;
- case 0x1033:
- if( pName )
- aTmp = *pName;
- else
- aTmp = "BEGIN ";
- bDec = ( pLevelPre + nLevelInc ) >= pLevelPreString;
- nLevelCnt++;
- aTmp.Append( ByteString::CreateFromInt32( nLevelCnt ) );
- pName = &aTmp;
- break;
- case 0x1034:
- if( pName )
- aTmp = *pName;
- else
- aTmp = "END ";
- if( ( pLevelPre + nLevelInc ) <= pLevelPreStringNT )
- pLevelPre += nLevelInc;
- if( nLevelCnt )
- {
- aTmp.Append( ByteString::CreateFromInt32( nLevelCnt ) );
- nLevelCnt--;
- }
- else
- aTmp += "#LEVEL ERROR#";
- pName = &aTmp;
- break;
- }
-
- ByteString aT;
- ByteString& t = aT;
- const sal_Char* pPre = (pLevelPre > pLevelPreString) ? pLevelPre - 1 : pLevelPre;
-
- if( nR || nL ) // skip dummy-zero DIMENSIONS at eof
- {
- if( bBlankLine )
- *pDumpStream << '\n';
-
- aT += pLevelPre;
- __AddHex( aT, nR );
-
- if( pName )
- {
- aT += " (";
- aT += *pName;
- aT += ") [";
- }
- else
- aT += " [";
-
- if( bReadContRecs )
- __AddHex( aT, nL );
- else
- __AddHex( aT, (UINT16)nL );
- aT += "]";
- if( !bSkipOffset )
- {
- aT += " :";
- __AddHex( aT, UINT32(pIn->GetSvStreamPos() - 2 * sizeof(UINT16)) );
- aT += ':';
- }
-
- Print( aT );
- }
-
- if( HasModeNameOnly( nR ) )
- ;
- else if( HasModeHex( nR ) || !bBIFF8 )
- {
- if( bEncrypted )
- PreDumpDecrypted( nL );
- else
- ContDump( nL );
- }
- else if( nMaxBodyLines && nL )
- {
- XclImpStream& rIn = *pIn;
-
- if( bEncrypted )
- {
- PreDumpDecrypted( nL );
- LINESTART();
- ADDTEXT( "*** contents ***" );
- PRINT();
- pIn->Seek( EXC_REC_SEEK_TO_BEGIN );
- }
-
- LINESTART();
-
- switch( nR )
- {
- case 0x0000: // DIMENSIONS - used area
- case 0x0200:
- {
- LINESTART();
- UINT32 nR1, nR2;
- UINT16 nC1, nC2;
- rIn >> nR1 >> nR2 >> nC1 >> nC2;
- ADDTEXT( "first row: " ); __AddHex( t, nR1 );
- ADDTEXT( " last row+1: " ); __AddHex( t, nR2 );
- ADDTEXT( " first col: " ); __AddHex( t, nC1 );
- ADDTEXT( " last col+1: " ); __AddHex( t, nC2 );
- ADDTEXT( " (" ); lcl_AddRangeRef( t, nC1, (UINT16)nR1, nC2-1, (UINT16)nR2-1 );
- ADDTEXT( ")" );
- PRINT();
- }
- break;
- case 0x06:
- {
- ADDCELLHEAD();
- PRINT();
- LINESTART();
- ADDTEXT( "val = " );
- ADDDOUBLE();
- rIn >> __nFlags;
- if( __nFlags )
- {
- ADDTEXT( " " );
- STARTFLAG();
- ADDFLAG( 0x01, "fAlwaysCalc" );
- ADDFLAG( 0x02, "fCalcOnLoad" );
- ADDFLAG( 0x08, "fShrFmla" );
- }
- PRINT();
- LINESTART();
- UINT16 n;
- ADDTEXT( "chn = " );
- ADDHEX( 4 );
- rIn >> n;
- ADDTEXT( " cce = " );
- __AddDec( t, n );
- PRINT();
- FormulaDump( n, FT_CellFormula );
- if( rIn.GetRecLeft() > 0 )
- {
- LINESTART();
- ADDTEXT( "additional formula data" );
- PRINT();
- ContDump( rIn.GetRecLeft() );
- }
- }
- break;
- case 0x0013: // PASSWORD
- DumpValidPassword( rIn, pPre );
- break;
- case 0x0014: // HEADER
- case 0x0015: // FOOTER
- if( rIn.GetRecLeft() )
- AddUNICODEString( t, rIn );
- PRINT();
- break;
- case 0x17:
- {
- if( mnSubstream == EXC_BOF_WORKSPACE )
- {
- ADDTEXT( "filename=" );
- AddUNICODEString( t, rIn );
- PRINT();
- }
- else
- {
- UINT16 n;
- rIn >> n;
- ADDTEXT( "# of XTI: " );
- __AddDec( t, n );
- PRINT();
- UINT16 nSB, nF, nL;
- while( n && rIn.IsValid() )
- {
- LINESTART();
- rIn >> nSB >> nF >> nL;
- ADDTEXT( "Supbook = " );
- __AddDec( t, nSB );
- ADDTEXT( " Tab = " );
- __AddDec( t, nF );
- ADDTEXT( " ... " );
- __AddDec( t, nL );
- PRINT();
- n--;
- }
- }
- }
- break;
- case 0x0018:
- case 0x0218: // NAME
- {
- sal_uInt8 nKey, nNameLen, nMenuLen, nDescrLen, nHelpLen, nStatusLen;
- sal_uInt16 nFmlaSize, nRes, nTab;
-
- rIn >> __nFlags >> nKey >> nNameLen >> nFmlaSize >> nRes >> nTab >> nMenuLen >> nDescrLen >> nHelpLen >> nStatusLen;
- LINESTART();
- STARTFLAG();
- ADDFLAG( 0x0001, "fHidden" );
- ADDFLAG( 0x0002, "fFunc" );
- ADDFLAG( 0x0004, "fVBProc" );
- ADDFLAG( 0x0008, "fProc" );
- ADDFLAG( 0x0010, "fCalcExp" );
- ADDFLAG( 0x0020, "fBuiltIn" );
- ADDFLAG( 0x1000, "fBig" );
- ADDRESERVED( 0xE000 );
- ADDTEXT( " func-group-idx=" );
- __AddDec( t, (UINT16)((__nFlags & 0x0FC0) >> 6) );
- ADDTEXT( " shortcut=" ); __AddHex( t, nKey );
- PRINT();
-
- LINESTART();
- ADDTEXT( "fmla-size=" ); __AddDec( t, nFmlaSize );
- ADDTEXT( " reserved=" ); __AddHex( t, nRes );
- ADDTEXT( " tab=" ); __AddDec( t, nTab );
- if( !nTab ) ADDTEXT( " (global)" );
- PRINT();
-
- LINESTART();
- sal_uInt16 nBuiltIn = 0;
- bool bBuiltIn = (nNameLen == 1) && (__nFlags & 0x0020);
- if( bBuiltIn )
- {
- rIn.PushPosition();
- sal_uInt8 nStrFlags;
- rIn >> nStrFlags;
- nBuiltIn = (nStrFlags & 1) ? rIn.ReaduInt16() : rIn.ReaduInt8();
- rIn.PopPosition();
- }
- ADDTEXT( "name=" );
- ByteString aName;
- AddUNICODEString( t, rIn, false, nNameLen, &aName );
- if( bBuiltIn )
- {
- static const sal_Char* const ppcNames[] = {
- "Consolidate_Area", "Auto_Open", "Auto_Close", "Extract", "Database",
- "Criteria", "Print_Area", "Print_Titles", "Recorder", "Data_Form",
- "Auto_Activate", "Auto_Deactivate", "Sheet_Title", "_FilterDatabase" };
- lcl_AddEnum( t, nBuiltIn, ppcNames, STATIC_TABLE_SIZE( ppcNames ) );
- if( (0 <= nBuiltIn) && (nBuiltIn < STATIC_TABLE_SIZE( ppcNames )) )
- aName.Assign( ppcNames[ nBuiltIn ] );
- }
- maNames.push_back( aName );
- PRINT();
-
- if( nFmlaSize && (rIn.GetRecLeft() > 0) )
- {
- LINESTART();
- ADDTEXT( "name-definition=" );
- PRINT();
- FormulaDump( nFmlaSize, FT_RangeName );
- }
- if( nMenuLen )
- {
- LINESTART();
- ADDTEXT( "menu-text=" );
- AddUNICODEString( t, rIn, false, nMenuLen );
- PRINT();
- }
- if( nDescrLen )
- {
- LINESTART();
- ADDTEXT( "descr-text=" );
- AddUNICODEString( t, rIn, false, nDescrLen );
- PRINT();
- }
- if( nHelpLen )
- {
- LINESTART();
- ADDTEXT( "help-text=" );
- AddUNICODEString( t, rIn, false, nHelpLen );
- PRINT();
- }
- if( nStatusLen )
- {
- LINESTART();
- ADDTEXT( "status-text=" );
- AddUNICODEString( t, rIn, false, nStatusLen );
- PRINT();
- }
- }
- break;
- case 0x001D: // SELECTION - list of selections
- {
- ADDTEXT( "pane: " ); ADDDEC( 1 );
- ADDTEXT( " active cell: " );
- UINT16 nR, nC;
- rIn >> nR >> nC;
- lcl_AddRef( t, nC, nR );
- ADDTEXT( " active index: " ); ADDDEC( 2 );
- ADDTEXT( " ref count: " );
- UINT16 nCount;
- rIn >> nCount;
- __AddDec( t, nCount );
- PRINT();
- for( UINT16 nIndex = 0; nIndex < nCount && rIn.IsValid(); nIndex++ )
- {
- LINESTART();
- UINT16 nR1, nR2;
- UINT8 nC1, nC2;
- rIn >> nR1 >> nR2 >> nC1 >> nC2;
- ADDTEXT( "ref#" ); __AddDec( t, nIndex, 3 );
- ADDTEXT( ": " ); lcl_AddRangeRef( t, nC1, nR1, nC2, nR2 );
- PRINT();
- }
- }
- break;
- case 0x0023: // EXTERNNAME
- {
- PreDump( rIn.GetRecSize() );
- rIn >> __nFlags;
- STARTFLAG();
- ADDFLAG( 0x0001, "builtin" );
- ADDFLAG( 0x0002, "automatic" );
- ADDFLAG( 0x0004, "wantcliprepr" );
- ADDFLAG( 0x0008, "DDEstddocname" );
- ADDFLAG( 0x0010, "OLE" );
- ADDRESERVED( 0x8000 );
- sal_uInt16 nClip = (__nFlags & 0x7FE0) >> 5;
- ADDTEXT( " clip-format=" ); __AddHex( t, nClip );
- PRINT(); LINESTART();
- bool bFormula = false, bArray = false;
- if( (__nFlags & 0x0001) || !(__nFlags & 0x7FFE) )
- {
- ADDTEXT( "type=external name" );
- ADDTEXT( " table=" ); ADDDEC( 2 );
- ADDTEXT( " reserved=" ); ADDHEX( 2 );
- bFormula = true;
- }
- else if( __nFlags & 0x0010 )
- {
- ADDTEXT( "type=OLE" );
- ADDTEXT( " stream-id=" ); ADDHEX( 4 );
- }
- else
- {
- ADDTEXT( "type=DDE" );
- ADDTEXT( " reserved=" ); ADDHEX( 4 );
- bArray = true;
- }
- PRINT(); LINESTART();
- ADDTEXT( "name=" ); AddUNICODEString( t, rIn, FALSE );
- PRINT();
- if( rIn.GetRecLeft() > 0 )
- {
- LINESTART();
- if( bFormula )
- {
- sal_uInt16 nSize = rIn.ReaduInt16();
- ADDTEXT( "formula (size=" ); __AddDec( t, nSize );
- ADDTEXT( "):" );
- PRINT();
- FormulaDump( nSize, FT_RangeName );
- }
- else if( bArray && (rIn.GetRecLeft() >= 3) )
- {
- LINESTART();
- ADDTEXT( "constant array width=" ); ADDDEC( 1 );
- ADDTEXT( " height=" ); ADDDEC( 2 );
- PRINT();
- while( rIn.GetRecLeft() > 0 )
- {
- sal_uInt8 nType = rIn.ReaduInt8();
- LINESTART();
- ADDTEXT( "type=" ); __AddHex( t, nType );
- ADDTEXT( " (" );
- switch( nType )
- {
- case 0x00:
- ADDTEXT( "empty) reserved=" ); ADDHEX( 4 );
- ADDTEXT( " " ); ADDHEX( 4 );
- break;
- case 0x01:
- ADDTEXT( "double) value=" ); ADDDOUBLE();
- break;
- case 0x02:
- ADDTEXT( "string) text=" ); AddUNICODEString( t, rIn );
- break;
- case 0x04:
- ADDTEXT( "bool) value=" ); lcl_AddFlag( t, rIn.ReaduInt8() );
- ADDTEXT( " reserved=" ); ADDHEX( 1 );
- ADDTEXT( " " ); ADDHEX( 2 );
- ADDTEXT( " " ); ADDHEX( 4 );
- break;
- case 0x10:
- ADDTEXT( "error) code=" ); ADDHEX( 1 );
- ADDTEXT( " reserved=" ); ADDHEX( 1 );
- ADDTEXT( " " ); ADDHEX( 2 );
- ADDTEXT( " " ); ADDHEX( 4 );
- break;
- default:
- ADDTEXT( "!unknown!)" );
- rIn.Ignore( 8 );
- }
- PRINT();
- }
- }
- if( rIn.GetRecLeft() > 0 )
- {
- LINESTART();
- ADDTEXT( "additional data:" );
- PRINT();
- ContDump( rIn.GetRecLeft() );
- }
- }
- }
- break;
- case 0x0026:
- case 0x0027:
- case 0x0028:
- case 0x0029:
- LINESTART();
- ADDDOUBLE();
- PRINT();
- break;
- case 0x002F: // FILEPASS
- {
- LINESTART();
- sal_uInt16 nType;
- rIn >> nType;
- ADDTEXT( "encrypt-type=" ); __AddHex( t, nType );
- ADDTEXT( " (" );
- switch( nType )
- {
- case 0x0000:
- {
- ADDTEXT( "BIFF2-BIFF7 XOR) key=" );
- ADDHEX( 2 );
- ADDTEXT( " hash=" );
- ADDHEX( 2 );
- PRINT();
- }
- break;
-
- case 0x0001:
- {
- ADDTEXT( "BIFF8 standard/strong)" );
- PRINT();
- LINESTART();
- ADDTEXT( "reserved=" ); ADDHEX( 2 );
- sal_uInt16 nMode;
- rIn >> nMode;
- ADDTEXT( " mode=" ); __AddHex( t, nMode );
- ADDTEXT( " (" );
- switch( nMode )
- {
- case 0x0001:
- {
- ADDTEXT( "BIFF8 standard)" );
- PRINT();
- LINESTART();
- ADDTEXT( "document-id=..." );
- PRINT();
- ContDump( 16 );
- LINESTART();
- ADDTEXT( "salt-data=..." );
- PRINT();
- ContDump( 16 );
- LINESTART();
- ADDTEXT( "salt-hash=..." );
- PRINT();
- ContDump( 16 );
- }
- break;
- case 0x0002:
- {
- ADDTEXT( "BIFF8X strong) flags=" );
- ADDHEX( 4 );
- PRINT();
- LINESTART();
- ADDTEXT( "info-size=" ); ADDHEX( 4 );
- ADDTEXT( " flags=" ); ADDHEX( 4 );
- ADDTEXT( " unknown=" ); ADDHEX( 4 );
- PRINT();
- LINESTART();
- ADDTEXT( "stream-crypt-id=" ); ADDHEX( 4 );
- ADDTEXT( " hash-algo-id=" ); ADDHEX( 4 );
- ADDTEXT( " hash-key-len=" ); ADDDEC( 4 );
- PRINT();
- LINESTART();
- ADDTEXT( "crypt-prov-type=" ); ADDHEX( 4 );
- ADDTEXT( " unknown=" ); ADDHEX( 4 );
- ADDTEXT( " unknown=" ); ADDHEX( 4 );
- PRINT();
- LINESTART();
- ADDTEXT( "crypt-provider-name='" );
- sal_uInt16 nChar;
- do
- {
- rIn >> nChar;
- if( nChar )
- t += (sal_Char)(((32 <= nChar) && (nChar <=127)) ? nChar : '.');
- }
- while( nChar );
- ADDTEXT( "'" );
- PRINT();
- LINESTART();
- sal_uInt32 nLen;
- rIn >> nLen;
- ADDTEXT( "*** document-id *** len=" ); __AddHex( t, nLen );
- PRINT();
- ContDump( nLen );
- LINESTART();
- ADDTEXT( "*** salt-data *** len=" ); __AddHex( t, nLen );
- PRINT();
- ContDump( nLen );
- LINESTART();
- rIn >> nLen;
- ADDTEXT( "*** salt-hash *** len=" ); __AddHex( t, nLen );
- PRINT();
- ContDump( nLen );
- }
- break;
- default:
- {
- ADDTEXT( "!unknown!)" );
- PRINT();
- ContDump( rIn.GetRecLeft() );
- }
- }
- }
- break;
-
- default:
- {
- ADDTEXT( "!unknown!)" );
- PRINT();
- ContDump( rIn.GetRecLeft() );
- }
- }
- }
- break;
- case 0x0031: // FONT
- case 0x0231:
- {
- LINESTART();
- ADDTEXT( "(index=" ); __AddDec( t, nFontIndex );
- ADDTEXT( ") " );
- nFontIndex++; if( nFontIndex == 4 ) nFontIndex++;
- ADDTEXT( "height: " ); ADDDEC( 2 );
- ADDTEXT( "/20pt " );
- rIn >> __nFlags;
- STARTFLAG();
- ADDFLAG( 0x0002, "fItalic" );
- ADDFLAG( 0x0008, "fStrikeout" );
- ADDFLAG( 0x0010, "fOutline" );
- ADDFLAG( 0x0020, "fShadow" );
- ADDRESERVED( 0xFFC5 );
- PRINT();
- LINESTART();
- ADDTEXT( "color: " ); ADDDEC( 2 );
- ADDTEXT( " boldness: " ); ADDDEC( 2 );
- ADDTEXT( " sub/sup: " ); ADDDEC( 2 );
- ADDTEXT( " underline: " ); ADDHEX( 1 );
- PRINT();
- LINESTART();
- ADDTEXT( "family: " ); ADDDEC( 1 );
- ADDTEXT( " charset: " ); ADDDEC( 1 );
-// ADDTEXT( " reserved: " ); ADDHEX( 1 );
- rIn.Ignore( 1 );
- ADDTEXT( " " );
- AddUNICODEString( t, rIn, FALSE );
- PRINT();
- }
- break;
- case 0x003D: // WINDOW1
- {
- LINESTART();
- ADDTEXT( "pos-x=" ); ADDDEC( 2 );
- ADDTEXT( " pos-y=" ); ADDDEC( 2 );
- ADDTEXT( " width=" ); ADDDEC( 2 );
- ADDTEXT( " height=" ); ADDDEC( 2 );
- PRINT();
- LINESTART();
- rIn >> __nFlags;
- STARTFLAG();
- ADDFLAG( 0x0001, "hide-window" );
- ADDFLAG( 0x0002, "min-window" );
- ADDFLAG( 0x0008, "show-hscroll" );
- ADDFLAG( 0x0010, "show-vscroll" );
- ADDFLAG( 0x0020, "show-tabbar" );
- ADDRESERVED( 0xFFC4 );
- PRINT();
- LINESTART();
- ADDTEXT( "active-tab=" ); ADDDEC( 2 );
- ADDTEXT( " first-vis-tab=" ); ADDDEC( 2 );
- ADDTEXT( " selected-tabs=" ); ADDDEC( 2 );
- ADDTEXT( " tabbar-width=" ); ADDDEC( 2 );
- PRINT();
- }
- break;
- case 0x0041: // PANE
- {
- LINESTART();
- ADDTEXT( "vert-split-pos=" ); ADDDEC( 2 );
- ADDTEXT( " hor-split-pos=" ); ADDDEC( 2 );
- PRINT();
- LINESTART();
- ADDTEXT( "first-row=" ); ADDDEC( 2 );
- ADDTEXT( " first-col=" ); ADDDEC( 2 );
- ADDTEXT( " active-pane=" ); ADDDEC( 2 );
- PRINT();
- }
- break;
- case 0x0042: // CODEPAGE
- {
- LINESTART();
- sal_uInt16 nCodePage = rIn.ReaduInt16();
- ADDTEXT( "codepage=" ); __AddHex( t, nCodePage );
- ADDTEXT( " (" ); __AddDec( t, nCodePage );
- ADDTEXT( ")" );
- PRINT();
- }
- break;
- case 0x004D: // PLS
- {
- LINESTART();
- static const sal_Char* const ppcTypes[] = { "Win", "Mac" };
- sal_uInt16 nType = rIn.ReaduInt16();
- ADDTEXT( "environment=" );
- lcl_AddEnum( t, nType, ppcTypes, STATIC_TABLE_SIZE( ppcTypes ) );
- PRINT();
- if( nType == 0 )
- {
- String aData;
- sal_uInt32 __nFlags;
- LINESTART();
- rIn.SetNulSubstChar( '\0' );
- aData = rIn.ReadRawUniString( 32, true );
- ADDTEXT( "device-name='" ); ADDTEXT( GETSTR( aData ) );
- ADDTEXT( "'" );
- PRINT(); LINESTART();
- ADDTEXT( "spec-version=" ); ADDDEC( 2 );
- ADDTEXT( " driver-version=" ); ADDDEC( 2 );
- sal_uInt16 nOwnSize, nPrvSize;
- rIn >> nOwnSize >> nPrvSize;
- ADDTEXT( " own-size=" ); __AddDec( t, nOwnSize );
- ADDTEXT( " prv-size=" ); __AddDec( t, nPrvSize );
- PRINT(); LINESTART();
- rIn >> __nFlags;
- STARTFLAG();
- ADDFLAG( 0x00000001, "orient" );
- ADDFLAG( 0x00000002, "paper-size" );
- ADDFLAG( 0x00000004, "paper-height" );
- ADDFLAG( 0x00000008, "paper-width" );
- ADDFLAG( 0x00000010, "scale" );
- ADDFLAG( 0x00000100, "copies" );
- ADDRESERVED( 0xE0000080 );
- PRINT(); LINESTART();
- static const sal_Char* const ppcOrient[] = { 0, "portrait", "landsc" };
- sal_uInt16 nOrient = rIn.ReaduInt16();
- ADDTEXT( "orientation=" );
- lcl_AddEnum( t, nOrient, ppcOrient, STATIC_TABLE_SIZE( ppcOrient ) );
- ADDTEXT( " paper-size=" ); ADDDEC( 2 );
- ADDTEXT( " paper-width=" ); ADDDEC( 2 );
- ADDTEXT( " paper-height=" ); ADDDEC( 2 );
- PRINT(); LINESTART();
- ADDTEXT( "scale=" ); ADDDEC( 2 );
- ADDTEXT( " copies=" ); ADDDEC( 2 );
- PRINT();
- if( nOwnSize > 88 )
- {
- LINESTART(); ADDTEXT( "additional data:" ); PRINT();
- ContDump( nOwnSize - 88 );
- }
- if( nPrvSize > 0 )
- {
- LINESTART(); ADDTEXT( "private data:" ); PRINT();
- ContDump( nPrvSize );
- }
- }
- if( rIn.GetRecLeft() > 0 )
- {
- LINESTART(); ADDTEXT( "unknown data:" ); PRINT();
- ContDump( rIn.GetRecLeft() );
- }
- }
- break;
- case 0x51:
- {
- UINT16 nR1, nR2;
- UINT8 nC1, nC2;
- rIn >> nR1 >> nR2 >> nC1 >> nC2;
- lcl_AddRangeRef( t, nC1, nR1, nC2, nR2 );
- PRINT();
- LINESTART();
- ADDTEXT( "workbook: " );
- AddUNICODEString( t, rIn, TRUE );
- PRINT();
- }
- break;
- case 0x0052: // DCONNAME
- {
- ADDTEXT( "name=" );
- AddUNICODEString( t, rIn, TRUE );
- PRINT();
- LINESTART();
- ADDTEXT( "sheet=" );
- AddUNICODEString( t, rIn, TRUE );
- PRINT();
- }
- break;
- case 0x5B: // FILESHARING
- {
- PreDump( nL );
- rIn >> __nFlags;
- if( __nFlags )
- {
- LINESTART();
- STARTFLAG();
- ADDFLAG( 0x0001, "fReadOnlyRec" );
- PRINT();
- }
- DumpValidPassword( rIn, pPre );
- }
- break;
- case 0x5D:
- ObjDump( nL );
- break;
- case 0x007D: // COLINFO - col range info
- {
- LINESTART();
- ADDTEXT( "col range: " );
- ADDDEC( 2 );
- ADDTEXT( "-" );
- ADDDEC( 2 );
- ADDTEXT( " width: " );
- ADDDEC( 2 );
- ADDTEXT( "/256 charwidth ix to XF: " );
- ADDDEC( 2 );
- PRINT();
- rIn >> __nFlags;
- LINESTART();
- STARTFLAG();
- ADDFLAG( 0x0001, "fHidden" );
- ADDTEXT( " outlnlev=" );
- __AddDec( t, (UINT16)((__nFlags & 0x0700) >> 8) );
- ADDFLAG( 0x1000, "fCollapsed" );
- ADDRESERVED( 0xE8FE );
- PRINT();
- LINESTART();
- ADDTEXT( "reserved: " );
- ADDHEX( 1 );
- PRINT();
- }
- break;
- case 0x7E:
- {
-// LINESTART();
- ADDCELLHEAD();
- ADDTEXT( " val = " );
- __AddRK( t, rIn.ReadInt32() );
- PRINT();
- }
- break;
- case 0x0080: // GUTS - row & col gutters for outlines
- {
- LINESTART();
- ADDTEXT( "size row gutter: " );
- __AddDec( t, Read2( rIn ), 5 );
- ADDTEXT( " | size col gutter: " );
- __AddDec( t, Read2( rIn ), 5 );
- PRINT();
- LINESTART();
- ADDTEXT( "max outline lev: " );
- __AddDec( t, Read2( rIn ), 5 );
- ADDTEXT( " | max outline lev: " );
- __AddDec( t, Read2( rIn ), 5 );
- PRINT();
- }
- break;
- case 0x0081: // WSBOOL - additional workspace info
- {
- rIn >> __nFlags;
- LINESTART();
- STARTFLAG();
- if( __nFlags & 0x00F1 )
- {
- ADDFLAG( 0x0001, "fShowAutoBreaks" );
- ADDFLAG( 0x0010, "fDialog" );
- ADDFLAG( 0x0020, "fApplyStyles" );
- ADDFLAG( 0x0040, "fRowSumsBelow" );
- ADDFLAG( 0x0080, "fColSumsBelow" );
- PRINT();
- LINESTART();
- }
- if( __nFlags & (0xCD00 | 0x320E) )
- {
- ADDTEXT( " " );
- ADDFLAG( 0x0100, "fFitToPage" );
- ADDFLAG( 0x0400, "fDispRowGuts" );
- ADDFLAG( 0x0800, "fDispColGuts" );
- ADDFLAG( 0x4000, "fAee" );
- ADDFLAG( 0x8000, "fAfe" );
- ADDRESERVED( 0x320E );
- PRINT();
- }
- if( !__nFlags )
- PRINT();
- }
- break;
- case 0x008C: // COUNTRY
- {
- LINESTART();
- ADDTEXT( "ui-country=" ); ADDDEC( 2 );
- ADDTEXT( " doc-country=" ); ADDDEC( 2 );
- PRINT();
- }
- break;
- case 0x92: // PALETTE
- {
- UINT16 nColCnt;
- rIn >> nColCnt;
- LINESTART();
- ADDTEXT( "count: " );
- __AddDec( t, nColCnt );
- PRINT();
- LINESTART();
- for( UINT16 nCol = 0; nCol < nColCnt; nCol++ )
- {
- __AddDec( t, nCol, 2 );
- ADDTEXT( "=" );
- ADDHEX( 4 );
- ADDTEXT( " " );
- if( (nCol % 5 == 4) || (nCol == nColCnt - 1) )
- {
- PRINT();
- LINESTART();
- }
- }
- }
- break;
- case 0x9D: // AUTOFILTERINFO -- count of drop-down arrows
- {
- LINESTART();
- ADDTEXT( "count of drop-down arrows: " );
- ADDDEC( 2 );
- PRINT();
- }
- break;
- case 0x9E: // AUTOFILTER -- autofilter settings
- {
- UINT8 nType;
- UINT8 nCompare;
- ByteString sTemp[ 2 ];
- UINT16 nLen[ 2 ] = { 0, 0 };
- UINT8 nF;
- LINESTART();
- ADDTEXT( "count: " );
- ADDDEC( 2 );
- rIn >> __nFlags;
- STARTFLAG();
- ADDFLAG( 0x0003, "fJoin" );
- ADDFLAG( 0x0004, "fSimpleEq1" );
- ADDFLAG( 0x0008, "fSimpleEq2" );
- ADDFLAG( 0x0010, "fTop10" );
- ADDFLAG( 0x0020, "fTop" );
- ADDFLAG( 0x0040, "fPercent" );
- PRINT();
- LINESTART();
- if( __nFlags & 0x0003 )
- ADDTEXT( "(custom conditions are OR-ed" );
- else
- ADDTEXT( "(custom conditions are AND-ed" );
- if( __nFlags & 0x0010 )
- {
- if( __nFlags & 0x0020 )
- ADDTEXT( "; show top " );
- else
- ADDTEXT( "; show bottom " );
- __AddDec( t, (UINT16)(__nFlags >> 7) );
- if( __nFlags & 0x0040 )
- ADDTEXT( " percent" );
- else
- ADDTEXT( " items" );
- }
- ADDTEXT( ")" );
- PRINT();
- for( nF = 0; nF < 2; nF++ )
- {
- LINESTART();
- __AddDec( t, (UINT16)(nF + 1) );
- ADDTEXT( ". Filter: " );
- rIn >> nType >> nCompare;
- switch( nType )
- {
- case 0x00: ADDTEXT( "not used " ); break;
- case 0x02: ADDTEXT( "RK " ); break;
- case 0x04: ADDTEXT( "double " ); break;
- case 0x06: ADDTEXT( "string " ); break;
- case 0x08: ADDTEXT( "bool/err " ); break;
- case 0x0A: ADDTEXT( "show nothing " ); break;
- case 0x0C: ADDTEXT( "all blanks " ); break;
- case 0x0E: ADDTEXT( "all non-blanks " ); break;
- default:
- ADDTEXT( "unknown (" );
- __AddHex( t, nType );
- ADDTEXT( ") " );
- }
- switch( nCompare )
- {
- case 0x01: ADDTEXT( "< " ); break;
- case 0x02: ADDTEXT( "= " ); break;
- case 0x03: ADDTEXT( "<= " ); break;
- case 0x04: ADDTEXT( "> " ); break;
- case 0x05: ADDTEXT( "<> " ); break;
- case 0x06: ADDTEXT( ">= " ); break;
- default: if( nCompare ) __AddHex( t, nCompare );
- }
- sTemp[ nF ] = t;
- switch( nType )
- {
- case 0x02:
- __AddRK( sTemp[ nF ], rIn.ReadInt32() );
- IGNORE( 4 );
- break;
- case 0x04:
- __AddDouble( sTemp[ nF ], Read8( rIn ) );
- break;
- case 0x06:
- IGNORE( 4 );
- nLen[ nF ] = Read1( rIn );
- IGNORE( 3 );
- break;
- case 0x08:
- __AddHex( sTemp[ nF ], Read1( rIn ) );
- sTemp[ nF ] += " ";
- __AddHex( sTemp[ nF ], Read1( rIn ) );
- IGNORE( 6 );
- break;
- default:
- IGNORE( 8 );
- }
- }
- for( nF = 0; nF < 2; nF++ )
- {
- t = sTemp[ nF ];
- if( nLen[ nF ] )
- AddUNICODEString( t, rIn, TRUE, nLen[ nF ] );
- PRINT();
- }
- }
- break;
- case 0xA0:
- {
- UINT16 nN, nD;
- rIn >> nN >> nD;
- LINESTART();
- ADDTEXT( "Window Zoom Magnification = " );
- __AddDec( t, nN );
- ADDTEXT( "/" );
- __AddDec( t, nD );
- PRINT();
- }
- break;
- case 0x00A1: // SETUP
- {
- LINESTART();
- ADDTEXT( "paper size: " ); ADDDEC( 2 );
- ADDTEXT( " scaling: " ); ADDDEC( 2 );
- ADDTEXT( " start page: " ); ADDDEC( 2 );
- PRINT();
- LINESTART();
- ADDTEXT( "fit to width: " ); ADDDEC( 2 );
- ADDTEXT( " fit to height: " ); ADDDEC( 2 );
- PRINT();
- LINESTART();
- rIn >> __nFlags;
- STARTFLAG();
- ADDFLAG( 0x0001, "fLeftRight" );
- ADDFLAG( 0x0002, "fPortrait" );
- ADDFLAG( 0x0004, "fNoPrintSettings" );
- ADDFLAG( 0x0008, "fMonochrom" );
- ADDFLAG( 0x0010, "fDraft" );
- ADDFLAG( 0x0020, "fNotes" );
- ADDFLAG( 0x0040, "fNoOrientation" );
- ADDFLAG( 0x0080, "fCustomNumber" );
- PRINT();
- LINESTART();
- ADDTEXT( "Print res: " ); ADDDEC( 2 );
- ADDTEXT( " vert print res: " ); ADDDEC( 2 );
- PRINT();
- LINESTART();
- ADDTEXT( "header margin: " ); ADDDOUBLE();
- ADDTEXT( " footer margin: " ); ADDDOUBLE();
- ADDTEXT( " copies: " ); ADDDEC( 2 );
- PRINT();
- }
- break;
- case 0xAF:
- {
- UINT16 nCref;
- UINT8 nLocked, nHidden, nName, nComment, nNameUser;
- rIn >> nCref >> nLocked >> nHidden >> nName >> nComment >> nNameUser;
- LINESTART();
- ADDTEXT( "Changing Cells = " );
- __AddDec( t, nCref );
- if( nLocked )
- ADDTEXT( " fLocked" );
- if( nHidden )
- ADDTEXT( " fHidden" );
- PRINT();
- LINESTART();
- ADDTEXT( "Name = " );
- __AddDec( t, nName );
- ADDTEXT( " Comment = " );
- __AddDec( t, nComment );
- ADDTEXT( " Name User = " );
- __AddDec( t, nNameUser );
- PRINT();
- ContDump( rIn.GetRecLeft() );
- }
- break;
- case 0xB0: // SXVIEW
- {
- UINT16 nColFirst, nColLast, nRowFirst, nRowLast;
- rIn >> nRowFirst >> nRowLast >> nColFirst >> nColLast;
- nSXLIIndex = 0; // new pivot table
- LINESTART();
- ADDTEXT( "PivotTable: " ); __AddDec( t, nColFirst );
- ADDTEXT( " / " ); __AddDec( t, nRowFirst );
- ADDTEXT( " - " ); __AddDec( t, nColLast );
- ADDTEXT( " / " ); __AddDec( t, nRowLast );
- PRINT();
- LINESTART();
- ADDTEXT( "1st Head: " ); ADDDEC( 2 );
- rIn >> nRowFirst;
- ADDTEXT( " First Data: " ); ADDDEC( 2 );
- ADDTEXT( " / " ); __AddDec( t, nRowFirst );
- PRINT();
- LINESTART();
- ADDTEXT( "Cache index: " ); ADDDEC( 2 );
- ADDTEXT( " reserved: " ); ADDHEX( 2 );
- PRINT();
- LINESTART();
- ADDTEXT( "axis 4 data: " ); ADDDEC( 2 );
- ADDTEXT( " pos 4 Data: " ); ADDDEC( 2 );
- PRINT();
- LINESTART();
- ADDTEXT( "num of fields: " ); ADDDEC( 2 );
- rIn >> nSXLISize[0] >> nSXLISize[1];
- ADDTEXT( " ...row fields: " ); __AddDec( t, nSXLISize[0] );
- ADDTEXT( " ...col fields: " ); __AddDec( t, nSXLISize[1] );
- PRINT();
- LINESTART();
- ADDTEXT( "num of page fields: " ); ADDDEC( 2 );
- ADDTEXT( " ...data fields: " ); ADDDEC( 2 );
- PRINT();
- LINESTART();
- ADDTEXT( "data rows: " ); ADDDEC( 2 );
- ADDTEXT( " data cols: " ); ADDDEC( 2 );
- rIn >> __nFlags;
- PRINT();
- if( __nFlags )
- {
- LINESTART();
- STARTFLAG();
- ADDFLAG( 0x0001, "fRowGrand" );
- ADDFLAG( 0x0002, "fColGrand" );
- ADDFLAG( 0x0008, "fAutoFormat" );
- ADDFLAG( 0x0010, "fWidthHeightAuto" );
- ADDFLAG( 0x0020, "fFontAuto" );
- ADDFLAG( 0x0040, "fAlignAuto" );
- ADDFLAG( 0x0080, "fBorderAuto" );
- ADDFLAG( 0x0100, "fPatternAuto" );
- ADDFLAG( 0x0200, "fNumberAuto" );
- PRINT();
- }
- LINESTART();
- ADDTEXT( "index 2 PivotTable autoform: " );
- ADDDEC( 2 );
- PRINT();
- LINESTART();
- UINT16 nTableLen = Read2( rIn );
- UINT16 nDataLen = Read2( rIn );
- ADDTEXT( "PivotTable name: " );
- if( nTableLen )
- AddUNICODEString( t, rIn, TRUE, nTableLen );
- else
- ADDTEXT( "-/-" );
- PRINT();
- LINESTART();
- ADDTEXT( "data field name: " );
- if( nDataLen )
- AddUNICODEString( t, rIn, TRUE, nDataLen );
- else
- ADDTEXT( "-/-" );
- PRINT();
- }
- break;
- case 0xB1: // SXVD
- {
- rIn >> __nFlags;
- LINESTART();
- ADDTEXT( "Axis (" );
- __AddHex( t, __nFlags );
- ADDTEXT( "):" );
- if( __nFlags )
- {
- ADDFLAG( 0x0001, "row" );
- ADDFLAG( 0x0002, "col" );
- ADDFLAG( 0x0004, "page" );
- ADDFLAG( 0x0008, "data" );
- }
- else
- ADDTEXT( " no axis" );
- ADDTEXT( " num of att. subtotals: " );
- ADDDEC( 2 );
- PRINT();
- rIn >> __nFlags;
- LINESTART();
- ADDTEXT( "subtotal type(" );
- __AddHex( t, __nFlags );
- ADDTEXT( "):" );
- if( __nFlags )
- {
- ADDFLAG( 0x0001, "Default" );
- ADDFLAG( 0x0002, "Sum" );
- ADDFLAG( 0x0004, "Counta" );
- ADDFLAG( 0x0008, "Average" );
- ADDFLAG( 0x0010, "Max" );
- ADDFLAG( 0x0020, "Min" );
- ADDFLAG( 0x0040, "Product" );
- ADDFLAG( 0x0080, "Count" );
- ADDFLAG( 0x0100, "Stdev" );
- ADDFLAG( 0x0200, "Stddevp" );
- ADDFLAG( 0x0400, "Var" );
- ADDFLAG( 0x0800, "Varp" );
- }
- else
- ADDTEXT( " none" );
- PRINT();
- LINESTART();
- ADDTEXT( "num of items: " );
- ADDDEC( 2 );
- PRINT();
- LINESTART();
- ADDTEXT( "Name: " );
- UINT16 nLen = Read2( rIn );
- if( nLen == 0xFFFF )
- ADDTEXT( "<name in cache>" );
- else if( nLen )
- AddUNICODEString( t, rIn, TRUE, nLen );
- PRINT();
- }
- break;
- case 0xB2: // SXVI
- {
- UINT16 nType, nCache;
- rIn >> nType >> __nFlags >> nCache;
- LINESTART();
- switch( nType )
- {
- case 0xFE: p = "Page"; break;
- case 0xFF: p = "Null"; break;
- case 0x00: p = "Data"; break;
- case 0x01: p = "Default"; break;
- case 0x02: p = "SUM"; break;
- case 0x03: p = "COUNT"; break;
- case 0x04: p = "AVERAGE"; break;
- case 0x05: p = "MAX"; break;
- case 0x06: p = "MIN"; break;
- case 0x07: p = "PRODUCT"; break;
- case 0x08: p = "COUNTA"; break;
- case 0x09: p = "STDEV"; break;
- case 0x0A: p = "STDEVP"; break;
- case 0x0B: p = "VAR"; break;
- case 0x0C: p = "VARP"; break;
- case 0x0D: p = "Grand total"; break;
- default: p = pU;
- }
- ADDTEXT( "Type (" );
- __AddHex( t, nType );
- ADDTEXT( "): " );
- ADDTEXT( p );
- ADDTEXT( " iCache: " );
- __AddDec( t, nCache );
- PRINT();
- if( __nFlags )
- {
- LINESTART();
- STARTFLAG();
- ADDFLAG( 0x01, "fHidden" );
- ADDFLAG( 0x02, "fHideDetail" );
- ADDFLAG( 0x04, "fFormula" );
- ADDFLAG( 0x08, "fMissing" );
- PRINT();
- }
- LINESTART();
- ADDTEXT( "Name: " );
- UINT16 nCch = Read2( rIn );
- if( nCch == 0xFFFF )
- ADDTEXT( "<name in cache>" );
- else if( nCch )
- AddUNICODEString( t, rIn, TRUE, nCch );
- else
- ADDTEXT( "<empty string>" );
- PRINT();
- }
- break;
- case 0xB4: // SXIVD
- {
- const UINT16 nBrkNum = 5;
- UINT16 nBrk = nBrkNum;
- UINT16 nSize = (UINT16)(nL / 2);
- LINESTART();
- for( UINT16 i = 0; i < nSize; i++ )
- {
- ADDHEX( 2 );
- nBrk--;
- if( nBrk )
- ADDTEXT( " " );
- else
- {
- PRINT();
- LINESTART();
- nBrk = nBrkNum;
- }
- }
- if( nBrk < nBrkNum ) PRINT();
- }
- break;
- case 0xB5: // SXLI - pivot table line item array
- {
- UINT16 nIdent;
- UINT16 nType;
- UINT16 nMaxInd;
- const sal_Char* pInd = " ";
- const sal_Char* pType[] = {
- "Data", "Default", "SUM", "COUNT","AVERAGE",
- "MAX", "MIN", "PRODUCT", "COUNTA", "STDEV",
- "STDEVP", "VAR", "VARP", "Grand total",
- "Blank line" }; // undocumented
- while( rIn.GetRecLeft() > 0 )
- {
- rIn >> nIdent >> nType >> nMaxInd >> __nFlags;
- LINESTART();
- ADDTEXT( "# of ident. items: " );
- __AddDec( t, nIdent );
- ADDTEXT( " Type (" );
- __AddHex( t, nType );
- ADDTEXT( "): " );
- if( nType > 0x0E )
- p = pU;
- else
- p = pType[ nType ];
- ADDTEXT( p );
- ADDTEXT( " relevant indexes: " );
- __AddDec( t, nMaxInd );
- PRINT();
- LINESTART();
- ADDTEXT( pInd );
- STARTFLAG();
- ADDFLAG( 0x0001, "fMultiDataName" );
- ADDFLAG( 0x0200, "fSub" );
- ADDFLAG( 0x0400, "fBlock" );
- ADDFLAG( 0x0800, "fGrand" );
- ADDFLAG( 0x1000, "fMultiDataOnAxis" );
- ADDFLAG( 0x2000, "fBlankLine" ); // undocumented
- ADDFLAG( 0x4000, "fHideDetail" ); // undocumented
- ADDRESERVED( 0x8000 );
- PRINT();
- LINESTART();
- ADDTEXT( pInd );
- ADDTEXT( "index to data field: " );
- __AddDec( t, (UINT16) ( (__nFlags & 0x01FE) >> 1 ) );
- PRINT();
- LINESTART();
- ADDTEXT( pInd );
- ADDTEXT( "array of " );
- __AddDec( t, nSXLISize[nSXLIIndex] );
- ADDTEXT( " indexes (^ are ident., * are irrelevant):" );
- PRINT();
- LINESTART();
- ADDTEXT( pInd );
- ADDTEXT( " " );
- const UINT16 nBrkNum = 5;
- UINT16 nBrk = nBrkNum;
- for( UINT16 i = 0; i < nSXLISize[nSXLIIndex]; i++ )
- {
- __AddDec( t, Read2( rIn ), 7 );
- if( i < nIdent )
- ADDTEXT( "^" );
- else if( i < nMaxInd )
- ADDTEXT( " " );
- else
- ADDTEXT( "*" );
- nBrk--;
- if( !nBrk )
- {
- PRINT();
- LINESTART();
- ADDTEXT( pInd );
- ADDTEXT( " " );
- nBrk = nBrkNum;
- }
- }
- if( nBrk < nBrkNum )
- PRINT();
- }
- nSXLIIndex = 1 - nSXLIIndex;
- }
- break;
- case 0xB6: // SXPI - pivot table page item(s)
- {
- UINT16 nArrayCnt = (UINT16)(nL / 6);
- LINESTART();
- __AddDec( t, nArrayCnt );
- ADDTEXT( " page items:" );
- PRINT();
- for( UINT16 iArray = 0; iArray < nArrayCnt; iArray++ )
- {
- LINESTART();
- ADDTEXT( "index SXVD: " );
- __AddDec( t, Read2( rIn ), 3 );
- ADDTEXT( " index SXVI: " );
- UINT16 nSXVIInd;
- rIn >> nSXVIInd;
- __AddDec( t, nSXVIInd, 5 );
- if( nSXVIInd == 32765 )
- ADDTEXT( " (All items) Obj ID: " );
- else
- ADDTEXT( " Obj ID: " );
- ADDHEX( 2 );
- PRINT();
- }
- }
- break;
- case 0xBD:
- {
- UINT16 nC, nR, nXF;
- INT32 nRK;
- UINT16 n = (UINT16)((nL - 4) / 6);
-
- rIn >> nR >> nC;
- while( n )
- {
- rIn >> nXF >> nRK;
- LINESTART();
- __AddCellHead( t, nC, nR, nXF );
- ADDTEXT( " val = " );
- __AddRK( t, nRK );
- PRINT();
- nC++;
- n--;
- }
- }
- break;
- case 0xBE:
- {
- LINESTART();
- ADDCELLHEAD();
- PRINT();
- LINESTART();
- ADDTEXT( "next XFs: " );
- UINT16 n = (UINT16)((nL - 6) / 2);
- while( n )
- {
- __AddDec( t, Read2( rIn ) );
- n--;
- if( n )
- ADDTEXT( ' ' );
- }
- PRINT();
- }
- break;
- case 0x00C5: // SXDI
- {
- LINESTART();
- ADDTEXT( "Field: " );
- ADDDEC( 2 );
- UINT16 nFunc = Read2( rIn );
- ADDTEXT( " aggregation func (" );
- __AddHex( t, nFunc );
- ADDTEXT( "): " );
- const sal_Char* pFunc[] = { "Sum", "Count", "Average", "Max", "Min",
- "Product", "Count Nums", "StdDev", "StdDevp", "Var",
- "Varp" };
- p = (nFunc > 0x0A) ? pU : pFunc[ nFunc ];
- ADDTEXT( p );
- ADDTEXT( " display format (" );
- const sal_Char* pDispl[] = {
- "Normal", "Difference", "Percentage of", "Percentage difference from", "Running total in",
- "Percentage of row", "Percentage of column", "Percentage of total", "Index" };
- UINT16 nDispl = Read2( rIn );
- __AddHex( t, nDispl );
- ADDTEXT( "): " );
- p = (nDispl > 0x08) ? pU : pDispl[ nDispl ];
- ADDTEXT( p );
- PRINT();
- LINESTART();
- ADDTEXT( "ind. to SXVD: " ); ADDDEC( 2 );
- ADDTEXT( " ind. to SXVI: " ); ADDDEC( 2 );
- ADDTEXT( " num format: " ); ADDDEC( 2 );
- PRINT();
- LINESTART();
- ADDTEXT( "name: " );
- UINT16 nCch = Read2( rIn );
- if( nCch == 0xFFFF )
- ADDTEXT( "<name in cache>" );
- else if( nCch )
- AddUNICODEString( t, rIn, TRUE, nCch );
- else
- ADDTEXT( "<empty string>" );
- PRINT();
- }
- break;
- case 0x00C6: // SXDB - cache info
- {
- ADDTEXT( "number of recs: " ); ADDDEC( 4 );
- ADDTEXT( " stream id: " ); ADDHEX( 2 );
- ADDTEXT( " flags: " ); ADDHEX( 2 );
- PRINT();
- LINESTART();
- ADDTEXT( "DB block recs: " ); ADDDEC( 2 );
- ADDTEXT( " base fields: " ); ADDDEC( 2 );
- ADDTEXT( " all fields: " ); ADDDEC( 2 );
- PRINT();
- LINESTART();
- ADDTEXT( "reserved: " ); ADDHEX( 2 );
- ADDTEXT( " type: " ); ADDHEX( 2 );
- ADDTEXT( " changed by:" );
- PRINT();
- LINESTART();
- AddUNICODEString( t, rIn );
- PRINT();
- }
- break;
- case 0x00C7: // SXFIELD - Pivot Field
- {
- nItemCnt = 0;
-
- ADDTEXT( "#" );
- __AddDec( t, nFieldCnt, 3 );
- nFieldCnt++;
- ADDTEXT( " (pivot field): " );
- if( rIn.GetRecLeft() < 14 )
- {
- ADDTEXT( "<break in pivot field start>" );
- PRINT();
- }
- else
- {
- PRINT();
- LINESTART();
- ADDTEXT( pPre );
- rIn >> __nFlags;
- STARTFLAG();
- ADDFLAG( 0x0001, "fOrigItems" );
- ADDFLAG( 0x0002, "fPostponed" );
- ADDFLAG( 0x0004, "fCalculated" );
- ADDFLAG( 0x0008, "fGroupChild" );
- ADDFLAG( 0x0010, "fNumGroup" );
- ADDFLAG( 0x0200, "fLongIndex" );
- ADDFLAG( 0x1000, "f1000?" );
- ADDFLAG( 0x8000, "f8000?" );
- ADDRESERVED( 0x6000 );
- ADDTEXT( " data-type=" );
- __AddHex( t, static_cast< sal_uInt16 >( __nFlags & 0x0DE0 ) );
- ADDTEXT( "=" );
- switch( __nFlags & 0x0DE0 )
- {
- case 0x0000: ADDTEXT( "spc" ); break;
- case 0x0480: ADDTEXT( "str" ); break;
- case 0x0520: ADDTEXT( "int[+dbl]" ); break;
- case 0x0560: ADDTEXT( "dbl" ); break;
- case 0x05A0: ADDTEXT( "str+int[+dbl]" ); break;
- case 0x05E0: ADDTEXT( "str+dbl" ); break;
- case 0x0900: ADDTEXT( "dat" ); break;
- case 0x0D00: ADDTEXT( "dat+int/dbl" ); break;
- case 0x0D80: ADDTEXT( "dat+str[+int/dbl]" ); break;
- default: ADDTEXT( pU );
- }
- PRINT();
- LINESTART();
- ADDTEXT( pPre );
- ADDTEXT( "group-subfield=" ); ADDDEC( 2 );
- ADDTEXT( " group-basefield=" ); ADDDEC( 2 );
- PRINT();
- LINESTART();
- ADDTEXT( pPre );
- ADDTEXT( "item-count=" ); ADDDEC( 2 );
- ADDTEXT( " group-item-count=" ); ADDDEC( 2 );
- PRINT();
- LINESTART();
- ADDTEXT( pPre );
- ADDTEXT( "base-item-count=" ); ADDDEC( 2 );
- ADDTEXT( " source-item-count=" ); ADDDEC( 2 );
- PRINT();
- LINESTART();
- ADDTEXT( pPre );
- if( rIn.GetRecLeft() < 3 )
- {
- ADDTEXT( "<break in pivot field name>" );
- PRINT();
- }
- else
- {
- ADDTEXT( "name=" );
- AddUNICODEString( t, rIn );
- PRINT();
- }
- }
- }
- break;
- case 0x00C8: // SXINDEXLIST - indexes to source data
- {
- ADDTEXT( "#" );
- __AddDec( t, nTabIndexCnt, 3 );
- nTabIndexCnt++;
- ADDTEXT( " (index list):" );
- for( UINT16 iIndex = 0; iIndex < rIn.GetRecSize(); iIndex++ )
- {
- ADDTEXT( " " );
- ADDHEX( 1 );
- }
- PRINT();
- }
- break;
- case 0x00C9: // SXDOUBLE - cache entry: double value
- {
- ADDTEXT( "#" );
- __AddDec( t, nItemCnt, 3 );
- ADDTEXT( " (double): " );
- nItemCnt++;
- ADDTEXT( " " );
- ADDDOUBLE();
- PRINT();
- }
- break;
- case 0x00CA: // SXBOOLEAN - cache entry: boolean value
- {
- ADDTEXT( "#" );
- __AddDec( t, nItemCnt, 3 );
- ADDTEXT( " (boolean): " );
- nItemCnt++;
- ADDTEXT( " " );
- lcl_AddFlag( t, rIn.ReaduInt16() != 0 );
- PRINT();
- }
- break;
- case 0x00CB: // SXERROR - cache entry: error code
- {
- ADDTEXT( "#" );
- __AddDec( t, nItemCnt, 3 );
- ADDTEXT( " (error): " );
- nItemCnt++;
- ADDTEXT( " " );
- ADDHEX( 2 );
- PRINT();
- }
- break;
- case 0x00CC: // SXINTEGER - signed 16bit integer
- {
- ADDTEXT( "#" );
- __AddDec( t, nItemCnt, 3 );
- ADDTEXT( " (integer): " );
- nItemCnt++;
- ADDTEXT( " " );
- ADDDEC( 2 );
- PRINT();
- }
- break;
- case 0x00CD: // SXSTRING - String
- {
- if( bSubStream )
- {
- ADDTEXT( "#" );
- __AddDec( t, nItemCnt, 3 );
- ADDTEXT( " (string): " );
- nItemCnt++;
- }
- AddUNICODEString( t, rIn );
- PRINT();
- }
- break;
- case 0x00CE: // SXDATETIME - date & time special format
- {
- ADDTEXT( "#" );
- __AddDec( t, nItemCnt, 3 );
- ADDTEXT( " (date/time): " );
- nItemCnt++;
- UINT8 nDay, nHour, nMin, nSec;
- UINT16 nYear, nMonth;
- rIn >> nYear >> nMonth >> nDay >> nHour >> nMin >> nSec;
- if( nDay )
- {
- __AddDec( t, nDay );
- ADDTEXT( "." );
- __AddDec( t, nMonth );
- ADDTEXT( "." );
- __AddDec( t, nYear );
- ADDTEXT( " " );
- }
- __AddDec( t, nHour, 2, '0' );
- ADDTEXT( ":" );
- __AddDec( t, nMin, 2, '0' );
- ADDTEXT( ":" );
- __AddDec( t, nSec, 2, '0' );
- PRINT();
- }
- break;
- case 0x00CF: // SXEMPTY - cache entry: empty
- {
- ADDTEXT( "#" );
- __AddDec( t, nItemCnt, 3 );
- ADDTEXT( " (empty): " );
- nItemCnt++;
- PRINT();
- }
- break;
- case 0x00D5: // SXIDSTM - pivot table cache stream id
- {
- LINESTART();
- UINT16 nStrId = Read2( rIn );
- ADDTEXT( "Stream ID: " );
- __AddHex( t, nStrId );
- PRINT();
- DumpRecordStream( OpenStorage( EXC_STORAGE_PTCACHE ), ScfTools::GetHexStr( nStrId ), EMPTY_STRING );
- }
- break;
- case 0x00D8: // SXNUMGROUP - numerical grouping in pivot cache field
- {
- LINESTART();
- rIn >> __nFlags;
- STARTFLAG();
- ADDFLAG( 0x0001, "fAutoMin" );
- ADDFLAG( 0x0002, "fAutoMax" );
- ADDTEXT( " data-type=" );
- switch( (__nFlags & 0x003C) >> 2 )
- {
- case 0x0001: ADDTEXT( "seconds" ); break;
- case 0x0002: ADDTEXT( "minutes" ); break;
- case 0x0003: ADDTEXT( "hours" ); break;
- case 0x0004: ADDTEXT( "days" ); break;
- case 0x0005: ADDTEXT( "months" ); break;
- case 0x0006: ADDTEXT( "quarters" ); break;
- case 0x0007: ADDTEXT( "years" ); break;
- case 0x0008: ADDTEXT( "numeric" ); break;
- default: ADDTEXT( pU );
- }
- (__nFlags &= 0xFFC0) >>= 6;
- ADDTEXT( " remaining=" ); __AddHex( t, __nFlags );
- ADDTEXT( "=" ); __AddDec( t, __nFlags );
- PRINT();
- }
- break;
- case 0xE0:
- DumpXF( rIn, pPre );
- break;
- case 0xE3:
- {
- LINESTART();
- ADDTEXT( "view source (" );
- UINT16 n = Read2( rIn );
- __AddHex( t, n );
- ADDTEXT( "): " );
- switch( n )
- {
- case 0x01: p = "M$ Excel list or database"; break;
- case 0x02: p = "external data source"; break;
- case 0x04: p = "multiple consolidation ranges"; break;
- case 0x08: p = "pivot table"; break;
- case 0x10: p = "scenario manager summary report"; break;
- default: p = pU;
- }
- ADDTEXT( p );
- PRINT();
- }
- break;
- case 0x00E5: // CELLMERGING
- {
- UINT16 nCount, nInd;
- UINT16 nRow1, nRow2, nCol1, nCol2;
- rIn >> nCount;
- LINESTART();
- ADDTEXT( "Count: " );
- __AddDec( t, nCount );
- PRINT();
- LINESTART();
- for( nInd = 0; nInd < 3; nInd++ )
- ADDTEXT( " row - row / col-col | " );
- PRINT();
- LINESTART();
- if( (ULONG)(nCount * 8 + 2) == nL )
- {
- for( nInd = 0; nInd < nCount; nInd++ )
- {
- rIn >> nRow1 >> nRow2 >> nCol1 >> nCol2;
- __AddDec( t, nRow1, 5 );
- ADDTEXT( "-" );
- __AddDec( t, nRow2, 5 );
- ADDTEXT( " / " );
- __AddDec( t, nCol1, 3 );
- ADDTEXT( "-" );
- __AddDec( t, nCol2, 3 );
- ADDTEXT( " | " );
- if( (nInd % 3 == 2) || (nInd == nCount - 1) )
- {
- PRINT();
- LINESTART();
- }
- }
- }
- else
- {
- LINESTART();
- ADDTEXT( "<Wrong record length!>" );
- PRINT();
- }
- }
- break;
- case 0xEB:
- case 0xEC:
- case 0xED:
- EscherDump( nL, true );
- break;
- case 0x00F6: // SXNAME
- {
- LINESTART();
- rIn >> __nFlags;
- STARTFLAG();
- ADDFLAG( 0x0002, "fNameErr" );
- ADDRESERVED( 0xFFFD );
- ADDTEXT( " field=" ); ADDDEC( 2 );
- PRINT();
- LINESTART();
- sal_Int16 nFunc;
- rIn >> nFunc;
- ADDTEXT( "function=" ); __AddHex( t, (INT32)nFunc );
- static const sal_Char* const ppcFuncs[] = {
- "none", 0, "sum", "counta", "count", "average", "max", "min",
- "product", "stdev", "stdevp", "var", "varp" };
- lcl_AddEnum( t, nFunc, ppcFuncs, STATIC_TABLE_SIZE( ppcFuncs ), 0, -1 );
- ADDTEXT( " SXPAIR-count=" ); ADDDEC( 2 );
- PRINT();
- }
- break;
- case 0x00F9: // SXFMLA
- {
- LINESTART();
- sal_uInt16 nSize;
- rIn >> nSize;
- ADDTEXT( "formula-size=" ); __AddDec( t, nSize );
- ADDTEXT( " SXNAME-count=" ); ADDDEC( 2 );
- PRINT();
- FormulaDump( nSize, FT_RangeName );
- }
- break;
- case 0xFC:
- {
- UINT16 nCnt = 0;
- BOOL bOK = TRUE;
- ContDump( 8 );
-
- while( bOK && (rIn.GetRecLeft() > 0) )
- {
- LINESTART();
- __AddDec( t, nCnt );
- ADDTEXT( ": " );
- bOK = AddUNICODEString( t, rIn );
- PRINT();
- nCnt++;
- }
- }
- break;
- case 0xFD:
- {
- LINESTART();
- ADDCELLHEAD();
- ADDTEXT( " sst = " );
- ADDDEC(4);
- PRINT();
- }
- break;
- case 0x0100: // SXVDEX
- {
- LINESTART();
- sal_uInt32 __nFlags = Read4( rIn );
- STARTFLAG();
- if( __nFlags & 0x0000009F )
- {
- ADDFLAG( 0x00000001, "fShowAllItems" );
- ADDFLAG( 0x00000002, "fDragToRow" );
- ADDFLAG( 0x00000004, "fDragToColumn" );
- ADDFLAG( 0x00000008, "fDragToPage" );
- ADDFLAG( 0x00000010, "fDragToHide" );
- ADDFLAG( 0x00000080, "fServerBased" );
- PRINT();
- LINESTART();
- }
- if( __nFlags & 0x00007E00 )
- {
- ADDTEXT( " " );
- ADDFLAG( 0x00000200, "fAutoSort" );
- ADDFLAG( 0x00000400, "fAscendSort" );
- ADDFLAG( 0x00000800, "fAutoShow" );
- ADDFLAG( 0x00001000, "fAscendShow" );
- ADDFLAG( 0x00002000, "fCalculatedField" );
- ADDFLAG( 0x00004000, "fLONewPage" ); // undocumented
- PRINT();
- LINESTART();
- }
- if( __nFlags & 0xFFE00000 )
- {
- ADDTEXT( " " ); // Layout flags:
- ADDFLAG( 0x00200000, "fLOReport" ); // undocumented
- ADDFLAG( 0x00400000, "fLOBlankLine" ); // undocumented
- ADDFLAG( 0x00800000, "fLOSubTotalTop" ); // undocumented
- ADDTEXT( " show-items=" ); __AddDec( t, sal_uInt32( __nFlags >> 24 ) );
- PRINT();
- LINESTART();
- }
- if( __nFlags & 0x001F8160 )
- {
- ADDTEXT( " !RESERVED!" );
- PRINT();
- }
- if( !__nFlags )
- PRINT();
- LINESTART();
- ADDTEXT( " sort-field=" );
- ADDDEC( 2 );
- ADDTEXT( " show-field=" );
- ADDDEC( 2 );
- PRINT();
- LINESTART();
- ADDTEXT( "format=" );
- UINT16 n = Read2( rIn );
- if( n )
- __AddDec( t, n );
- else
- ADDTEXT( "none" );
- PRINT();
- }
- break;
- case 0x0122: // SXDBEX - ext. cache info
- {
- ADDTEXT( "last changed: " ); ADDDOUBLE();
- ADDTEXT( " SXFORMULA recs: " ); ADDDEC( 4 );
- PRINT();
- }
- break;
- case 0x0138: // CHTRINFO - change tracking info
- {
- rIn.DisableDecryption();
- ADDTEXT( "14 bytes of unknown data..." );
- PRINT();
- ContDump( 14 );
- LINESTART();
- ADDTEXT( "16 bytes unknown identification:" );
- PRINT();
- ContDump( 16 );
- LINESTART();
- ADDTEXT( "unknown: " ); ADDHEX( 2 );
- ADDTEXT( " user: " );
- if( rIn.GetRecLeft() > 3 )
- AddUNICODEString( t, rIn );
- PRINT();
- LINESTART();
- __AddDec( t, (UINT16)(rIn.GetRecLeft() - 10) );
- ADDTEXT( " bytes of unknown data..." );
- PRINT();
- ContDump( rIn.GetRecLeft() - 10 );
- LINESTART();
- ADDTEXT( "date/time: " ); ADDDEC( 2 );
- ADDTEXT( "-" ); ADDDEC( 1 );
- ADDTEXT( "-" ); ADDDEC( 1 );
- ADDTEXT( " " ); ADDDEC( 1 );
- ADDTEXT( ":" ); ADDDEC( 1 );
- ADDTEXT( ":" ); ADDDEC( 1 );
- ADDTEXT( " unknown: " ); ADDHEX( 1 );
- ADDTEXT( " " ); ADDHEX( 2 );
- PRINT();
- }
- break;
- case 0x0137: // CHTRINSERT - change tracking: insert/remove
- {
- ADDTEXT( "len: " ); ADDDEC( 4 );
- ADDTEXT( " index: " ); ADDDEC( 4 );
- ADDTEXT( " op: " );
- UINT16 nOp;
- rIn >> nOp;
- switch( nOp )
- {
- case 0x0000: ADDTEXT( "insert row" ); break;
- case 0x0001: ADDTEXT( "insert column" ); break;
- case 0x0002: ADDTEXT( "delete row" ); break;
- case 0x0003: ADDTEXT( "delete column" ); break;
- default:
- __AddHex( t, nOp );
- ADDTEXT( " *UNKNOWN*" );
- }
- ADDTEXT( " accept: " ); ADDHEX( 2 );
- ADDTEXT( " tab: " ); ADDDEC( 2 );
- PRINT();
- LINESTART();
- UINT16 __nFlags = Read2( rIn );
- STARTFLAG();
- ADDFLAG( 0x0001, "fAuto" );
- ADDRESERVED( 0xFFFE );
- UINT16 nCol1, nRow1, nCol2, nRow2;
- rIn >> nRow1 >> nRow2 >> nCol1 >> nCol2;
- ADDTEXT( " range: " ); lcl_AddRangeRef( t, nCol1, nRow1, nCol2, nRow2 );
- ADDTEXT( " unknown: " ); ADDHEX( 4 );
- PRINT();
- }
- break;
- case 0x013B: // CHTRCELLCONTENT: change tracking: changed cell
- {
- PreDump( nL );
- ADDTEXT( "len: " ); ADDDEC( 4 );
- ADDTEXT( " index: " ); ADDDEC( 4 );
- ADDTEXT( " opcode: " ); ADDHEX( 2 );
- ADDTEXT( " accept: " ); ADDHEX( 2 );
- ADDTEXT( " tab: " ); ADDDEC( 2 );
- PRINT();
- LINESTART();
- UINT16 nChg, nOldType, nNewType;
- rIn >> nChg;
- nOldType = (nChg & 0x0038) >> 3;
- nNewType = nChg & 0x0007;
- ADDTEXT( "change (" ); __AddHex( t, nChg );
- ADDTEXT( "): " );
- switch( nOldType )
- {
- case 0x0000: ADDTEXT( "empty->" ); break;
- case 0x0001: ADDTEXT( "RK->" ); break;
- case 0x0002: ADDTEXT( "double->" ); break;
- case 0x0003: ADDTEXT( "string->" ); break;
- case 0x0004: ADDTEXT( "bool->" ); break;
- case 0x0005: ADDTEXT( "formula->" ); break;
- default: ADDTEXT( "*UNKNOWN*->" );
- }
- switch( nNewType )
- {
- case 0x0000: ADDTEXT( "empty" ); break;
- case 0x0001: ADDTEXT( "RK" ); break;
- case 0x0002: ADDTEXT( "double" ); break;
- case 0x0003: ADDTEXT( "string" ); break;
- case 0x0004: ADDTEXT( "bool" ); break;
- case 0x0005: ADDTEXT( "formula" ); break;
- default: ADDTEXT( "*UNKNOWN*" );
- }
- UINT16 nFormatData = (nChg & 0xFF00);
- if( (nFormatData == 0x1100) || (nFormatData == 0x1300) )
- ADDTEXT( "; contains add. data" );
- ADDTEXT( " format: " ); ADDHEX( 2 );
- UINT16 nCol, nRow;
- rIn >> nRow >> nCol;
- ADDTEXT( " address: " ); lcl_AddRef( t, nCol, nRow );
- PRINT();
- LINESTART();
- UINT16 nOldLen;
- rIn >> nOldLen;
- ADDTEXT( "old value len: " ); __AddHex( t, nOldLen );
- if( nOldType == 0x0003 )
- nOldLen >>= 1;
- ADDTEXT( " unknown: " ); ADDHEX( 4 );
- PRINT();
- UINT16 nCount = 0;
- switch( nFormatData )
- {
- case 0x1100: nCount = 8; break;
- case 0x1300: nCount = 4; break;
- }
- if( nCount )
- {
- LINESTART();
- ADDTEXT( "additional format data:" );
- for( UINT16 nIndex = 0; nIndex < nCount; nIndex ++ )
- {
- ADDTEXT( " " );
- ADDHEX( 2 );
- }
- PRINT();
- }
- if( nOldType )
- {
- LINESTART();
- ADDTEXT( "old value: " );
- switch( nOldType )
- {
- case 0x0001:
- __AddRK( t, rIn.ReadInt32() );
- PRINT();
- break;
- case 0x0002:
- ADDDOUBLE();
- PRINT();
- break;
- case 0x0003:
- AddUNICODEString( t, rIn );
- PRINT();
- break;
- case 0x0004:
- if( Read2( rIn ) )
- ADDTEXT( "true" );
- else
- ADDTEXT( "false" );
- PRINT();
- break;
- case 0x0005:
- {
- PRINT();
- UINT16 nLen;
- rIn >> nLen;
- FormulaDump( nLen, FT_CellFormula );
- IGNORE( 1 );
- }
- break;
- }
- }
- if( nNewType )
- {
- LINESTART();
- ADDTEXT( "new value: " );
- switch( nNewType )
- {
- case 0x0001:
- __AddRK( t, rIn.ReadInt32() );
- PRINT();
- break;
- case 0x0002:
- ADDDOUBLE();
- PRINT();
- break;
- case 0x0003:
- AddUNICODEString( t, rIn );
- PRINT();
- break;
- case 0x0004:
- if( Read2( rIn ) )
- ADDTEXT( "true" );
- else
- ADDTEXT( "false" );
- PRINT();
- break;
- case 0x0005:
- {
- PRINT();
- UINT16 nLen;
- rIn >> nLen;
- FormulaDump( nLen, FT_CellFormula );
- IGNORE( 1 );
- }
- break;
- }
- }
- if( rIn.GetRecLeft() > 0 )
- {
- LINESTART();
- ADDTEXT( "*UNKNOWN* data:" );
- PRINT();
- PreDump( rIn.GetRecLeft() );
- }
- }
- break;
- case 0x013D: // TABID
- {
- ADDTEXT( "tab ids:" );
- while( rIn.GetRecLeft() )
- {
- ADDTEXT( " " );
- ADDDEC( 2 );
- }
- PRINT();
- }
- break;
- case 0x0140: // CHTRMOVE - change tracking: moved range
- {
- ADDTEXT( "len: " ); ADDDEC( 4 );
- ADDTEXT( " index: " ); ADDDEC( 4 );
- ADDTEXT( " opcode: " ); ADDHEX( 2 );
- ADDTEXT( " accept: " ); ADDHEX( 2 );
- PRINT();
- UINT16 nTab1, nTab2;
- UINT16 nCol11, nCol12, nCol21, nCol22;
- UINT16 nRow11, nRow12, nRow21, nRow22;
- rIn >> nTab2 >> nRow11 >> nRow12 >> nCol11 >> nCol12 >> nRow21 >> nRow22 >> nCol21 >> nCol22 >> nTab1;
- LINESTART();
- ADDTEXT( "move range from: tab=" ); __AddDec( t, nTab1 );
- ADDTEXT( " " ); lcl_AddRangeRef( t, nCol11, nRow11, nCol12, nRow12 );
- ADDTEXT( " to: tab=" ); __AddDec( t, nTab2 );
- ADDTEXT( " " ); lcl_AddRangeRef( t, nCol21, nRow21, nCol22, nRow22 );
- ADDTEXT( " unknown: " ); ADDHEX( 4 );
- PRINT();
- }
- break;
- case 0x014D: // CHTRINSERTTAB - change tracking: insert tab
- {
- ADDTEXT( "len: " ); ADDDEC( 4 );
- ADDTEXT( " index: " ); ADDDEC( 4 );
- ADDTEXT( " opcode: " ); ADDHEX( 2 );
- ADDTEXT( " accept: " ); ADDHEX( 2 );
- ADDTEXT( " tab: " ); ADDDEC( 2 );
- PRINT();
- LINESTART();
- ADDTEXT( "unknown: " ); ADDHEX( 4 );
- ADDTEXT( " table name: " );
- AddUNICODEString( t, rIn );
- PRINT();
- LINESTART();
- __AddDec( t, (sal_uInt32)rIn.GetRecLeft() );
- ADDTEXT( " bytes of unknown data:" );
- PRINT();
- ContDump( rIn.GetRecLeft() );
- }
- break;
- case 0x015F: // LABELRANGES
- {
- UINT16 nCnt, nR1, nR2, nC1, nC2;
- rIn >> nCnt;
- ADDTEXT( "row headers: " ); __AddDec( t, nCnt );
- PRINT();
- while( nCnt-- )
- {
- rIn >> nR1 >> nR2 >> nC1 >> nC2;
- LINESTART();
- AddRangeRef( t, nR1, nC1 | 0xC000, nR2, nC2 | 0xC000, FALSE );
- PRINT();
- }
- rIn >> nCnt;
- LINESTART();
- ADDTEXT( "column headers: " ); __AddDec( t, nCnt );
- PRINT();
- while( nCnt-- )
- {
- rIn >> nR1 >> nR2 >> nC1 >> nC2;
- LINESTART();
- AddRangeRef( t, nR1, nC1 | 0xC000, nR2, nC2 | 0xC000, FALSE );
- PRINT();
- }
- }
- break;
- case 0x0193:
- {
- ADDTEXT( "unknown: " ); ADDHEX( 4 );
- PRINT();
- LINESTART();
- ADDTEXT( "16 bytes unknown identification:" );
- PRINT();
- ContDump( 16 );
- LINESTART();
- ADDTEXT( "date/time: " ); ADDDEC( 2 );
- ADDTEXT( "-" ); ADDDEC( 1 );
- ADDTEXT( "-" ); ADDDEC( 1 );
- ADDTEXT( " " ); ADDDEC( 1 );
- ADDTEXT( ":" ); ADDDEC( 1 );
- ADDTEXT( ":" ); ADDDEC( 1 );
- ADDTEXT( " unknown: " ); ADDHEX( 1 );
- PRINT();
- LINESTART();
- ADDTEXT( "user: " );
- if( rIn.GetRecLeft() > 3 )
- AddUNICODEString( t, rIn );
- PRINT();
- }
- break;
- case 0x0194:
- {
- rIn.DisableDecryption();
- ADDTEXT( "unknown: " ); ADDHEX( 4 );
- ADDTEXT( " date/time: " ); ADDDEC( 2 );
- ADDTEXT( "-" ); ADDDEC( 1 );
- ADDTEXT( "-" ); ADDDEC( 1 );
- ADDTEXT( " " ); ADDDEC( 1 );
- ADDTEXT( ":" ); ADDDEC( 1 );
- ADDTEXT( ":" ); ADDDEC( 1 );
- ADDTEXT( " unknown: " ); ADDHEX( 1 );
- PRINT();
- LINESTART();
- ADDTEXT( "user: " );
- if( rIn.GetRecLeft() > 3 )
- AddUNICODEString( t, rIn );
- PRINT();
- LINESTART();
- __AddDec( t, (sal_uInt32)rIn.GetRecLeft() );
- ADDTEXT( " bytes of unknown data:" );
- PRINT();
- ContDump( rIn.GetRecLeft() );
- }
- break;
- case 0x0195:
- rIn.DisableDecryption();
- ContDump( nL );
- break;
- case 0x0196:
- {
- rIn.DisableDecryption();
- ADDTEXT( "unknown: " ); ADDHEX( 2 );
- ADDTEXT( " " ); ADDHEX( 2 );
- ADDTEXT( " " ); ADDHEX( 2 );
- PRINT();
- LINESTART();
- ADDTEXT( "16 bytes unknown identification:" );
- PRINT();
- ContDump( 16 );
- LINESTART();
- ADDTEXT( "16 bytes unknown identification:" );
- PRINT();
- ContDump( 16 );
- LINESTART();
- ADDTEXT( "count of changes: " ); ADDDEC( 2 );
- ADDTEXT( " " );
- __AddDec( t, (sal_uInt32)rIn.GetRecLeft() );
- ADDTEXT( " bytes of unknown data:" );
- PRINT();
- ContDump( rIn.GetRecLeft() );
- }
- break;
- case 0x01A9: // USERBVIEW
- {
- LINESTART();
- ADDTEXT( "view id: " ); ADDHEX( 4 );
- ADDTEXT( " tab id: " ); ADDDEC( 4 );
- ADDTEXT( " guid: " ); __AddGUID( t, rIn );
- PRINT();
- LINESTART();
- ADDTEXT( "window x: " ); ADDDEC( 4 );
- ADDTEXT( " y: " ); ADDDEC( 4 );
- ADDTEXT( " width: " ); ADDDEC( 4 );
- ADDTEXT( " height: " ); ADDDEC( 4 );
- ADDTEXT( " ratio: " ); ADDDEC( 2 );
- PRINT();
- LINESTART();
- UINT16 __nFlags = Read2( rIn );
- STARTFLAG();
- ADDFLAG( 0x0001, "fDsplFormulaBar" );
- ADDFLAG( 0x0002, "fDsplStatus" );
- ADDFLAG( 0x0004, "fNoteOff" );
- ADDFLAG( 0x0008, "fDsplHScroll" );
- ADDFLAG( 0x0010, "fDsplVScroll" );
- ADDFLAG( 0x0020, "fBotAdornment" );
- ADDFLAG( 0x0040, "fZoom" );
- ADDFLAG( 0x0080, "fShowPlaceHld" );
- ADDFLAG( 0x0100, "fHideAll" );
- if( !(__nFlags & 0x0180) )
- ADDTEXT( " fShowAll" );
- PRINT();
- LINESTART();
- ADDTEXT( "flags2: " ); ADDHEX( 2 );
- ADDTEXT( " merge int: " ); ADDDEC( 2 );
- ADDTEXT( " reserved: " ); ADDHEX( 2 );
- PRINT();
- if( rIn.GetRecLeft() > 3 )
- {
- LINESTART();
- ADDTEXT( "name: " );
- AddUNICODEString( t, rIn );
- PRINT();
- }
- }
- break;
- case 0x01AA: // USERSVIEWBEGIN
- {
- LINESTART();
- ADDTEXT( "guid: " ); __AddGUID( t, rIn );
- ADDTEXT( " tab id: " ); ADDDEC( 4 );
- PRINT();
- LINESTART();
- ADDTEXT( "wscale: " ); ADDDEC( 4 );
- ADDTEXT( " icolor: " ); ADDDEC( 4 );
- ADDTEXT( " pane: " ); ADDDEC( 4 );
- PRINT();
- LINESTART();
- UINT32 __nFlags = Read4( rIn );
- STARTFLAG();
- if( __nFlags & 0x000000FF )
- {
- ADDFLAG( 0x00000001, "fShowPgBrk" );
- ADDFLAG( 0x00000002, "fDsplForml" );
- ADDFLAG( 0x00000004, "fDsplGrid" );
- ADDFLAG( 0x00000008, "fDsplRCHead" );
- ADDFLAG( 0x00000010, "fDsplGuts" );
- ADDFLAG( 0x00000020, "fDsplZeros" );
- ADDFLAG( 0x00000040, "fPrintHorC" );
- ADDFLAG( 0x00000080, "fPrintVerC" );
- PRINT();
- LINESTART();
- }
- if( __nFlags & 0x00007F00 )
- {
- ADDTEXT( " " );
- ADDFLAG( 0x00000100, "fPrintRCHead" );
- ADDFLAG( 0x00000200, "fPrintGrid" );
- ADDFLAG( 0x00000400, "fFitToPage" );
- ADDFLAG( 0x00000800, "fPrintArea" );
- ADDFLAG( 0x00001000, "fOnePrintArea" );
- ADDFLAG( 0x00002000, "fFilter" );
- ADDFLAG( 0x00004000, "fAutoFilter" );
- PRINT();
- LINESTART();
- }
- if( __nFlags & 0xFFF80000 )
- {
- ADDTEXT( " " );
- ADDFLAG( 0x00020000, "fSplitV" );
- ADDFLAG( 0x00040000, "fSplitH" );
- ADDFLAG( 0x00180000, "fHiddenRow" );
- ADDFLAG( 0x00200000, "fHiddenCol" );
- ADDFLAG( 0x01000000, "fChartSize" );
- ADDFLAG( 0x02000000, "fFilterUnique" );
- ADDFLAG( 0x04000000, "fLayoutView" );
- ADDRESERVED( 0xF8C18000 );
- PRINT();
- LINESTART();
- }
- if( !__nFlags )
- PRINT();
- ADDTEXT( "visible: " ); ADDHEX( 2 );
- ADDTEXT( " " ); ADDHEX( 2 );
- ADDTEXT( " " ); ADDHEX( 2 );
- ADDTEXT( " " ); ADDHEX( 2 );
- PRINT();
- LINESTART();
- ADDTEXT( "pane pos vert: " ); ADDDOUBLE();
- ADDTEXT( " hor: " ); ADDDOUBLE();
- ADDTEXT( " 1st vis right: " ); ADDDEC( 2 );
- ADDTEXT( " bott: " ); ADDDEC( 2 );
- PRINT();
- }
- break;
- case 0x01AB: // USERSVIEWEND
- {
- LINESTART();
- ADDTEXT( "settings are valid: " ); ADDHEX( 2 );
- PRINT();
- }
- break;
- case 0x01AD: // QSI - web query range
- {
- LINESTART();
- rIn >> __nFlags;
- STARTFLAG();
- ADDFLAG( 0x0001, "fTitles" );
- ADDFLAG( 0x0002, "fRowNums" );
- ADDFLAG( 0x0004, "fDisRefr" );
- ADDFLAG( 0x0080, "fFill" );
- ADDFLAG( 0x0100, "fAutoFmt" );
- ADDFLAG( 0x0400, "fDisEdit" );
- ADDRESERVED( 0xFA78 );
- PRINT();
- LINESTART();
- ADDTEXT( "AutoFmt: " ); ADDDEC( 2 );
- ADDTEXT( " AutoFmtAttr: " ); ADDHEX( 2 );
- ADDTEXT( " reserved: " ); ADDHEX( 4 );
- PRINT();
- LINESTART();
- ADDTEXT( "name: " );
- AddUNICODEString( t, rIn );
- PRINT();
- }
- break;
- case 0x01AE:
- {
- LINESTART();
- ADDTEXT( "# of tabs: " );
- UINT16 nTabs;
- rIn >> nTabs;
- __AddDec( t, nTabs );
- rIn.PushPosition();
- PRINT();
- LINESTART();
- if( nL <= (ULONG)(2 + 2 * nTabs) )
- {
- ADDTEXT( "----- shortened record -----" );
- PRINT();
-
- rIn.PopPosition();
- ContDump( nL - 2 );
- }
- else
- {
- rIn.RejectPosition();
- ADDTEXT( "file name: " );
- AddUNICODEString( t, rIn );
- PRINT();
- while( nTabs )
- {
- LINESTART();
- ADDTEXT( " " );
- AddUNICODEString( t, rIn );
- PRINT();
- nTabs--;
- }
- }
-
- }
- break;
- case 0x01B0: // CONDFMT
- {
- LINESTART();
- ADDTEXT( "cf-count=" ); ADDDEC( 2 );
- rIn >> __nFlags;
- ADDTEXT( " " );
- STARTFLAG();
- ADDFLAG( 0x0001, "tough-recalc" );
- ADDRESERVED( 0xFFFE );
- PRINT();
- LINESTART();
- sal_uInt16 nR1, nR2, nC1, nC2, nCount;
- rIn >> nR1 >> nR2 >> nC1 >> nC2 >> nCount;
- ADDTEXT( "max-range=" ); lcl_AddRangeRef( t, nC1, nR1, nC2, nR2 );
- ADDTEXT( " range-count=" ); __AddDec( t, nCount );
- PRINT();
-
- for( sal_uInt16 nRange = 0; rIn.IsValid() && (nRange < nCount); ++nRange )
- {
- if( !(nRange % 4) )
- {
- LINESTART();
- ADDTEXT( pPre );
- }
- rIn >> nR1 >> nR2 >> nC1 >> nC2;
- ByteString aRef;
- lcl_AddRangeRef( aRef, nC1, nR1, nC2, nR2 );
- aRef.Expand( 16, ' ' );
- ADDTEXT( aRef );
- if( (nRange % 4 == 3) || (nRange + 1 == nCount) )
- PRINT();
- }
- }
- break;
- case 0x01B1: // CF - conditional format
- {
- sal_uInt8 nType, nOp;
- sal_uInt16 nSize1, nSize2;
- sal_uInt32 nFlags;
- rIn >> nType >> nOp >> nSize1 >> nSize2 >> nFlags;
- LINESTART();
- ADDTEXT( "type=" ); __AddHex( t, nType );
- ADDTEXT( " (" );
- switch( nType )
- {
- case 0x01: ADDTEXT( "compare" ); break;
- case 0x02: ADDTEXT( "formula" ); break;
- default: ADDTEXT( "!unknown!" );
- }
- ADDTEXT( ") operator=" ); __AddHex( t, nOp );
- ADDTEXT( " (" );
- switch( nOp )
- {
- case 0x00: ADDTEXT( "none" ); break;
- case 0x01: ADDTEXT( "between" ); break;
- case 0x02: ADDTEXT( "not-between" ); break;
- case 0x03: ADDTEXT( "equal" ); break;
- case 0x04: ADDTEXT( "not-equal" ); break;
- case 0x05: ADDTEXT( "greater" ); break;
- case 0x06: ADDTEXT( "less" ); break;
- case 0x07: ADDTEXT( "greater-eq" ); break;
- case 0x08: ADDTEXT( "less-eq" ); break;
- default: ADDTEXT( "!unknown!" );
- }
- ADDTEXT( ")" );
- PRINT();
- LINESTART();
- ADDTEXT( "formula-size-1=" ); __AddDec( t, nSize1 );
- ADDTEXT( " formula-size-2=" ); __AddDec( t, nSize2 );
- PRINT();
- LINESTART();
- sal_uInt32 __nFlags = nFlags;
- STARTFLAG();
- __nFlags = ~__nFlags;
- ADDFLAG( 0x00000400, "bord-lft" );
- ADDFLAG( 0x00000800, "bord-rgt" );
- ADDFLAG( 0x00001000, "bord-top" );
- ADDFLAG( 0x00002000, "bord-bot" );
- ADDFLAG( 0x00010000, "patt-style" );
- ADDFLAG( 0x00020000, "patt-fgcol" );
- ADDFLAG( 0x00040000, "patt-bgcol" );
- __nFlags = ~__nFlags;
- ADDFLAG( 0x04000000, "font" );
- ADDFLAG( 0x10000000, "bord" );
- ADDFLAG( 0x20000000, "patt" );
- ADDRESERVED( 0xCBC00000 );
- PRINT();
- LINESTART();
- ADDTEXT( "unknown=" ); ADDHEX( 2 );
- PRINT();
- if( nFlags & 0x04000000 )
- {
- LINESTART(); ADDTEXT( "*** FONT ***" ); PRINT();
- ContDump( 64 );
- LINESTART();
- ADDTEXT( "height=" ); ADDHEX( 4 );
- rIn >> __nFlags;
- ADDTEXT( " style-" );
- STARTFLAG();
- ADDFLAG( 0x00000002, "italic" );
- ADDFLAG( 0x00000080, "strikeout" );
- ADDRESERVED( 0xFFFFFF7D );
- ADDTEXT( " weight=" ); ADDDEC( 2 );
- PRINT();
- LINESTART();
- sal_uInt16 nEsc;
- rIn >> nEsc;
- ADDTEXT( "escapement=" ); __AddDec( t, nEsc );
- ADDTEXT( " (" );
- switch( nEsc )
- {
- case 0x0000: ADDTEXT( "none" ); break;
- case 0x0001: ADDTEXT( "super" ); break;
- case 0x0002: ADDTEXT( "sub" ); break;
- default: ADDTEXT( "!unknown!" );
- }
- sal_uInt8 nUnd;
- rIn >> nUnd;
- ADDTEXT( ") underline=" ); __AddDec( t, nUnd );
- ADDTEXT( " (" );
- switch( nUnd )
- {
- case 0x00: ADDTEXT( "none" ); break;
- case 0x01: ADDTEXT( "single" ); break;
- case 0x02: ADDTEXT( "double" ); break;
- default: ADDTEXT( "!unknown!" );
- }
- ADDTEXT( ") unknown=" ); ADDHEX( 1 );
- ADDTEXT( " " ); ADDHEX( 1 );
- ADDTEXT( " " ); ADDHEX( 1 );
- PRINT();
- LINESTART();
- ADDTEXT( "color=" ); ADDHEX( 4 );
- ADDTEXT( " unknown=" ); ADDHEX( 4 );
- rIn >> __nFlags;
- ADDTEXT( " used-" );
- STARTFLAG();
- __nFlags = ~__nFlags;
- ADDFLAG( 0x00000002, "italic" );
- ADDFLAG( 0x00000080, "strikeout" );
- __nFlags = ~__nFlags;
- ADDRESERVED( 0xFFFFFF65 );
- PRINT();
- LINESTART();
- ADDTEXT( "escape-def=" ); ADDHEX( 4 );
- ADDTEXT( " underl-def=" ); ADDHEX( 4 );
- PRINT();
- ContDump( 18 );
- }
- if( nFlags & 0x10000000 )
- {
- LINESTART(); ADDTEXT( "*** BORDER ***" ); PRINT();
- sal_uInt16 nLine;
- sal_uInt32 nColor;
- rIn >> nLine >> nColor;
- LINESTART();
- ADDTEXT( "line-style=" ); __AddHex( t, nLine );
- ADDTEXT( " (lft=" ); __AddDec( t, (sal_uInt16)(nLine & 0x000F) );
- ADDTEXT( " rgt=" ); __AddDec( t, (sal_uInt16)((nLine & 0x00F0) >> 4) );
- ADDTEXT( " top=" ); __AddDec( t, (sal_uInt16)((nLine & 0x0F00) >> 8) );
- ADDTEXT( " bot=" ); __AddDec( t, (sal_uInt16)((nLine & 0xF000) >> 12) );
- ADDTEXT( ")" );
- PRINT();
- LINESTART();
- ADDTEXT( "line-color=" ); __AddHex( t, nColor );
- ADDTEXT( " (lft=" ); __AddDec( t, (sal_uInt16)(nColor & 0x0000007F) );
- ADDTEXT( " rgt=" ); __AddDec( t, (sal_uInt16)((nColor & 0x00003F80) >> 7) );
- ADDTEXT( " top=" ); __AddDec( t, (sal_uInt16)((nColor & 0x007F0000) >> 16) );
- ADDTEXT( " bot=" ); __AddDec( t, (sal_uInt16)((nColor & 0x3F800000) >> 23) );
- ADDTEXT( ") unknown=" ); ADDHEX( 2 );
- PRINT();
- }
- if( nFlags & 0x20000000 )
- {
- LINESTART(); ADDTEXT( "*** AREA ***" ); PRINT();
- sal_uInt16 nPatt, nColor;
- rIn >> nPatt >> nColor;
- LINESTART();
- ADDTEXT( "pattern=" ); __AddHex( t, nPatt );
- ADDTEXT( " (" ); __AddDec( t, (sal_uInt16)((nPatt & 0xFC00) >> 10) );
- ADDTEXT( ") color=" ); __AddHex( t, nColor );
- ADDTEXT( " (fg=" ); __AddDec( t, (sal_uInt16)(nColor & 0x007F) );
- ADDTEXT( " bg=" ); __AddDec( t, (sal_uInt16)((nColor & 0x3F80) >> 7) );
- ADDTEXT( ")" );
- PRINT();
- }
- if( rIn.IsValid() && nSize1 && (rIn.GetRecLeft() >= nSize1) )
- {
- LINESTART(); ADDTEXT( "*** FORMULA 1 ***" ); PRINT();
- FormulaDump( nSize1, FT_RangeName );
- }
- if( rIn.IsValid() && nSize2 && (rIn.GetRecLeft() >= nSize2) )
- {
- LINESTART(); ADDTEXT( "*** FORMULA 2 ***" ); PRINT();
- FormulaDump( nSize2, FT_RangeName );
- }
- }
- break;
- case 0x01B2: // DVAL - header of DV recs
- {
- rIn >> __nFlags;
- LINESTART();
- STARTFLAG();
- ADDTEXT( " (" );
- __AddPureBin( t, __nFlags );
- ADDTEXT( ")" );
- ADDTEXT( "):" );
- ADDFLAG( 0x0001, "fWnClosed" );
- ADDFLAG( 0x0002, "fWnPinned" );
- ADDFLAG( 0x0004, "fCached" );
- PRINT();
- LINESTART();
- ADDTEXT( "input window: " );
- ADDHEX( 4 );
- ADDTEXT( " / " );
- ADDHEX( 4 );
- PRINT();
- LINESTART();
- ADDTEXT( "object id: " );
- ADDHEX( 4 );
- PRINT();
- LINESTART();
- ADDTEXT( "num of DV recs: " );
- ADDDEC( 4 );
- PRINT();
- }
- break;
- case 0x01B6: // TXO - text box
- {
- LINESTART();
- rIn >> __nFlags;
- STARTFLAG();
- switch( __nFlags & 0x000E )
- {
- case 0x0002: ADDTEXT( " h-left" ); break;
- case 0x0004: ADDTEXT( " h-center" ); break;
- case 0x0006: ADDTEXT( " h-right" ); break;
- case 0x0008: ADDTEXT( " h-block" ); break;
- default: ADDTEXT( " *h-unknown*" );
- }
- switch( __nFlags & 0x0070 )
- {
- case 0x0010: ADDTEXT( " v-top" ); break;
- case 0x0020: ADDTEXT( " v-center" ); break;
- case 0x0030: ADDTEXT( " v-bottom" ); break;
- case 0x0040: ADDTEXT( " v-block" ); break;
- default: ADDTEXT( " *v-unknown*" );
- }
- ADDFLAG( 0x0200, "lock-text" );
- ADDRESERVED( 0xFD81 );
- ADDTEXT( " orient=" );
- sal_uInt16 nOrient = rIn.ReaduInt16();
- __AddDec( t, nOrient );
- ADDTEXT( " (" );
- switch( nOrient )
- {
- case 0: ADDTEXT( "no-rot" ); break;
- case 1: ADDTEXT( "stacked" ); break;
- case 2: ADDTEXT( "90\xB0 ccw" ); break;
- case 3: ADDTEXT( "90\xB0 cw" ); break;
- default: ADDTEXT( "!unknown!" );
- }
- ADDTEXT( ")" );
- PRINT();
- LINESTART();
- ADDTEXT( "reserved=" );
- ADDHEX( 2 ); ADDTEXT( " " ); ADDHEX( 2 ); ADDTEXT( " " ); ADDHEX( 2 );
- ADDTEXT( " text-len=" ); ADDDEC( 2 );
- ADDTEXT( " format-size=" ); ADDDEC( 2 );
- PRINT();
- LINESTART();
- ADDTEXT( "reserved=" ); ADDHEX( 2 );
- sal_uInt16 nLinkSize = rIn.ReaduInt16();
- ADDTEXT( " link-size=" ); __AddDec( t, nLinkSize );
- PRINT();
- if( nLinkSize > 0 )
- {
- LINESTART();
- sal_uInt16 nFmlaSize = rIn.ReaduInt16();
- ADDTEXT( "fmla-size=" ); __AddDec( t, nFmlaSize );
- ADDTEXT( " reserved=" ); ADDHEX( 4 );
- PRINT();
- FormulaDump( nFmlaSize, FT_CellFormula );
- }
- }
- break;
- case 0x01BE: // DV - data validation record
- {
- UINT32 __nFlags;
- rIn >> __nFlags;
- LINESTART();
- STARTFLAG();
- ADDTEXT( " (" );
- __AddPureBin( t, __nFlags );
- ADDTEXT( ")" );
- PRINT();
- LINESTART();
- if( __nFlags )
- {
- ADDTEXT( " " );
- ADDFLAG( 0x00000080, "fStrLookup" );
- ADDFLAG( 0x00000100, "fAllowBlank" );
- ADDFLAG( 0x00000200, "fSuppressCombo" );
- ADDFLAG( 0x00040000, "fShowInputMsg" );
- ADDFLAG( 0x00080000, "fShowErrorMsg" );
- }
- PRINT();
- LINESTART();
- ADDTEXT( "error style: " );
- const char* pErrStyle[] = { "stop", "warning", "info", "4" };
- ADDTEXT( pErrStyle[ ( __nFlags >> 4 ) & 0x03 ] );
- PRINT();
- LINESTART();
- const char* pValType[] =
- {
- "all", "integer", "decimal", "list", "date", "time", "text len", "user",
- "8", "9", "A", "B", "C", "D", "E", "F"
- };
- LINESTART();
- ADDTEXT( "validation type: " );
- ADDTEXT( pValType[ __nFlags & 0x0000000F ] );
- PRINT();
-
- const char* pOpType[] =
- {
- "between", "not between", "equal", "not equal",
- "greater", "less", "greater or equal", "less or equal",
- "8", "9", "A", "B", "C", "D", "E", "F"
- };
- LINESTART();
- ADDTEXT( "operator type: " );
- ADDTEXT( pOpType[ ( __nFlags >> 20 ) & 0x0000000F ] );
- PRINT();
-
- LINESTART();
- ADDTEXT( "Prompt Title: " );
- AddUNICODEString( t, rIn );
- PRINT();
- LINESTART();
- ADDTEXT( "Error Title: " );
- AddUNICODEString( t, rIn );
- PRINT();
- LINESTART();
- ADDTEXT( "Prompt Message: " );
- AddUNICODEString( t, rIn );
- PRINT();
- LINESTART();
- ADDTEXT( "Error Message: " );
- AddUNICODEString( t, rIn );
- PRINT();
- if( rIn.GetRecLeft() > 8 )
- {
- UINT16 nLen;
- rIn >> nLen;
- LINESTART();
- ADDTEXT( "Len1: " );
- __AddDec( t, nLen );
- ADDTEXT( " (unknown1: " );
- ADDHEX( 2 );
- ADDTEXT( ")" );
- PRINT();
- FormulaDump( nLen, FT_RangeName );
-
- rIn >> nLen;
- LINESTART();
- ADDTEXT( "Len2: " );
- __AddDec( t, nLen );
- ADDTEXT( " (unknown2: " );
- ADDHEX( 2 );
- ADDTEXT( ")" );
- PRINT();
- FormulaDump( nLen, FT_RangeName );
-
- LINESTART();
- ADDTEXT( "range count: " );
- ADDHEX( 2 );
- PRINT();
- }
-
- while( rIn.GetRecLeft() >= 8 )
- {
- // Row-Row / Col-Col
- UINT16 nR1, nR2, nC1, nC2;
- rIn >> nR1 >> nR2 >> nC1 >> nC2;
- LINESTART();
- AddRangeRef( t, nR1, nC1 | 0xC000, nR2, nC2 | 0xC000, FALSE );
- PRINT();
- }
- }
- break;
- case 0x01B8: // HLINK
- {
- PreDump( nL );
-
- UINT32 n1, n2;
- LINESTART();
- PRINT();
- UINT16 nR1, nR2, nC1, nC2;
- rIn >> nR1 >> nR2 >> nC1 >> nC2;
- ADDTEXT( "Cellrange=" );
- lcl_AddRangeRef( t, nC1, nR1, nC2, nR2 );
- PRINT();
- LINESTART();
- ADDTEXT( "GUID StdLink=" ); __AddGUID( t, rIn );
- PRINT();
- LINESTART();
- ADDTEXT( " must=79EAC9D0-BAF9-11CE-8C82-00AA004BA90B" );
- PRINT();
- LINESTART();
- ADDTEXT( "unknown=" ); ADDHEX( 4 );
- PRINT();
- UINT32 __nFlags = Read4( rIn );
- LINESTART();
- STARTFLAG();
- ADDFLAG( 0x00000001, "fBody" );
- ADDFLAG( 0x00000002, "fAbs" );
- ADDFLAG( 0x00000014, "fDescr" );
- ADDFLAG( 0x00000008, "fMark" );
- ADDFLAG( 0x00000080, "fFrame" );
- ADDFLAG( 0x00000100, "fUNC" );
- ADDRESERVED( 0xFFFFFE60 );
- PRINT();
-
- //description
- String aData;
- if( __nFlags & 0x00000014 )
- {
- LINESTART();
- rIn >> n1;
- ADDTEXT( "## Description ## [l=" );
- __AddDec( t, n1 );
- ADDTEXT( "]: '" );
- aData = rIn.ReadRawUniString( (USHORT)(n1 - 1), TRUE );
- t += GETSTR( aData );
- ADDTEXT( "<" ); ADDHEX( 2 ); ADDTEXT( ">'" ); // trailing zero
- PRINT();
- }
-
- // frame name
- if( __nFlags & 0x00000080 )
- {
- LINESTART();
- rIn >> n1;
- ADDTEXT( "## Frame ## [l=" );
- __AddDec( t, n1 );
- ADDTEXT( "]: '" );
- aData = rIn.ReadRawUniString( (USHORT)(n1 - 1), TRUE );
- t += GETSTR( aData );
- ADDTEXT( "<" ); ADDHEX( 2 ); ADDTEXT( ">'" ); // trailing zero
- PRINT();
- }
-
- // network path
- if( __nFlags & 0x00000100 )
- {
- LINESTART();
- rIn >> n1;
- ADDTEXT( "## UNC ## [l=" );
- __AddDec( t, n1 );
- ADDTEXT( "]: '" );
- aData = rIn.ReadRawUniString( (USHORT)(n1 - 1), TRUE );
- t += GETSTR( aData );
- ADDTEXT( "<" ); ADDHEX( 2 ); ADDTEXT( ">'" ); // trailing zero
- PRINT();
- }
-
- // file link or URL
- else if( __nFlags & 0x00000001 )
- {
- rIn.PushPosition();
- rIn >> n1;
- rIn.PopPosition();
- LINESTART();
- ADDTEXT( "## Content GUID ## " );
- __AddGUID( t, rIn );
- switch( n1 )
- {
- case 0x00000303: // file
- {
- ADDTEXT( " File Moniker" );
- PRINT();
- LINESTART();
- ADDTEXT( " must=00000303-0000-0000-C000-000000000046" );
- PRINT();
- LINESTART();
- ADDTEXT( "## File link ## up level=" );
- ADDDEC( 2 );
- rIn >> n2;
- ADDTEXT( " [l=" ); __AddDec( t, n2 );
- ADDTEXT( ", 8-Bit]: '" );
- aData = rIn.ReadRawByteString( (USHORT)(n2 - 1) );
- t += GETSTR( aData );
- ADDTEXT( "<" ); ADDHEX( 1 ); ADDTEXT( ">'" ); // trailing zero
- PRINT();
- ContDump( 24 );
- rIn >> n2;
- LINESTART();
- ADDTEXT( "bytes left=" ); __AddDec( t, n2 );
- if( n2 )
- {
- rIn >> n2;
- LINESTART();
- ADDTEXT( " string byte count=" );
- __AddDec( t, n2 );
- ADDTEXT( " unknown=" );
- ADDHEX( 2 );
- PRINT();
- LINESTART();
- ADDTEXT( "[l=" );
- __AddDec( t, n2 / 2 );
- ADDTEXT( "]: '" );
- aData = rIn.ReadRawUniString( (USHORT)n2, TRUE );
- t += GETSTR( aData );
- ADDTEXT( "'" );
- }
- PRINT();
- }
- break;
- case 0x79EAC9E0: // URL
- {
- ADDTEXT( " URL Moniker" );
- PRINT();
- LINESTART();
- ADDTEXT( " must=79EAC9E0-BAF9-11CE-8C82-00AA004BA90B" );
- PRINT();
- rIn >> n2;
- LINESTART();
- ADDTEXT( "## URL ## string byte count=" );
- __AddDec( t, n2 );
- PRINT();
- LINESTART();
- ADDTEXT( "[l=" );
- __AddDec( t, n2 / 2 );
- ADDTEXT( "]: '" );
- aData = rIn.ReadRawUniString( (USHORT)(n2 / 2 - 1), TRUE );
- t += GETSTR( aData );
- ADDTEXT( "<" ); ADDHEX( 2 ); ADDTEXT( ">'" ); // trailing zero
- PRINT();
- }
- break;
- default:
- {
- ADDTEXT( " (!!UNKNOWN!!)" );
- PRINT();
- }
- break;
- }
- }
-
- // text mark
- if( __nFlags & 0x00000008 )
- {
- LINESTART();
- rIn >> n1;
- ADDTEXT( "## Text mark ## [l=" );
- __AddDec( t, n1 );
- ADDTEXT( "]: '" );
- aData = rIn.ReadRawUniString( (USHORT)(n1 - 1), TRUE );
- t += GETSTR( aData );
- ADDTEXT( "<" ); ADDHEX( 2 ); ADDTEXT( ">'" ); // trailing zero
- PRINT();
- }
- }
- break;
- case 0x01BB: // SXFDBTYPE - SQL data type
- {
- ADDTEXT( "SQL data type: " ); ADDHEX( 2 );
- PRINT();
- }
- break;
- case 0x0201:
- {
- LINESTART();
- ADDCELLHEAD();
- PRINT();
- }
- break;
- case 0x0203:
- {
- LINESTART();
- ADDCELLHEAD();
- ADDTEXT( " val = " );
- ADDDOUBLE();
- PRINT();
- }
- break;
- case 0x0205:
- {
- LINESTART();
- ADDCELLHEAD();
- ADDTEXT( " val = " ); ADDHEX( 1 );
- ADDTEXT( " type = " ); ADDDEC( 1 );
- PRINT();
- }
- break;
- case 0x0208: // ROW - row info
- {
- LINESTART();
- ADDTEXT( "row #: " ); ADDDEC( 2 );
- ADDTEXT( " def. cols: " ); ADDDEC( 2 );
- ADDTEXT( "-" ); ADDDEC( 2 );
- ADDTEXT( " ht: " ); ADDDEC( 2 );
- ADDTEXT( " reserved: " ); ADDHEX( 4 );
- PRINT();
- rIn >> __nFlags;
- LINESTART();
- STARTFLAG();
- ADDTEXT( " outlnlev=" );
- __AddDec( t, (UINT16)(__nFlags & 0x0007) );
- ADDFLAG( 0x0010, "fCollapsed" );
- ADDFLAG( 0x0020, "fRowHeightZero" );
- ADDFLAG( 0x0040, "fUnsynced" );
- ADDFLAG( 0x0080, "fGhostDirty" );
- ADDRESERVED( 0xFF08 );
- PRINT();
- UINT16 nXF;
- rIn >> nXF;
- LINESTART();
- ADDTEXT( "ix to XF: " ); __AddDec( t, (UINT16)(nXF & 0x0FFF) );
- ADDTEXT( " add. flags(" ); __AddHex( t, nXF );
- ADDTEXT( "):" );
- ADDFLAG( 0x1000, "fExAsc" );
- ADDFLAG( 0x2000, "fExDsc" );
- ADDRESERVED( 0xC000 );
- PRINT();
- }
- break;
- case 0x0021: // ARRAY
- case 0x0221:
- {
- UINT16 nR1, nR2;
- UINT8 nC1, nC2;
- rIn >> nR1 >> nR2 >> nC1 >> nC2 >> __nFlags;
- LINESTART();
- ADDTEXT( "range: " );
- lcl_AddRangeRef( t, nC1, nR1, nC2, nR2 );
- PRINT();
- LINESTART();
- STARTFLAG();
- ADDFLAG( 0x0001, "fAlwaysCalc" );
- ADDFLAG( 0x0002, "fCalcOnLoad" );
- ADDRESERVED( 0xFFFC );
- PRINT();
- LINESTART();
- ADDTEXT( "chn = " );
- ADDHEX( 4 );
- UINT16 n;
- rIn >> n;
- ADDTEXT( " cce = " );
- __AddDec( t, n );
- PRINT();
- FormulaDump( n, FT_SharedFormula );
- }
- break;
- case 0x0225: // DEFAULTROWHEIGHT - height & flags
- {
- rIn >> __nFlags;
- LINESTART();
- ADDTEXT( "default row " );
- STARTFLAG();
- ADDFLAG( 0x0001, "fUnsynced" );
- ADDFLAG( 0x0002, "fRowHtZero" );
- ADDFLAG( 0x0004, "fExAsc" );
- ADDFLAG( 0x0008, "fExDsc" );
- ADDRESERVED( 0xFFF0 );
- PRINT();
- LINESTART();
- ADDTEXT( "default row height: " );
- ADDDEC( 2 );
- PRINT();
- }
- break;
- case 0x023E: // WINDOW2
- {
- LINESTART();
- rIn >> __nFlags;
- STARTFLAG();
- ADDFLAG( 0x0001, "show-formulas" );
- ADDFLAG( 0x0002, "show-grid" );
- ADDFLAG( 0x0004, "show-headers" );
- ADDFLAG( 0x0008, "frozen" );
- ADDFLAG( 0x0010, "show-zero" );
- ADDFLAG( 0x0020, "auto-grid-color" );
- ADDFLAG( 0x0040, "right-to-left" );
- ADDFLAG( 0x0080, "show-outline" );
- ADDFLAG( 0x0100, "remove-splits" );
- ADDFLAG( 0x0200, "sheet-selected" );
- ADDFLAG( 0x0400, "sheet-visible" );
- ADDFLAG( 0x0800, "show-pagebreak" );
- ADDRESERVED( 0xF000 );
- PRINT();
- LINESTART();
- ADDTEXT( "first-row=" ); ADDDEC( 2 );
- ADDTEXT( " first-col=" ); ADDDEC( 2 );
- ADDTEXT( " grid-color=" ); ADDDEC( 2 );
- ADDTEXT( " reserved=" ); ADDHEX( 2 );
- PRINT();
- // reallife: WINDOW2 in charts do not have teh following fields
- if( rIn.GetRecLeft() >= 8 )
- {
- LINESTART();
- ADDTEXT( "pagebreak-zoom=" ); ADDDEC( 2 );
- ADDTEXT( "% view-zoom=" ); ADDDEC( 2 );
- ADDTEXT( "% reserved=" ); ADDHEX( 4 );
- PRINT();
- }
- }
- break;
- case 0x027E:
- {
- ADDCELLHEAD();
- ADDTEXT( " val = " );
- __AddRK( t, rIn.ReadInt32() );
- PRINT();
- }
- break;
- case 0x0293: // STYLE
- {
- LINESTART();
- sal_uInt16 nXF;
- rIn >> nXF;
- ADDTEXT( "xf-ref=" ); __AddHex( t, nXF );
- ADDTEXT( " (xf=#" ); __AddDec( t, static_cast< sal_uInt16 >( nXF & EXC_STYLE_XFMASK ) );
- if( ::get_flag( nXF, EXC_STYLE_BUILTIN ) )
- {
- sal_uInt8 nStyleId, nLevel;
- rIn >> nStyleId >> nLevel;
- ADDTEXT( " builtin) style-id=" ); __AddDec( t, nStyleId );
- ADDTEXT( " (" );
- static const sal_Char* ppcStyles[] = {
- "Normal", "RowLevel", "ColLevel", "Comma", "Currency",
- "Percent", "Comma_0", "Currency_0",
- "Hyperlink", "Followed_Hyperlink" };
- if( nStyleId < STATIC_TABLE_SIZE( ppcStyles ) )
- ADDTEXT( ppcStyles[ nStyleId ] );
- else
- ADDTEXT( "!unknown!" );
- ADDTEXT( ") outline-level=" ); __AddDec( t, nLevel );
- }
- else
- {
- ADDTEXT( ") name=" );
- AddUNICODEString( t, rIn );
- }
- PRINT();
- }
- break;
- case 0x041E:
- {
- LINESTART();
- ADDTEXT( "Index: " ); ADDHEX( 2 );
- PRINT();
- LINESTART();
- ADDTEXT( "Format: " ); AddUNICODEString( t, rIn );
- PRINT();
- }
- break;
- case 0x04BC:
- {
- UINT16 nR1, nR2;
- UINT8 nC1, nC2;
- LINESTART();
- rIn >> nR1 >> nR2 >> nC1 >> nC2;
- lcl_AddRangeRef( t, nC1, nR1, nC2, nR2 );
- PRINT();
- LINESTART();
- ADDTEXT( "reserved = " );
- __AddPureHex( t, Read2( rIn ) );
- UINT16 n;
- rIn >> n;
- ADDTEXT( " cce = " );
- __AddDec( t, n );
- PRINT();
- FormulaDump( n, FT_SharedFormula );
- }
- break;
- case 0x0803: // WEBQRYSETTINGS - web query: options
- {
- UINT16 nCnt;
- LINESTART();
- ADDTEXT( "repeated recnum: " );
- ADDHEX( 2 );
- ADDTEXT( " unknown:" );
- for( nCnt = 0; nCnt < 3; nCnt++ )
- {
- ADDTEXT( " " );
- ADDHEX( 2 );
- }
- PRINT();
- LINESTART();
- rIn >> __nFlags;
- STARTFLAG();
- ADDFLAG( 0x0001, "fImportPRE" );
- ADDFLAG( 0x0002, "fIgnoreSep" );
- ADDFLAG( 0x0004, "fUseSetting" );
- ADDFLAG( 0x0010, "fIgnoreDate" );
- ADDFLAG( 0x0020, "fWhatIsIt?" );
- ADDRESERVED( 0xFFC8 );
- PRINT();
- LINESTART();
- rIn >> __nFlags;
- STARTFLAG();
- ADDFLAG( 0x0002, "fTables" );
- ADDRESERVED( 0xFFFD );
- PRINT();
- LINESTART();
- ADDTEXT( "unknown: " ); ADDHEX( 2 );
- ADDTEXT( " " ); ADDHEX( 2 );
- ADDTEXT( " " ); ADDHEX( 2 );
- ADDTEXT( " " ); ADDHEX( 2 );
- ADDTEXT( " " ); ADDHEX( 2 );
- PRINT();
- LINESTART();
- ADDTEXT( "refresh: " ); ADDDEC( 2 );
- ADDTEXT( " unknown: " ); ADDHEX( 2 );
- ADDTEXT( " " ); ADDHEX( 2 );
- PRINT();
- }
- break;
- case 0x0804: // WEBQRYTABLES - web query: selected tables
- {
- LINESTART();
- ADDTEXT( "repeated recnum: " ); ADDHEX( 2 );
- ADDTEXT( " unknown: " ); ADDHEX( 2 );
- PRINT();
- if( nL > 6 )
- {
- LINESTART();
- ADDTEXT( "text: " );
- AddUNICODEString( t, rIn );
- PRINT();
- }
- }
- break;
- case 0x0809: // BOF
- {
- rIn.DisableDecryption();
- LINESTART();
- ADDTEXT( "version number: " );
- ADDHEX( 2 );
- PRINT();
- LINESTART();
- ADDTEXT( "substream type: " );
- rIn >> mnSubstream;
- __AddHex( t, mnSubstream );
- ADDTEXT( " (" );
- switch( mnSubstream )
- {
- case 0x0005: p = "Workbook globals"; break;
- case 0x0006: p = "Visual Basic module"; break;
- case 0x0010: p = "Worksheet or dialog sheet"; break;
- case 0x0020: p = "Chart"; break;
- case 0x0040: p = "MS 4.0 Macro"; break;
- case 0x0100: p = "Workspace file"; break;
- default: p = pU;
- }
- ADDTEXT( p );
- ADDTEXT( ")" );
- PRINT();
- LINESTART();
- UINT16 n;
- rIn >> n;
- ADDTEXT( "build identifier: ");
- __AddHex( t, n );
- ADDTEXT( " (=" );
- __AddDec( t, n );
- ADDTEXT( ")" );
- PRINT();
-
- LINESTART();
- rIn >> n;
- ADDTEXT( "build year: ");
- __AddHex( t, n );
- ADDTEXT( " (=" );
- __AddDec( t, n );
- ADDTEXT( ")" );
- PRINT();
-
- UINT32 __nFlags;
- rIn >> __nFlags;
- LINESTART();
- ADDTEXT( "file history " );
- STARTFLAG();
- if( __nFlags )
- {
- ADDFLAG( 0x00000001, "fWin" );
- ADDFLAG( 0x00000002, "fRisc" );
- ADDFLAG( 0x00000004, "fBeta" );
- ADDFLAG( 0x00000008, "fWinAny" );
- ADDFLAG( 0x00000010, "fMacAny" );
- ADDFLAG( 0x00000020, "fBetaAny" );
- ADDFLAG( 0x00000100, "fRiscAny" );
- ADDRESERVED( 0xFFFFE0C0 );
- }
- PRINT();
-
- LINESTART();
- ADDTEXT( "lowest BIFF version: ");
- ADDHEX( 4 );
- PRINT();
- }
- break;
- case 0x1002: // ChartChart
- {
- LINESTART();
- ADDTEXT( "Pos = " );
- ADD16P16();
- ADDTEXT( " / " );
- ADD16P16();
- ADDTEXT( " Size = " );
- ADD16P16();
- ADDTEXT( " / " );
- ADD16P16();
- PRINT();
- }
- break;
- case 0x1003: // ChartSeries
- {
- sal_uInt16 nCatType, nValType, nCatCnt, nValCnt, nBubType, nBubCnt;
- rIn >> nCatType >> nValType >> nCatCnt >> nValCnt >> nBubType >> nBubCnt;
- LINESTART();
- ADDTEXT( "category-type=" ); __AddDec( t, nCatType );
- ADDTEXT( " " ); ADDTEXT( GetSeriesType( nCatType ) );
- ADDTEXT( " count=" ); __AddDec( t, nCatCnt );
- PRINT();
- LINESTART();
- ADDTEXT( " value-type=" ); __AddDec( t, nValType );
- ADDTEXT( " " ); ADDTEXT( GetSeriesType( nValType ) );
- ADDTEXT( " count=" ); __AddDec( t, nValCnt );
- PRINT();
- LINESTART();
- ADDTEXT( " bubble-type=" ); __AddDec( t, nBubType );
- ADDTEXT( " " ); ADDTEXT( GetSeriesType( nBubType ) );
- ADDTEXT( " count=" ); __AddDec( t, nBubCnt );
- PRINT();
- }
- break;
- case 0x1006: // ChartDataformat
- {
- INT16 n;
- LINESTART();
- rIn >> n;
- ADDTEXT( "Point number = " );
- __AddDec( t, n );
- if( n == -1 )
- ADDTEXT( " (entire series)" );
- PRINT();
- LINESTART();
- ADDTEXT( "Series index = " );
- ADDDEC( 2 );
- ADDTEXT( " Series number = " );
- ADDDEC( 2 );
- if( Read2( rIn ) & 0x01 )
- ADDTEXT( " (fXL4iss)" );
- PRINT();
- }
- break;
- case 0x1007: // ChartLineform
- {
- LINESTART();
- ADDTEXT( "Color = " );
- ADDTEXT( GetRGB( Read4( rIn ) ) );
- ADDTEXT( " Pattern : " );
- ADDTEXT( GetLineType( Read2( rIn ) ) );
- switch( ( INT16 ) Read2( rIn ) )
- {
- case -1: p = "hairline"; break;
- case 0: p = "narrow (single)"; break;
- case 1: p = "medium (double)"; break;
- case 2: p = "wide (triple)"; break;
- default: p = pU;
- }
- ADDTEXT( ", " );
- ADDTEXT( p );
- PRINT();
- rIn >> __nFlags;
- if( __nFlags )
- {
- LINESTART();
- STARTFLAG();
- ADDFLAG( 0x0001, "fAuto" );
- ADDFLAG( 0x0004, "fDrawTick" );
- PRINT();
- }
- LINESTART();
- ADDTEXT( "color index = " );
- ADDDEC( 2 );
- PRINT();
- }
- break;
- case 0x1009: // ChartMarkerformat
- {
- UINT16 n;
- LINESTART();
- ADDTEXT( "Fore = " );
- ADDTEXT( GetRGB( Read4( rIn ) ) );
- ADDTEXT( " Back = " );
- ADDTEXT( GetRGB( Read4( rIn ) ) );
- rIn >> n;
- switch( n )
- {
- case 0: p = "no marker"; break;
- case 1: p = "square"; break;
- case 2: p = "diamond"; break;
- case 3: p = "triangle"; break;
- case 4: p = "X"; break;
- case 5: p = "star"; break;
- case 6: p = "Dow-Jones"; break;
- case 7: p = "std deviation"; break;
- case 8: p = "circle"; break;
- case 9: p = "plus sign"; break;
- default: p = pU;
- }
- ADDTEXT( " Type = " );
- ADDTEXT( p );
- PRINT();
- rIn >> __nFlags;
- if( __nFlags )
- {
- LINESTART();
- STARTFLAG();
- ADDFLAG( 0x0001, "fAuto" );
- ADDFLAG( 0x0010, "fNoBackg" );
- ADDFLAG( 0x0020, "fNoFore" );
- ADDRESERVED( 0xFFCE );
- PRINT();
- }
- LINESTART();
- ADDTEXT( "border color = " );
- ADDDEC( 2 );
- ADDTEXT( " fill color = " );
- ADDDEC( 2 );
- ADDTEXT( " size = " );
- ADDDEC(4);
- PRINT();
- }
- break;
- case 0x100A: // ChartAreaformat
- {
- LINESTART();
- ADDTEXT( "Fore = " );
- ADDTEXT( GetRGB( Read4( rIn ) ) );
- ADDTEXT( " Back = " );
- ADDTEXT( GetRGB( Read4( rIn ) ) );
- ADDTEXT( " Pattern = " );
- UINT16 n;
- rIn >> n >> __nFlags;
- __AddDec( t, n );
- ADDTEXT( " (" );
- __AddHex( t, n );
- ADDTEXT( ")" );
- PRINT();
- if( __nFlags )
- {
- LINESTART();
- STARTFLAG();
- ADDFLAG( 0x01, "fAuto" );
- ADDFLAG( 0x02, "fInvertNeg" );
- PRINT();
- }
- }
- LINESTART();
- ADDTEXT( "color index fore = " );
- ADDDEC( 2 );
- ADDTEXT( ", back = " );
- ADDDEC( 2 );
- PRINT();
- break;
- case 0x100B: // ChartPieformat
- LINESTART();
- ADDDEC( 2 );
- ADDTEXT( "%" );
- PRINT();
- break;
- case 0x100C: // ChartAttachedlabel
- ContDump( nL );
- break;
- case 0x100D: // ChartSeriestext
- ContDump( nL );
- break;
- case 0x1014: // ChartChartformat
- {
- ContDump( 16 );
- LINESTART();
- rIn >> __nFlags;
- if( __nFlags )
- {
- LINESTART();
- STARTFLAG();
- ADDFLAG( 0x0001, "fVaried" );
- PRINT();
- }
- LINESTART();
- ADDTEXT( "drawing order = " );
- ADDDEC( 2 );
- PRINT();
- }
- break;
- case 0x1015: // ChartLegend
- {
- UINT32 nX, nY, nDx, nDy;
- UINT8 nWType, nWSpacing;
- rIn >> nX >> nY >> nDx >> nDy >> nWType >> nWSpacing >> __nFlags;
- LINESTART();
- __AddDec( t, nX );
- ADDTEXT( " / " );
- __AddDec( t, nY );
- ADDTEXT( " [" );
- __AddDec( t, nDx );
- ADDTEXT( " / " );
- __AddDec( t, nDy );
- ADDTEXT( "]" );
- PRINT();
- LINESTART();
- ADDTEXT( " Type: " );
- switch( nWType )
- {
- case 0: p = "bottom"; break;
- case 1: p = "corner"; break;
- case 2: p = "top"; break;
- case 3: p = "right"; break;
- case 4: p = "left"; break;
- case 7: p = "not docked or inside the plot area"; break;
- default: p = pU;
- }
- ADDTEXT( p );
- ADDTEXT( " Spacing: " );
- switch( nWSpacing )
- {
- case 0: p = "close"; break;
- case 1: p = "medium"; break;
- case 2: p = "open"; break;
- default: p = pU;
- }
- ADDTEXT( p );
- PRINT();
- if( __nFlags )
- {
- LINESTART();
- STARTFLAG();
- ADDFLAG( 0x01, "fAutoPosition" );
- ADDFLAG( 0x02, "fAutoSeries" );
- ADDFLAG( 0x04, "fAutoPosX" );
- ADDFLAG( 0x08, "fAutoPosY" );
- ADDFLAG( 0x10, "fVert" );
- ADDFLAG( 0x20, "fWasDataTable" );
- PRINT();
- }
- }
- break;
- case 0x1016: // ChartSerieslist
- ContDump( nL );
- break;
- case 0x1017: // ChartBar
- {
- LINESTART();
- ADDTEXT( "space betw. bars = " );
- ADDDEC( 2 );
- ADDTEXT( " space betw. cat = " );
- ADDDEC( 2 );
- PRINT();
- rIn >> __nFlags;
- if( __nFlags )
- {
- LINESTART();
- STARTFLAG();
- ADDFLAG( 0x0001, "fTranspose" );
- ADDFLAG( 0x0002, "fStacked" );
- ADDFLAG( 0x0004, "f100" );
- ADDFLAG( 0x0008, "fHasShadow" );
- PRINT();
- }
- }
- break;
- case 0x1018: // ChartLine
- ContDump( nL );
- break;
- case 0x1019: // ChartPie
- ContDump( nL );
- break;
- case 0x101A: // ChartArea
- ContDump( nL );
- break;
- case 0x101C: // ChartLine
- ContDump( nL );
- break;
- case 0x101D: // ChartAxis
- {
- static const sal_Char* const ppcIds[] = { "x-axis", "y-axis", "z-axis" };
- LINESTART();
- sal_uInt16 nAxisId = rIn.ReaduInt16();
- ADDTEXT( "axis-id=" ); __AddDec( t, nAxisId );
- lcl_AddEnum( t, nAxisId, ppcIds, STATIC_TABLE_SIZE( ppcIds ) );
- PRINT();
- ContDump( 16 );
- }
- break;
- case 0x101E: // CHTICK
- {
- static const sal_Char* const ppcTickMode[] = { "off", "inside", "outside", "cross" };
- static const sal_Char* const ppcTickPos[] = { "off", "low", "high", "next-to-axis" };
- static const sal_Char* const ppcText[] = { "transparent", "opaque" };
- LINESTART();
- sal_uInt8 nMajor, nMinor, nPos, nText;
- rIn >> nMajor >> nMinor >> nPos >> nText;
- ADDTEXT( "major=" ); __AddDec( t, nMajor );
- lcl_AddEnum( t, nMajor, ppcTickMode, STATIC_TABLE_SIZE( ppcTickMode ) );
- ADDTEXT( " minor=" ); __AddDec( t, nMinor );
- lcl_AddEnum( t, nMinor, ppcTickMode, STATIC_TABLE_SIZE( ppcTickMode ) );
- PRINT();
- LINESTART();
- ADDTEXT( "position=" ); __AddDec( t, nPos );
- lcl_AddEnum( t, nPos, ppcTickPos, STATIC_TABLE_SIZE( ppcTickPos ) );
- ADDTEXT( " text-mode=" ); __AddDec( t, nText );
- lcl_AddEnum( t, nText, ppcText, STATIC_TABLE_SIZE( ppcText ) );
- ADDTEXT( " text-color=" );
- ADDTEXT( GetRGB( Read4( rIn ) ) );
- PRINT();
- LINESTART();
- ADDTEXT( "reserved=" ); ADDHEX( 4 );
- ADDTEXT( "," ); ADDHEX( 4 );
- ADDTEXT( "," ); ADDHEX( 4 );
- ADDTEXT( "," ); ADDHEX( 4 );
- PRINT();
- rIn >> __nFlags;
- LINESTART();
- STARTFLAG();
- ADDFLAG( 0x0001, "fAutoCol" );
- ADDFLAG( 0x0002, "fAutoBack" );
- ADDFLAG( 0x0020, "fAutoRot" );
- ADDRESERVED( 0xFFDC );
- PRINT();
- LINESTART();
- ADDTEXT( "color=" ); ADDDEC( 2 );
- ADDTEXT( " rotation=" ); ADDDEC( 2 );
- PRINT();
- }
- break;
- case 0x101F: // CHVALUERANGE
- {
- LINESTART();
- ADDTEXT( "min=" ); ADDDOUBLE();
- ADDTEXT( " max=" ); ADDDOUBLE();
- ADDTEXT( " major=" ); ADDDOUBLE();
- ADDTEXT( " minor=" ); ADDDOUBLE();
- ADDTEXT( " axis-cross=" ); ADDDOUBLE();
- PRINT();
- rIn >> __nFlags;
- LINESTART();
- STARTFLAG();
- ADDFLAG( 0x0001, "fAutoMin" );
- ADDFLAG( 0x0002, "fAutoMax" );
- ADDFLAG( 0x0004, "fAutoMajor" );
- ADDFLAG( 0x0008, "fAutoMinor" );
- ADDFLAG( 0x0010, "fAutoCross" );
- ADDFLAG( 0x0020, "fLogScale" );
- ADDFLAG( 0x0040, "fReverse" );
- ADDFLAG( 0x0080, "fMaxCross" );
- ADDRESERVED( 0xFF00 );
- PRINT();
- }
- break;
- case 0x1020: // CHEXTRANGE
- {
- LINESTART();
- ADDTEXT( "axis-cross=" ); ADDDEC( 2 );
- ADDTEXT( " label-freq=" ); ADDDEC( 2 );
- ADDTEXT( " mark-freq=" ); ADDDEC( 2 );
- PRINT();
- rIn >> __nFlags;
- LINESTART();
- STARTFLAG();
- ADDFLAG( 0x0001, "fBetween" );
- ADDFLAG( 0x0002, "fMaxCross" );
- ADDFLAG( 0x0004, "fReverse" );
- ADDRESERVED( 0xFFF8 );
- PRINT();
- }
- break;
- case 0x1021: // ChartAxislineformat
- {
- LINESTART();
- switch( Read2( rIn ) )
- {
- case 0: p = "axis line itself"; break;
- case 1: p = "major grid line"; break;
- case 2: p = "minor grid line"; break;
- case 3: p = "walls or floor"; break;
- default: p = pU;
- }
- ADDTEXT( p );
- PRINT();
- }
- break;
- case 0x1022: // CHARTFORMATLINK
- ContDump( nL );
- break;
- case 0x1024: // ChartDefaulttext
- ContDump( nL );
- break;
- case 0x1025: // ChartText
- {
- LINESTART();
- UINT8 nAt, nVat;
- UINT16 nBkgMode;
- INT32 nX, nY, nDx, nDy;
- UINT16 nGrbit2, nIcvText;
- INT16 nTrot;
- rIn >> nAt >> nVat >> nBkgMode;
- ADDTEXT( "h = " );
- switch( nAt )
- {
- case 1: p = "left"; break;
- case 2: p = "center"; break;
- case 3: p = "right"; break;
- case 4: p = "justify"; break;
- case 5: p = "distribute"; break;
- default: p = pU;
- }
- ADDTEXT( p );
- ADDTEXT( " v = " );
- switch( nVat )
- {
- case 1: p = "top"; break;
- case 2: p = "center"; break;
- case 3: p = "bottom"; break;
- case 4: p = "justify"; break;
- case 5: p = "distribute"; break;
- default: p = pU;
- }
- ADDTEXT( p );
- ADDTEXT( " mode = " );
- if( nBkgMode == 1 )
- ADDTEXT( "transparent" );
- else if( nBkgMode == 2 )
- ADDTEXT( "opaque" );
- else
- ADDTEXT( pU );
- PRINT();
- LINESTART();
- ADDTEXT( "color = " );
- ADDTEXT( GetRGB( Read4( rIn ) ) );
- rIn >> nX >> nY >> nDx >> nDy >> __nFlags >> nIcvText >> nGrbit2 >> nTrot;
- ADDTEXT( " pos[size] = " );
- __AddDec( t, nX );
- ADDTEXT( " / " );
- __AddDec( t, nY );
- ADDTEXT( " [" );
- __AddDec( t, nDx );
- ADDTEXT( " / " );
- __AddDec( t, nDy );
- ADDTEXT( "]" );
- PRINT();
- LINESTART();
- ADDTEXT( " (pos[size] = " );
- __AddHex( t, nX );
- ADDTEXT( " / " );
- __AddHex( t, nY );
- ADDTEXT( " [" );
- __AddHex( t, nDx );
- ADDTEXT( " / " );
- __AddHex( t, nDy );
- ADDTEXT( "])" );
- PRINT();
- if( __nFlags )
- {
- LINESTART();
- STARTFLAG();
- ADDFLAG( 0x0001, "fAutoColor" );
- ADDFLAG( 0x0002, "fShowKey" );
- ADDFLAG( 0x0004, "fShowValue" );
- ADDFLAG( 0x0008, "fVert" );
- ADDFLAG( 0x0010, "fAutoText" );
- ADDFLAG( 0x0020, "fGenerated" );
- ADDFLAG( 0x0040, "fDeleted" );
- ADDFLAG( 0x0080, "fAutoMode" );
- ADDFLAG( 0x0800, "fShLabPct" );
- ADDFLAG( 0x1000, "fShowPct" );
- ADDFLAG( 0x2000, "fShowBubbleSizes" );
- ADDFLAG( 0x4000, "fShowLabel" );
- PRINT();
- }
- LINESTART();
- ADDTEXT( "rot = " );
- switch( __nFlags & 0x0700 )
- {
- case 0x0000: p = "no rotation"; break;
- case 0x0100: p = "top to bottom, upright"; break;
- case 0x0200: p = "90 deg counterclockwise"; break;
- case 0x0300: p = "90 deg clockwise"; break;
- default: p = pU;
- }
- ADDTEXT( p );
- ADDTEXT( " trot = " );
- __AddDec( t, nTrot );
- PRINT();
- LINESTART();
- ADDTEXT( "text color = " );
- __AddDec( t, nIcvText );
- PRINT();
- LINESTART();
- ADDTEXT( "placement: " );
- switch( nGrbit2 & 0x000F )
- {
- case 0: p = "0 default"; break;
- case 1: p = "outside"; break;
- case 2: p = "inside"; break;
- case 3: p = "center"; break;
- case 4: p = "axis"; break;
- case 5: p = "above"; break;
- case 6: p = "below"; break;
- case 7: p = "left"; break;
- case 8: p = "right"; break;
- case 9: p = "auto"; break;
- case 10: p = "moved"; break;
- default: p = pU;
- }
- ADDTEXT( p );
- PRINT();
- }
- break;
- case 0x1026: // ChartFontx
- ContDump( nL );
- break;
- case 0x1027: // CHOBJECTLINK
- {
- static const sal_Char* const ppcObjLink[] = { 0, "title", "y-axis", "x-axis", "data", "legend", "none", "z-axis" };
- LINESTART();
- sal_uInt16 nObjLink;
- rIn >> nObjLink;
- ADDTEXT( "link=" ); __AddDec( t, nObjLink );
- lcl_AddEnum( t, nObjLink, ppcObjLink, STATIC_TABLE_SIZE( ppcObjLink ) );
- ADDTEXT( " series=" ); ADDDEC( 2 );
- ADDTEXT( " point=" ); ADDDEC( 2 );
- PRINT();
- }
- break;
- case 0x1032: // ChartFrame
- {
- LINESTART();
- switch( Read2( rIn ) )
- {
- case 0: p = "no border"; break;
- case 1:
- case 2:
- case 3: p = "reserved"; break;
- case 4: p = "with shadow"; break;
- default: p = pU;
- }
- ADDTEXT( "Frame type: " );
- ADDTEXT( p );
- PRINT();
- rIn >> __nFlags;
- if( __nFlags )
- {
- LINESTART();
- STARTFLAG();
- ADDFLAG( 0x01, "fAutoSize" );
- ADDFLAG( 0x02, "fAutoPosition" );
- PRINT();
- }
- }
- break;
- case 0x1035: // ChartPlotarea
- ContDump( nL );
- break;
- case 0x103A: // Chart3D
- ContDump( nL );
- break;
- case 0x103C: // ChartPicf
- LINESTART();
- ADDTEXT( "bmp-mode=" ); ADDDEC( 2 );
- ADDTEXT( " format=" ); ADDDEC( 2 );
- ADDTEXT( " flags=" ); ADDHEX( 2 );
- ADDTEXT( " scale=" ); ADDDOUBLE();
- PRINT();
- break;
- case 0x103D: // ChartDropbar
- ContDump( nL );
- break;
- case 0x103E: // ChartRadar
- ContDump( nL );
- break;
- case 0x103F: // ChartSurface
- ContDump( nL );
- break;
- case 0x1040: // ChartRadararea
- ContDump( nL );
- break;
- case 0x1041: // ChartAxisparent
- {
- LINESTART();
- switch( Read2( rIn ) )
- {
- case 0: p = "main"; break;
- case 1: p = "secondary"; break;
- default: p = pU;
- }
- ADDTEXT( "Index: " );
- ADDTEXT( p );
- ADDTEXT( " " );
- ADDDEC(4);
- ADDTEXT( '/' );
- ADDDEC(4);
- ADDTEXT( " [" );
- ADDDEC(4);
- ADDTEXT( '/' );
- ADDDEC(4);
- ADDTEXT( ']' );
- PRINT();
- }
- break;
- case 0x1043: // ChartLegendxn
- ContDump( nL );
- break;
- case 0x1044: // ChartShtprops
- ContDump( nL );
- break;
- case 0x1045: // ChartSertocrt
- ContDump( nL );
- break;
- case 0x1046: // ChartAxesused
- {
- LINESTART();
- ADDTEXT( "Used : " );
- ADDDEC( 2 );
- PRINT();
- }
- break;
- case 0x1048: // ChartSbaseref
- ContDump( nL );
- break;
- case 0x104A: // CHSERPARENT
- LINESTART();
- ADDTEXT( "parent-index=" ); ADDDEC( 2 );
- ADDTEXT( " (one-based)" );
- PRINT();
- break;
- case 0x104B: // CHSERTRENDLINE
- {
- static const sal_Char* const ppcType[] =
- { "poynomial", "exponential", "logarithmic", "power", "moving-avg" };
- sal_uInt8 nType;
- rIn >> nType;
- LINESTART();
- ADDTEXT( "line-type=" ); __AddDec( t, nType );
- lcl_AddEnum( t, nType, ppcType, STATIC_TABLE_SIZE( ppcType ) );
- ADDTEXT( " order=" ); ADDDEC( 1 );
- ADDTEXT( " intercept=" ); ADDDOUBLE();
- PRINT();
- LINESTART();
- ADDTEXT( "show-equation=" ); ADDDEC( 1 );
- ADDTEXT( " show-r-sqr=" ); ADDDEC( 1 );
- PRINT();
- LINESTART();
- ADDTEXT( "forecast-for=" ); ADDDOUBLE();
- ADDTEXT( " forecast-back=" ); ADDDOUBLE();
- PRINT();
- }
- break;
- case 0x104E: // ChartIfmt
- ContDump( nL );
- break;
- case 0x104F: // ChartPos
- {
- LINESTART();
- UINT16 nMdTopLt, nMdBotRt;
- INT32 nX, nY, nDx, nDy;
- rIn >> nMdTopLt >> nMdBotRt >> nX >> nY >> nDx >> nDy;
- ADDTEXT( "TopLr = " );
- __AddDec( t, nMdTopLt );
- ADDTEXT( " BotRt = " );
- __AddDec( t, nMdBotRt );
- PRINT();
- LINESTART();
- __AddDec( t, nX );
- ADDTEXT( " / " );
- __AddDec( t, nY );
- ADDTEXT( " [" );
- __AddDec( t, nDx );
- ADDTEXT( " / " );
- __AddDec( t, nDy );
- ADDTEXT( "]" );
- PRINT();
- }
- break;
- case 0x1050: // ChartAlruns
- ContDump( nL );
- break;
- case 0x1051: // AI
- {
- LINESTART();
- UINT8 n8 = Read1( rIn );
- switch( n8 )
- {
- case 0: p = "title or text"; break;
- case 1: p = "values"; break;
- case 2: p = "categories"; break;
- case 3: p = "bubble sizes"; break;
- default: p = pU;
- }
- ADDTEXT( "Link index identifier: " );
- ADDTEXT( p );
- if ( p == pU )
- __AddHex( t, n8 );
- PRINT();
- LINESTART();
- switch( Read1( rIn ) )
- {
- case 0: p = "default categories"; break;
- case 1: p = "text or value"; break;
- case 2: p = "linked to worksheet"; break;
- case 3: p = "not used (HaHaHa...)"; break;
- case 4: p = "error reported"; break;
- default: p = pU;
- }
- ADDTEXT( "Refernce type: " );
- ADDTEXT( p );
- PRINT();
- rIn >> __nFlags;
- if( __nFlags )
- {
- LINESTART();
- STARTFLAG();
- ADDFLAG( 0x01, "fCustomIfmt" );
- PRINT();
- }
- LINESTART();
- ADDTEXT( "Numberformat = " );
- ADDDEC( 2 );
- PRINT();
- LINESTART();
- UINT16 n;
- rIn >> n;
- ADDTEXT( "Formula [" );
- __AddDec( t, n );
- ADDTEXT( "]: ---------------- " );
- PRINT();
- FormulaDump( n, FT_CellFormula );
- }
- break;
- case 0x105B: // CHSERERRORBAR
- {
- static const sal_Char* const ppcType[] = { 0, "x-plus", "x-minus", "y-plus", "y-minus" };
- static const sal_Char* const ppcSource[] = { 0, "percent", "fixed", "std-dev", "custom", "std-error" };
- static const sal_Char* const ppcLineEnd[] = { "blank", "t-shape" };
- sal_uInt8 nType, nSource, nLineEnd;
- rIn >> nType >> nSource >> nLineEnd;
- LINESTART();
- ADDTEXT( "bar-type=" ); __AddDec( t, nType );
- lcl_AddEnum( t, nType, ppcType, STATIC_TABLE_SIZE( ppcType ) );
- ADDTEXT( " value-source=" ); __AddDec( t, nSource );
- lcl_AddEnum( t, nSource, ppcSource, STATIC_TABLE_SIZE( ppcSource ) );
- ADDTEXT( " line-end=" ); __AddDec( t, nLineEnd );
- lcl_AddEnum( t, nLineEnd, ppcLineEnd, STATIC_TABLE_SIZE( ppcLineEnd ) );
- PRINT();
- LINESTART();
- ADDTEXT( "reserved=" ); ADDHEX( 1 );
- ADDTEXT( " value=" ); ADDDOUBLE();
- ADDTEXT( " ref-count=" ); ADDDEC( 2 );
- PRINT();
- }
- break;
- case 0x105D: // ChartSerfmt
- ContDump( nL );
- break;
- case 0x105F: // Chart3DDataForm
- {
- UINT8 nGround, nTop;
- nGround = Read1( rIn );
- nTop = Read1( rIn );
- UINT16 nStyle = ((UINT16)nGround << 8) | nTop;
- LINESTART();
- ADDTEXT( "3D - format (" );
- __AddHex( t, nGround );
- ADDTEXT( " " );
- __AddHex( t, nTop );
- ADDTEXT( "): " );
- switch( nStyle )
- {
- case 0x0000: ADDTEXT( "bar" ); break;
- case 0x0001: ADDTEXT( "pyramid" ); break;
- case 0x0002: ADDTEXT( "pyramid, cut" ); break;
- case 0x0100: ADDTEXT( "cylinder" ); break;
- case 0x0101: ADDTEXT( "cone" ); break;
- case 0x0102: ADDTEXT( "cone, cut" ); break;
- default: ADDTEXT( pU );
- }
- PRINT();
- }
- break;
- case 0x1060: // ChartFbi
- {
- LINESTART();
- ADDTEXT( "dmixBasis = " );
- ADDDEC( 2 );
- ADDTEXT( " dmiyBasis = " );
- ADDDEC( 2 );
- ADDTEXT( " twpHeightBasis = " );
- ADDDEC( 2 );
- ADDTEXT( " scab = " );
- ADDDEC( 2 );
- PRINT();
- LINESTART();
- ADDTEXT( "ifnt = " );
- ADDDEC( 2 );
- PRINT();
- }
- break;
- case 0x1061: // ChartBoppop
- ContDump( nL );
- break;
- case 0x1062: // ChartAxcext
- {
- LINESTART();
- ADDTEXT( "cat on axis: " );
- ADDDEC( 2 );
- ADDTEXT( " ... " );
- ADDDEC( 2 );
- PRINT();
- LINESTART();
- ADDTEXT( "major unit: val = " );
- ADDDEC( 2 );
- ADDTEXT( " units = " );
- ADDDEC( 2 );
- PRINT();
- LINESTART();
- ADDTEXT( "minor unit: val = " );
- ADDDEC( 2 );
- ADDTEXT( " units = " );
- ADDDEC( 2 );
- PRINT();
- LINESTART();
- ADDTEXT( "base unit = " );
- ADDDEC( 2 );
- ADDTEXT( " crossing point of val axis = " );
- ADDDEC( 2 );
- PRINT();
- rIn >> __nFlags;
- if( __nFlags )
- {
- LINESTART();
- STARTFLAG();
- ADDFLAG( 0x0001, "fAutoMin" );
- ADDFLAG( 0x0002, "fAutoMax" );
- ADDFLAG( 0x0004, "fAutoMajor" );
- ADDFLAG( 0x0008, "fAutoMinor" );
- ADDFLAG( 0x0010, "fDateAxis" );
- ADDFLAG( 0x0020, "fAutoBase" );
- ADDFLAG( 0x0040, "fAutoCross" );
- ADDFLAG( 0x0080, "fAutoDate" );
- PRINT();
- }
- }
- break;
- case 0x1063: // ChartDat
- ContDump( nL );
- break;
- case 0x1064: // ChartPlotgrowth
- {
- UINT32 nDx, nDy;
- rIn >> nDx >> nDy;
- LINESTART();
- ADDTEXT( "dxPlotGrowth = " );
- __Add16p16( t, nDx );
- ADDTEXT( " (" );
- __AddHex( t, nDx );
- ADDTEXT( ") dyPlotGrowth = " );
- __Add16p16( t, nDy );
- ADDTEXT( " (" );
- __AddHex( t, nDy );
- ADDTEXT( ")" );
- PRINT();
- }
- break;
- case 0x1065: // ChartSiindex
- ContDump( nL );
- break;
- case 0x1066: // ChartGelframe
- EscherDump( nL, false );
- break;
- case 0x1067: // ChartBoppcustom
- ContDump( nL );
- break;
- default:
- if( !bEncrypted )
- ContDump( nL );
- }
-
- }
-
- if( nR == EXC_ID_FILEPASS )
- {
- bEncrypted = true;
- pIn->Seek( EXC_REC_SEEK_TO_BEGIN );
- bool bValid = (XclImpDecryptHelper::ReadFilepass( *pIn ) == ERRCODE_NONE);
- LINESTART();
- ADDTEXT( "decrypter=" ); lcl_AddOnOff( t, bValid );
- PRINT();
- bBIFF8 = bBIFF8 && bValid; // dump BIFF8 hex only on invalid decrypter
- }
-
- if( bDec )
- pLevelPre -= nLevelInc;
-}
-
-
-static const sal_Char* GetBlipType( UINT8 n )
-{
- switch ( n )
- {
- case 0 :
- return " ERROR";
- break;
- case 1 :
- return " UNKNOWN";
- break;
- case 2 :
- return " EMF";
- break;
- case 3 :
- return " WMF";
- break;
- case 4 :
- return " PICT";
- break;
- case 5 :
- return " JPEG";
- break;
- case 6 :
- return " PNG";
- break;
- case 7 :
- return " DIB";
- break;
- default:
- if ( n < 32 )
- return " NotKnown";
- else
- return " Client";
- }
-}
-
-void Biff8RecDumper::EscherDump( const ULONG nMaxLen, bool bDumpOffset )
-{
- ULONG n = nMaxLen;
- UINT16 nPre, nR;
- UINT32 nL;
- const sal_Char* p;
- ByteString aT;
- UINT16 nDumpSize;
-
- aT += pLevelPre;
-
- ULONG nStartPos = pIn->GetSvStreamPos();
- while( pIn->IsValid() && (n > 0) )
- {
- ULONG nCurrPos = pIn->GetSvStreamPos();
- *pIn >> nPre >> nR >> nL;
- n -= sizeof( nPre ) + sizeof( nR ) + sizeof( nL );
-
- switch( nR )
- {
- case 0xF000: p = "MsofbtDggContainer"; break;
- case 0xF006: p = "MsofbtDgg"; break;
- case 0xF016: p = "MsofbtCLSID"; break;
- case 0xF00B: p = "MsofbtOPT"; break;
- case 0xF11A: p = "MsofbtColorMRU"; break;
- case 0xF11E: p = "MsofbtSplitMenuColors"; break;
- case 0xF001: p = "MsofbtBstoreContainer"; break;
- case 0xF007: p = "MsofbtBSE"; break;
- case 0xF002: p = "MsofbtDgContainer"; break;
- case 0xF008: p = "MsofbtDg"; break;
- case 0xF118: p = "MsofbtRegroupItem"; break;
- case 0xF120: p = "MsofbtColorScheme"; break;
- case 0xF003: p = "MsofbtSpgrContainer"; break;
- case 0xF004: p = "MsofbtSpContainer"; break;
- case 0xF009: p = "MsofbtSpgr"; break;
- case 0xF00A: p = "MsofbtSp"; break;
- case 0xF00C: p = "MsofbtTextbox"; break;
- case 0xF00D: p = "MsofbtClientTextbox"; break;
- case 0xF00E: p = "MsofbtAnchor"; break;
- case 0xF00F: p = "MsofbtChildAnchor"; break;
- case 0xF010: p = "MsofbtClientAnchor"; break;
- case 0xF011: p = "MsofbtClientData"; break;
- case 0xF11F: p = "MsofbtOleObject"; break;
- case 0xF11D: p = "MsofbtDeletedPspl"; break;
- case 0xF005: p = "MsofbtSolverContainer"; break;
- case 0xF012: p = "MsofbtConnectorRule"; break;
- case 0xF013: p = "MsofbtAlignRule"; break;
- case 0xF014: p = "MsofbtArcRule"; break;
- case 0xF015: p = "MsofbtClientRule"; break;
- case 0xF017: p = "MsofbtCalloutRule"; break;
- case 0xF119: p = "MsofbtSelection"; break;
- case 0xF122: p = "MsofbtUDefProp"; break;
- default:
- if( nR >= 0xF018 && nR <= 0xF117 )
- p = "MsofbtBLIP";
- else if ( ( nPre & 0x000F ) == 0x000F )
- p = "UNKNOWN container";
- else
- p = "UNKNOWN ID";
- }
-
- aT += " ";
- __AddHex( aT, nR );
- ((aT += " ") += p) += " [";
- __AddHex( aT, nPre );
- aT += ',';
- __AddHex( aT, nL );
- aT += "] instance: ";
- __AddDec( aT, (UINT16)(nPre >> 4) );
- if( bDumpOffset )
- {
- aT.Append( " pos=" );
- __AddHex( aT, static_cast< sal_uInt32 >( mnEscherPos + nCurrPos - nStartPos ) );
- }
- Print( aT );
-
- if ( nR == 0xF007 && 36 <= n && 36 <= nL )
- { // BSE, FBSE
- ULONG nP = pIn->GetRecPos();
- UINT8 n8;
- UINT16 n16;
- UINT32 n32;
-
- aT = " btWin32: ";
- *pIn >> n8;
- __AddHex( aT, n8 );
- aT += GetBlipType( n8 );
- aT += " btMacOS: ";
- *pIn >> n8;
- __AddHex( aT, n8 );
- aT += GetBlipType( n8 );
- Print( aT );
-
- aT = " rgbUid:";
- Print( aT );
- ContDump( 16 );
-
- aT = " tag: ";
- *pIn >> n16;
- __AddHex( aT, n16 );
- Print( aT );
-
- aT = " size: ";
- *pIn >> n32;
- __AddHex( aT, n32 );
- Print( aT );
-
- aT = " cRef: ";
- *pIn >> n32;
- __AddHex( aT, n32 );
- Print( aT );
-
- aT = " offs: ";
- *pIn >> n32;
- __AddHex( aT, n32 );
- Print( aT );
-
- aT = " usage: ";
- *pIn >> n8;
- __AddHex( aT, n8 );
- aT += " cbName: ";
- *pIn >> n8;
- __AddHex( aT, n8 );
- aT += " unused2: ";
- *pIn >> n8;
- __AddHex( aT, n8 );
- aT += " unused3: ";
- *pIn >> n8;
- __AddHex( aT, n8 );
- Print( aT );
-
- n -= pIn->GetRecPos() - nP;
- nL = 0; // loop to MsofbtBLIP
- }
- else if ( nR == 0xF00F && 0x10 <= n && 0x10 <= nL )
- { // ChildAnchor
- ULONG nP = pIn->GetRecPos();
- sal_Int32 n32;
-
- aT.Assign( " pos1=" );
- *pIn >> n32; lclAppendDec( aT, n32 );
- aT.Append( " pos2=" );
- *pIn >> n32; lclAppendDec( aT, n32 );
- aT.Append( " pos3=" );
- *pIn >> n32; lclAppendDec( aT, n32 );
- aT.Append( " pos4=" );
- *pIn >> n32; lclAppendDec( aT, n32 );
- Print( aT );
-
- ULONG nC = pIn->GetRecPos() - nP;
- n -= nC;
- nL -= nC;
- }
- else if ( nR == 0xF010 && 0x12 <= n && 0x12 <= nL )
- { // ClientAnchor
- ULONG nP = pIn->GetRecPos();
- UINT16 n16;
-
- aT = " Flag: ";
- *pIn >> n16;
- __AddHex( aT, n16 );
- if( n16 & 0x0001 ) aT += " -fixedpos";
- if( n16 & 0x0002 ) aT += " -fixedsize";
- Print( aT );
-
- aT = " Col1: ";
- *pIn >> n16;
- __AddHex( aT, n16 );
- aT += " dX1: ";
- *pIn >> n16;
- __AddHex( aT, n16 );
- aT += " Row1: ";
- *pIn >> n16;
- __AddHex( aT, n16 );
- aT += " dY1: ";
- *pIn >> n16;
- __AddHex( aT, n16 );
- Print( aT );
-
- aT = " Col2: ";
- *pIn >> n16;
- __AddHex( aT, n16 );
- aT += " dX2: ";
- *pIn >> n16;
- __AddHex( aT, n16 );
- aT += " Row2: ";
- *pIn >> n16;
- __AddHex( aT, n16 );
- aT += " dY2: ";
- *pIn >> n16;
- __AddHex( aT, n16 );
- Print( aT );
-
- ULONG nC = pIn->GetRecPos() - nP;
- n -= nC;
- nL -= nC;
- }
- else if ( nR == 0xF00A )
- {
- sal_uInt32 nId, nFlags;
- *pIn >> nId >> nFlags;
- aT.Assign( " shape-id=" );
- __AddHex( aT, nId );
- aT.Append( " flags=" );
- __AddHex( aT, nFlags );
- Print( aT );
- nL -= 8; n -= 8;
- }
- else if ( nR == 0xF00B || nR == 0xF122 )
- { // OPT
- sal_uInt32 nComplex = 0;
- while ( nL >= 6 + nComplex && n >= 6 + nComplex )
- {
- UINT16 n16;
- UINT32 n32;
- *pIn >> n16 >> n32;
- nL -= 6; n -= 6;
- aT = " ";
- __AddHex( aT, n16 );
- aT += " (";
- __AddDec( aT, n16 & 0x3FFF, 5 );
- if ( (n16 & 0x8000) == 0 )
- {
- if ( n16 & 0x4000 )
- aT += ", fBlipID";
- aT += ") ";
- __AddHex( aT, n32 );
- if ( (n16 & 0x4000) == 0 )
- {
- aT += " (";
- __AddDec1616( aT, n32 );
- aT += ')';
- }
- Print( aT );
- }
- else
- {
- aT += ", fComplex) ";
- __AddHex( aT, n32 );
- Print( aT );
- nComplex += n32;
- }
- }
- // complex property data
- while ( nComplex && n > 0 )
- {
- sal_uInt32 nDumpSize = (nComplex > n) ? n : nComplex;
- ContDump( nDumpSize );
- nComplex -= nDumpSize;
- nL -= nDumpSize;
- n -= nDumpSize;
- }
- }
- else if ( nR == 0xF012 )
- {
- aT = " Connector rule: "; __AddDec( aT, pIn->ReaduInt32() );
- aT += " ShapeID A: "; __AddHex( aT, pIn->ReaduInt32() );
- aT += " ShapeID B: "; __AddHex( aT, pIn->ReaduInt32() );
- Print( aT );
- aT = " ShapeID connector: "; __AddHex( aT, pIn->ReaduInt32() );
- aT += " Connect pt A: "; __AddHex( aT, pIn->ReaduInt32() );
- aT += " Connect pt B: "; __AddHex( aT, pIn->ReaduInt32() );
- Print( aT );
- nL -= 24; n -= 24;
- }
-
- if( ( nPre & 0x000F ) == 0x000F )
- { // Container
- if ( nL <= (UINT32) n )
- Print( " completed within" );
- else
- Print( " continued elsewhere" );
- }
- else
- // -> 0x0000 ... 0x0FFF
- {
- nDumpSize = ( ( UINT32 ) nL > ( UINT32 ) n )? ( UINT16 ) n : ( UINT16 ) nL;
-
- if( nDumpSize )
- {
- ContDump( nDumpSize );
- n -= nDumpSize;
- }
- }
-
- aT.Erase();
- }
- if( bDumpOffset )
- mnEscherPos += nMaxLen;
-}
-
-
-void Biff8RecDumper::ObjDump( const ULONG nMaxLen )
-{
-#if 0
-// if an entire hex block is needed
- pIn->PushPosition();
- ContDump( nMaxLen );
- pIn->PopPosition();
-#endif
-
- ULONG n = nMaxLen;
- UINT16 nR, nL;
- const sal_Char* p;
- ByteString t;
- XclImpStream& rIn = *pIn;
- UINT16 nDumpSize;
- sal_uInt16 nObjFlags = 0;
-
- t += pLevelPre;
-
- while( n > 0 )
- {
- rIn >> nR >> nL;
- n -= sizeof( nR ) + sizeof( nL );
-
- BOOL bDetails = FALSE;
- switch( nR )
- {
- case 0x0000: p = "ftEnd"; break;
- case 0x0001: p = "(Reserved)"; break;
- case 0x0002: p = "(Reserved)"; break;
- case 0x0003: p = "(Reserved)"; break;
- case 0x0004: p = "ftMacro"; break;
- case 0x0005: p = "ftButton"; break;
- case 0x0006: p = "ftGmo"; break;
- case 0x0007: p = "ftCf"; break;
- case 0x0008: p = "ftPioGrbit"; bDetails = TRUE; break;
- case 0x0009: p = "ftPictFmla"; bDetails = TRUE; break;
- case 0x000A: p = "ftCbls"; break;
- case 0x000B: p = "ftRbo"; break;
- case 0x000C: p = "ftSbs"; break;
- case 0x000D: p = "ftNts"; break;
- case 0x000E: p = "ftSbsFmla"; break;
- case 0x000F: p = "ftGboData"; break;
- case 0x0010: p = "ftEdoData"; break;
- case 0x0011: p = "ftRboData"; break;
- case 0x0012: p = "ftCblsData"; break;
- case 0x0013: p = "ftLbsData"; break;
- case 0x0014: p = "ftCblsFmla"; break;
- case 0x0015: p = "ftCmo"; bDetails = TRUE; break;
- default:
- p = "UNKNOWN ID";
- }
-
- t += " ";
- __AddHex( t, nR );
- t += " [";
- __AddHex( t, nL );
- (t += "] ") += p;
- Print( t );
-
- nDumpSize = ( ( UINT32 ) nL > ( UINT32 ) n )? ( UINT16 ) n : ( UINT16 ) nL;
-
- if( nDumpSize )
- {
- ULONG nPos1 = (bDetails ? rIn.GetRecPos() : 0);
- ContDump( nDumpSize );
- n -= nDumpSize;
- if ( bDetails )
- {
- ULONG nPos2 = rIn.GetRecPos();
- rIn.Seek( nPos1 );
- t.Erase();
- switch ( nR )
- {
- case 0x0008 : // ftPioGrbit
- {
- rIn >> nObjFlags;
- UINT16 __nFlags = nObjFlags;
- if ( __nFlags )
- {
- ADDTEXT( " " );
- STARTFLAG();
- ADDFLAG( 0x0001, "man-size" );
- ADDFLAG( 0x0002, "linked" );
- ADDFLAG( 0x0008, "symbol" );
- ADDFLAG( 0x0010, "control" );
- ADDFLAG( 0x0020, "ctls-stream" );
- ADDFLAG( 0x0200, "autoload" );
- ADDRESERVED( 0xFDC4 );
- }
- }
- break;
- case 0x0009 : // ftPictFmla
- {
- ADDTEXT( " Document type " );
- UINT16 nFmlaLen;
- rIn >> nFmlaLen;
- if( nObjFlags & 0x0002 )
- {
- ADDTEXT( "linked\n OLE stream: LNK??? (from EXTERNNAME) " );
- rIn >> nFmlaLen;
- ADDTEXT( " unknown=" ); ADDHEX( 4 );
- PRINT();
- t.Erase();
- FormulaDump( nFmlaLen, FT_CellFormula );
- }
- else
- {
- ADDTEXT( "embedded " );
- const UINT16 nStringOffset = 14; // MAY be right
- rIn.Seek( nPos1 + nStringOffset );
- INT32 nBytesLeft = nL - nStringOffset;
- UINT16 nStrLen = rIn.ReaduInt16();
- ULONG nPos3 = rIn.GetRecPos();
- if( nStrLen )
- AddUNICODEString( t, rIn, TRUE, nStrLen );
- nBytesLeft -= (rIn.GetRecPos() - nPos3);
- ADDTEXT( '\n' );
- if ( nBytesLeft < 4 )
- ADDTEXT( " >> ByteString OVERRUN <<\n" );
-
- rIn.Seek( nPos1 + sizeof(nFmlaLen) + nFmlaLen );
- if( nObjFlags & 0x0020 )
- {
- sal_uInt32 nStrmStart, nStrmLen;
- rIn >> nStrmStart >> nStrmLen;
- ADDTEXT( " 'Ctls' stream start=" );
- __AddHex( t, nStrmStart );
- ADDTEXT( " size=" );
- __AddHex( t, nStrmLen );
- maCtlsPosMap[ nStrmStart ] = nStrmLen;
- }
- else
- {
- ADDTEXT( " OLE storage name: MBD" );
- __AddPureHex( t, rIn.ReaduInt32() );
- }
- }
- }
- break;
- case 0x0015 : // ftCmo
- {
- UINT16 nType, nId;
- rIn >> nType >> nId;
- ADDTEXT( " Object ID " );
- __AddHex( t, nId );
- switch ( nType )
- {
- case 0x0000 : p = "Group"; break;
- case 0x0001 : p = "Line"; break;
- case 0x0002 : p = "Rectangle"; break;
- case 0x0003 : p = "Oval"; break;
- case 0x0004 : p = "Arc"; break;
- case 0x0005 : p = "Chart"; break;
- case 0x0006 : p = "Text"; break;
- case 0x0007 : p = "Button"; break;
- case 0x0008 : p = "Picture"; break;
- case 0x0009 : p = "Polygon"; break;
- case 0x000a : p = "(Reserved)"; break;
- case 0x000b : p = "Check box"; break;
- case 0x000c : p = "Option button";break;
- case 0x000d : p = "Edit box"; break;
- case 0x000e : p = "Label"; break;
- case 0x000f : p = "Dialog box"; break;
- case 0x0010 : p = "Spinner"; break;
- case 0x0011 : p = "Scroll bar"; break;
- case 0x0012 : p = "List box"; break;
- case 0x0013 : p = "Group box"; break;
- case 0x0014 : p = "Combo box"; break;
- case 0x0015 : p = "(Reserved)"; break;
- case 0x0016 : p = "(Reserved)"; break;
- case 0x0017 : p = "(Reserved)"; break;
- case 0x0018 : p = "(Reserved)"; break;
- case 0x0019 : p = "Comment"; break;
- case 0x001a : p = "(Reserved)"; break;
- case 0x001b : p = "(Reserved)"; break;
- case 0x001c : p = "(Reserved)"; break;
- case 0x001d : p = "(Reserved)"; break;
- case 0x001e : p = "Microsoft Office drawing"; break;
- default:
- p = "UNKNOWN";
- }
- ADDTEXT( ", type " );
- __AddHex( t, nType );
- ADDTEXT( ' ' );
- ADDTEXT( p );
- }
- break;
- }
- if ( t.Len() )
- PRINT();
- rIn.Seek( nPos2 );
- }
- }
-
- t.Erase();
- }
-}
-
-
-#undef LINESTART
-#undef IGNORE
-#undef ADDHEX
-#undef ADDDEC
-#undef PRINT
-#undef PreDump
-#undef ADDCELLHEAD
-
-void Biff8RecDumper::ContDump( const ULONG nL )
-{
- UINT32 nC = nMaxBodyLines;
- UINT32 n = nL;
- UINT32 nInL, nTmp;
- UINT8* pB = new UINT8[ nL ];
- UINT8* p;
- const UINT16 nLineLen = 16;
- UINT16 nCharCnt;
- BOOL bPart;
- ByteString aT;
-
- aT += pLevelPre;
-
- while( n && nC )
- {
- bPart = n < nLineLen;
- nInL = bPart? n : nLineLen;
- n -= nInL;
-
- pIn->Read( pB, nInL );
-
- // als Hex-Codes
- nTmp = nInL;
- p = pB;
- nCharCnt = 0;
- while( nTmp )
- {
- if( nCharCnt == nLineLen / 2 )
- aT += ' ';
-
- nCharCnt++;
-
- aT += ' ';
- __AddPureHex( aT, *p );
- p++;
-
- nTmp--;
- }
-
- if( bPart )
- aT += GetBlanks( ( UINT16 ) ( ( nLineLen - nInL ) * 3 ) );
-
- // als chars
-
- aT += " ";
- if( nInL < 9 )
- aT += ' ';
-
- nTmp = nInL;
- p = pB;
- nCharCnt = 0;
- while( nTmp )
- {
- if( nCharCnt == nLineLen / 2 )
- aT += ' ';
-
- nCharCnt++;
-
- if( IsPrintable( *p ) )
- aT += static_cast< sal_Char >( *p );
- else
- aT += '.';
-
- p++;
-
- nTmp--;
- }
-
- Print( aT );
- aT.Erase();
- aT += pLevelPre;
-
- nC--;
- }
-
- delete[] pB;
-}
-
-
-// Formula dumper =============================================================
-
-/** Name and parameter count of an Excel function. */
-struct XclDumpFunc
-{
- const sal_Char* pName; /// Name of the function.
- sal_uInt16 nParam; /// Parameter count for fixed functions.
-};
-
-static const XclDumpFunc pFuncData[] =
-{
-/* 0*/ { "COUNT", 0 },
- { "IF", 0 },
- { "ISNA", 1 },
- { "ISERROR", 1 },
- { "SUM", 0 },
-/* 5*/ { "AVERAGE", 0 },
- { "MIN", 0 },
- { "MAX", 0 },
- { "ROW", 0 },
- { "COLUMN", 0 },
-/* 10*/ { "NA", 0 },
- { "NPV", 0 },
- { "STDEV", 0 },
- { "DOLLAR", 0 },
- { "FIXED", 0 },
-/* 15*/ { "SIN", 1 },
- { "COS", 1 },
- { "TAN", 1 },
- { "ATAN", 1 },
- { "PI", 0 },
-/* 20*/ { "SQRT", 1 },
- { "EXP", 1 },
- { "LN", 1 },
- { "LOG10", 1 },
- { "ABS", 1 },
-/* 25*/ { "INT", 1 },
- { "SIGN", 1 },
- { "ROUND", 2 },
- { "LOOKUP", 0 },
- { "INDEX", 0 },
-/* 30*/ { "REPT", 2 },
- { "MID", 3 },
- { "LEN", 1 },
- { "VALUE", 1 },
- { "TRUE", 0 },
-/* 35*/ { "FALSE", 0 },
- { "AND", 0 },
- { "OR", 0 },
- { "NOT", 1 },
- { "MOD", 2 },
-/* 40*/ { "DCOUNT", 3 },
- { "DSUM", 3 },
- { "DAVERAGE", 3 },
- { "DMIN", 3 },
- { "DMAX", 3 },
-/* 45*/ { "DSTDEV", 3 },
- { "VAR", 0 },
- { "DVAR", 3 },
- { "TEXT", 2 },
- { "LINEST", 0 },
-/* 50*/ { "TREND", 0 },
- { "LOGEST", 0 },
- { "GROWTH", 0 },
- { "GOTO" }, // macro/internal
- { "HALT" }, // macro/internal
-/* 55*/ { "RETURN" }, // macro/internal
- { "PV", 0 },
- { "FV", 0 },
- { "NPER", 0 },
- { "PMT", 0 },
-/* 60*/ { "RATE", 0 },
- { "MIRR", 3 },
- { "IRR", 0 },
- { "RAND", 0 },
- { "MATCH", 0 },
-/* 65*/ { "DATE", 3 },
- { "TIME", 3 },
- { "DAY", 1 },
- { "MONTH", 1 },
- { "YEAR", 1 },
-/* 70*/ { "WEEKDAY", 0 },
- { "HOUR", 1 },
- { "MINUTE", 1 },
- { "SECOND", 1 },
- { "NOW", 0 },
-/* 75*/ { "AREAS", 1 },
- { "ROWS", 1 },
- { "COLUMNS", 1 },
- { "OFFSET", 0 },
- { "ABSREF" }, // macro/internal
-/* 80*/ { "RELREF" }, // macro/internal
- { "ARGUMENT" }, // macro/internal
- { "SEARCH", 0 },
- { "TRANSPOSE", 1 },
- { "ERROR" }, // macro/internal
-/* 85*/ { "STEP" }, // macro/internal
- { "TYPE", 1 },
- { "ECHO" }, // macro/internal
- { "SET.NAME" }, // macro/internal
- { "CALLER" }, // macro/internal
-/* 90*/ { "DEREF" }, // macro/internal
- { "WINDOWS" }, // macro/internal
- { "SERIES" }, // macro/internal
- { "DOCUMENTS" }, // macro/internal
- { "ACTIVE.CELL" }, // macro/internal
-/* 95*/ { "SELECTION" }, // macro/internal
- { "RESULT" }, // macro/internal
- { "ATAN2", 2 },
- { "ASIN", 1 },
- { "ACOS", 1 },
-/*100*/ { "CHOOSE", 0 },
- { "HLOOKUP", 0 },
- { "VLOOKUP", 0 },
- { "LINKS" }, // macro/internal
- { "INPUT" }, // macro/internal
-/*105*/ { "ISREF", 1 },
- { "GET.FORMULA" }, // macro/internal
- { "GET.NAME" }, // macro/internal
- { "SET.VALUE", 2 }, // macro/internal
- { "LOG", 0 },
-/*110*/ { "EXEC" }, // macro/internal
- { "CHAR", 1 },
- { "LOWER", 1 },
- { "UPPER", 1 },
- { "PROPER", 1 },
-/*115*/ { "LEFT", 0 },
- { "RIGHT", 0 },
- { "EXACT", 2 },
- { "TRIM", 1 },
- { "REPLACE", 4 },
-/*120*/ { "SUBSTITUTE", 0 },
- { "CODE", 1 },
- { "NAMES" }, // macro/internal
- { "DIRECTORY" }, // macro/internal
- { "FIND", 0 },
-/*125*/ { "CELL", 0 },
- { "ISERR", 1 },
- { "ISTEXT", 1 },
- { "ISNUMBER", 1 },
- { "ISBLANK", 1 },
-/*130*/ { "T", 1 },
- { "N", 1 },
- { "FOPEN" }, // macro/internal
- { "FCLOSE" }, // macro/internal
- { "FSIZE" }, // macro/internal
-/*135*/ { "FREADLN" }, // macro/internal
- { "FREAD" }, // macro/internal
- { "FWRITELN" }, // macro/internal
- { "FWRITE" }, // macro/internal
- { "FPOS" }, // macro/internal
-/*140*/ { "DATEVALUE", 1 },
- { "TIMEVALUE", 1 },
- { "SLN", 3 },
- { "SYD", 4 },
- { "DDB", 0 },
-/*145*/ { "GET.DEF" }, // macro/internal
- { "REFTEXT" }, // macro/internal
- { "TEXTREF" }, // macro/internal
- { "INDIRECT", 0 },
- { "REGISTER" }, // macro/internal
-/*150*/ { "CALL" },
- { "ADD.BAR" }, // macro/internal
- { "ADD.MENU" }, // macro/internal
- { "ADD.COMMAND" }, // macro/internal
- { "ENABLE.COMMAND" }, // macro/internal
-/*155*/ { "CHECK.COMMAND" }, // macro/internal
- { "RENAME.COMMAND" }, // macro/internal
- { "SHOW.BAR" }, // macro/internal
- { "DELETE.MENU" }, // macro/internal
- { "DELETE.COMMAND" }, // macro/internal
-/*160*/ { "GET.CHART.ITEM" }, // macro/internal
- { "DIALOG.BOX" }, // macro/internal
- { "CLEAN", 1 },
- { "MDETERM", 1 },
- { "MINVERSE", 1 },
-/*165*/ { "MMULT", 2 },
- { "FILES" }, // macro/internal
- { "IPMT", 0 },
- { "PPMT", 0 },
- { "COUNTA", 0 },
-/*170*/ { "CANCEL.KEY" }, // macro/internal
- { "FOR" }, // macro/internal
- { "WHILE" }, // macro/internal
- { "BREAK" }, // macro/internal
- { "NEXT" }, // macro/internal
-/*175*/ { "INITIATE" }, // macro/internal
- { "REQUEST" }, // macro/internal
- { "POKE" }, // macro/internal
- { "EXECUTE" }, // macro/internal
- { "TERMINATE" }, // macro/internal
-/*180*/ { "RESTART" }, // macro/internal
- { "HELP" }, // macro/internal
- { "GET.BAR" }, // macro/internal
- { "PRODUCT", 0 },
- { "FACT", 1 },
-/*185*/ { "GET.CELL" }, // macro/internal
- { "GET.WORKSPACE" }, // macro/internal
- { "GET.WINDOW" }, // macro/internal
- { "GET.DOCUMENT" }, // macro/internal
- { "DPRODUCT", 3 },
-/*190*/ { "ISNONTEXT", 1 },
- { "GET.NOTE" }, // macro/internal
- { "NOTE" }, // macro/internal
- { "STDEVP", 0 },
- { "VARP", 0 },
-/*195*/ { "DSTDDEVP", 3 },
- { "DVARP", 3 },
- { "TRUNC", 0 },
- { "ISLOGICAL", 1 },
- { "DBCOUNTA", 3 },
-/*200*/ { "DELETE.BAR" }, // macro/internal
- { "UNREGISTER" }, // macro/internal
- { "202" }, // not used
- { "203" }, // not used
- { "USDOLLAR" },
-/*205*/ { "FINDB" },
- { "SEARCHB" },
- { "REPLACEB", 4 },
- { "LEFTB" },
- { "RIGHTB" },
-/*210*/ { "MIDB", 3 },
- { "LENB", 1 },
- { "ROUNDUP", 2 },
- { "ROUNDDOWN", 2 },
- { "ASC", 1 },
-/*215*/ { "DBSC", 1 },
- { "RANK", 0 },
- { "217" }, // not used
- { "218" }, // not used
- { "ADDRESS", 0 },
-/*220*/ { "DAYS360", 0 },
- { "TODAY", 0 },
- { "VDB", 0 },
- { "ELSE" }, // macro/internal
- { "ELSE.IF" }, // macro/internal
-/*225*/ { "END.IF" }, // macro/internal
- { "FOR.CELL" }, // macro/internal
- { "MEDIAN", 0 },
- { "SUMPRODUCT", 0 },
- { "SINH", 1 },
-/*230*/ { "COSH", 1 },
- { "TANH", 1 },
- { "ASINH", 1 },
- { "ACOSH", 1 },
- { "ATANH", 1 },
-/*235*/ { "DGET", 3 },
- { "CREATE.OBJECT" }, // macro/internal
- { "VOLATILE" }, // macro/internal
- { "LAST.ERROR" }, // macro/internal
- { "CUSTOM.UNDO" }, // macro/internal
-/*240*/ { "CUSTOM.REPEAT" }, // macro/internal
- { "FORMULA.CONVERT" }, // macro/internal
- { "GET.LINK.INFO" }, // macro/internal
- { "TEXT.BOX" }, // macro/internal
- { "INFO", 1 },
-/*245*/ { "GROUP" }, // macro/internal
- { "GET.OBJECT" }, // macro/internal
- { "DB", 0 },
- { "PAUSE" }, // macro/internal
- { "249" }, // not used
-/*250*/ { "250" }, // not used
- { "RESUME" }, // macro/internal
- { "FREQUENCY", 2 },
- { "ADD.TOOLBAR" }, // macro/internal
- { "DELETE.TOOLBAR" }, // macro/internal
-/*255*/ { "EXTERN.CALL" }, // macro/internal
- { "RESET.TOOLBAR" }, // macro/internal
- { "EVALUATE" }, // macro/internal
- { "GET.TOOLBAR" }, // macro/internal
- { "GET.TOOL" }, // macro/internal
-/*260*/ { "SPELLING.CHECK" }, // macro/internal
- { "ERROR.TYPE", 1 },
- { "APP.TITLE" }, // macro/internal
- { "WINDOW.TITLE" }, // macro/internal
- { "SAVE.TOOLBAR" }, // macro/internal
-/*265*/ { "ENABLE.TOOL" }, // macro/internal
- { "PRESS.TOOL" }, // macro/internal
- { "REGISTER.ID" }, // macro/internal
- { "GET.WORKBOOK" }, // macro/internal
- { "AVEDEV", 0 },
-/*270*/ { "BETADIST", 0 },
- { "GAMMALN", 1 },
- { "BETAINV", 0 },
- { "BINOMDIST", 4 },
- { "CHIDIST", 2 },
-/*275*/ { "CHIINV", 2 },
- { "COMBIN", 2 },
- { "CONFIDENCE", 3 },
- { "CRITBINOM", 3 },
- { "EVEN", 1 },
-/*280*/ { "EXPONDIST", 3 },
- { "FDIST", 3 },
- { "FINV", 3 },
- { "FISHER", 1 },
- { "FISHERINV", 1 },
-/*285*/ { "FLOOR", 2 },
- { "GAMMADIST", 4 },
- { "GAMMAINV", 3 },
- { "CEILING", 2 },
- { "HYPGEOMDIST", 4 },
-/*290*/ { "LOGNORMDIST", 3 },
- { "LOGINV", 3 },
- { "NEGBINOMDIST", 3 },
- { "NORMDIST", 4 },
- { "NORMSDIST", 1 },
-/*295*/ { "NORMINV", 3 },
- { "NORMSINV", 1 },
- { "STANDARDIZE", 3 },
- { "ODD", 1 },
- { "PERMUT", 2 },
-/*300*/ { "POISSON", 3 },
- { "TDIST", 3 },
- { "WEIBULL", 4 },
- { "SUMXMY2", 2 },
- { "SUMX2MY2", 2 },
-/*305*/ { "SUMX2PY2", 2 },
- { "CHITEST", 2 },
- { "CORREL", 2 },
- { "COVAR", 2 },
- { "FORECAST", 3 },
-/*310*/ { "FTEST", 2 },
- { "INTERCEPT", 2 },
- { "PEARSON", 2 },
- { "RSQ", 2 },
- { "STEYX", 2 },
-/*315*/ { "SLOPE", 2 },
- { "TTEST", 4 },
- { "PROB", 0 },
- { "DEVSQ", 0 },
- { "GEOMEAN", 0 },
-/*320*/ { "HARMEAN", 0 },
- { "SUMSQ", 0 },
- { "KURT", 0 },
- { "SKEW", 0 },
- { "ZTEST", 0 },
-/*325*/ { "LARGE", 2 },
- { "SMALL", 2 },
- { "QUARTILE", 2 },
- { "PERCENTILE", 2 },
- { "PERCENTRANK", 0 },
-/*330*/ { "MODE", 0 },
- { "TRIMMEAN", 2 },
- { "TINV", 2 },
- { "333" }, // not used
- { "MOVIE.COMMAND" }, // macro/internal
-/*335*/ { "GET.MOVIE" }, // macro/internal
- { "CONCATENATE", 0 },
- { "POWER", 2 },
- { "PIVOT.ADD.DATA" }, // macro/internal
- { "GET.PIVOT.TABLE" }, // macro/internal
-/*340*/ { "GET.PIVOT.FIELD" }, // macro/internal
- { "GET.PIVOT.ITEM" }, // macro/internal
- { "RADIANS", 1 },
- { "DEGREES", 1 },
- { "SUBTOTAL", 0 },
-/*345*/ { "SUMIF", 0 },
- { "COUNTIF", 2 },
- { "COUNTBLANK", 1 },
- { "SCENARIO.GET" }, // macro/internal
- { "OPTIONS.LISTS.GET" }, // macro/internal
-/*350*/ { "ISPMT", 4 },
- { "DATEDIF", 3 },
- { "DATESTRING", 1 },
- { "NUMBERSTRING", 2 },
- { "ROMAN", 0 },
-/*355*/ { "OPEN.DIALOG" }, // macro/internal
- { "SAVE.DIALOG" }, // macro/internal
- { "VIEW.GET" }, // macro/internal
- { "GETPIVOTDATA", 0 },
- { "HYPERLINK", 2 },
-/*360*/ { "PHONETIC", 1 },
- { "AVERAGEA", 0 },
- { "MAXA", 0 },
- { "MINA", 0 },
- { "STDEVPA", 0 },
-/*365*/ { "VARPA", 0 },
- { "STDEVA", 0 },
- { "VARA", 0 },
- { "BAHTTEXT", 1 },
- { "THAIDAYOFWEEK", 1 },
-/*370*/ { "THAIDIGIT", 1 },
- { "THAIMONTHOFYEAR", 1 },
- { "THAINUMSOUND", 1 },
- { "THAINUMSTRING", 1 },
- { "THAISTRINGLENGTH", 1 },
-/*375*/ { "ISTHAIDIGIT", 1 },
- { "ROUNDBAHTDOWN", 1 },
- { "ROUNDBAHTUP", 1 },
- { "THAIYEAR", 1 },
- { "RTD" },
-/*380*/ { "ISHYPERLINK", 1 }
-};
-
-const XclDumpFunc* lcl_GetFuncData( sal_uInt16 nIndex )
-{
- return (nIndex < STATIC_TABLE_SIZE( pFuncData )) ? (pFuncData + nIndex) : NULL;
-}
-
-// ----------------------------------------------------------------------------
-
-/** Stack helper to create a human readable formula string from UPN. */
-class XclDumpFormulaStackImpl : private ScfDelStack< ByteString >
-{
-public:
- void PushOperand( const ByteString& rOperand );
- void PushUnary( const ByteString& rOperator, bool bInFront );
- void PushBinary( const ByteString& rOperator );
- void PushFunction( const ByteString& rFuncName, sal_uInt16 nParamCount );
- inline ByteString GetString() const { return Top() ? *Top() : ByteString(); }
-};
-
-void XclDumpFormulaStackImpl::PushOperand( const ByteString& rOperand )
-{
- Push( new ByteString( rOperand ) );
-}
-
-void XclDumpFormulaStackImpl::PushUnary( const ByteString& rOperator, bool bInFront )
-{
- if( !Count() ) return;
- ByteString* pOp = Top();
- pOp->Insert( rOperator, bInFront ? 0 : pOp->Len() );
-}
-
-void XclDumpFormulaStackImpl::PushBinary( const ByteString& rOperator )
-{
- if( Count() < 2 ) return;
- // second operand is on top
- ByteString* pSecond = Pop();
- ByteString* pFirst = Top();
- *pFirst += rOperator;
- *pFirst += *pSecond;
- delete pSecond;
-}
-
-void XclDumpFormulaStackImpl::PushFunction( const ByteString& rFuncName, sal_uInt16 nParamCount )
-{
- if( Count() < nParamCount ) return;
- ByteString* pNew = new ByteString( ')' );
- for( sal_uInt16 nIndex = 0; nIndex < nParamCount; ++nIndex )
- {
- if( nIndex ) pNew->Insert( ';', 0 );
- ByteString* pOp = Pop();
- pNew->Insert( *pOp, 0 );
- delete pOp;
- }
- pNew->Insert( '(', 0 );
- pNew->Insert( rFuncName, 0 );
- Push( pNew );
-}
-
-// ----------------------------------------------------------------------------
-
-/** Stack to create a human readable formula and token class overview from UPN. */
-class XclDumpFormulaStack
-{
-public:
- void PushOperand( const ByteString& rOperand, sal_uInt8 nToken );
- inline void PushOperand( const sal_Char* pcOperand, sal_uInt8 nToken )
- { PushOperand( ByteString( pcOperand ), nToken ); }
-
- void PushUnary( const ByteString& rOperator, bool bInFront = true );
- inline void PushUnary( const sal_Char* pcOperator, bool bInFront = true )
- { PushUnary( ByteString( pcOperator ), bInFront ); }
-
- void PushBinary( const ByteString& rOperator );
- inline void PushBinary( const sal_Char* pcOperator )
- { PushBinary( ByteString( pcOperator ) ); }
-
- void PushFunction( const ByteString& rFuncName, sal_uInt16 nParamCount, sal_uInt8 nToken );
- inline void PushFunction( const sal_Char* pcFuncName, sal_uInt16 nParamCount, sal_uInt8 nToken )
- { PushFunction( ByteString( pcFuncName ), nParamCount, nToken ); }
-
- inline ByteString GetFormula() const { return maFmla.GetString(); }
- inline ByteString GetTokenClasses() const { return maClass.GetString(); }
-
- static ByteString GetTokenClass( sal_uInt8 nToken );
-
-private:
- void PushTokenClass( sal_uInt8 nToken );
-
- XclDumpFormulaStackImpl maFmla;
- XclDumpFormulaStackImpl maClass;
-};
-
-void XclDumpFormulaStack::PushOperand( const ByteString& rOperand, sal_uInt8 nToken )
-{
- maFmla.PushOperand( rOperand );
- maClass.PushOperand( GetTokenClass( nToken ) );
-}
-
-void XclDumpFormulaStack::PushUnary( const ByteString& rOperator, bool bInFront )
-{
- maFmla.PushUnary( rOperator, bInFront );
- maClass.PushUnary( rOperator, bInFront );
-}
-
-void XclDumpFormulaStack::PushBinary( const ByteString& rOperator )
-{
- maFmla.PushBinary( rOperator );
- maClass.PushBinary( rOperator );
-}
-
-void XclDumpFormulaStack::PushFunction( const ByteString& rFuncName, sal_uInt16 nParamCount, sal_uInt8 nToken )
-{
- maFmla.PushFunction( rFuncName, nParamCount );
- maClass.PushFunction( GetTokenClass( nToken ), nParamCount );
-}
-
-ByteString XclDumpFormulaStack::GetTokenClass( sal_uInt8 nToken )
-{
- sal_Char cClass = 'B';
- switch( nToken & 0xE0 )
- {
- case 0x20: cClass = 'R'; break;
- case 0x40: cClass = 'V'; break;
- case 0x60: cClass = 'A'; break;
- }
- return ByteString( cClass );
-}
-
-// ----------------------------------------------------------------------------
-
-const sal_Char* lcl_GetErrorString( sal_uInt8 nErr )
-{
- switch( nErr )
- {
- case 0x00: return "#NULL!";
- case 0x07: return "#DIV/0!";
- case 0x0F: return "#VALUE!";
- case 0x17: return "#REF!";
- case 0x1D: return "#NAME?";
- case 0x24: return "#NUM!";
- case 0x2A: return "#N/A!";
- }
- return "!unknown!";
-}
-
-
-
-void lcl_StartToken( ByteString& rString, sal_uInt16 nPos, sal_uInt8 nToken, const sal_Char* pTokenName )
-{
- rString.Erase();
- rString.Append( " " );
- __AddHex( rString, nPos );
- rString.Append( " " );
- __AddHex( rString, nToken );
- rString.Append( " t" ).Append( pTokenName ).Expand( 33, ' ' );
-}
-
-void lcl_StartTokenClass( ByteString& rString, sal_uInt16 nPos, sal_uInt8 nToken, const sal_Char* pTokenName )
-{
- ByteString aToken( pTokenName );
- aToken.Append( XclDumpFormulaStack::GetTokenClass( nToken ) );
- lcl_StartToken( rString, nPos, nToken, aToken.GetBuffer() );
-}
-
-void Biff8RecDumper::FormulaDump( const UINT16 nL, const FORMULA_TYPE eFT )
-{
- if( !nL )
- return;
-
- sal_uInt32 nStartPos = pIn->GetRecPos();
- const sal_uInt32 nAfterPos = nStartPos + nL;
-
- BYTE nOp;
- ByteString t, aOperand;
- BOOL bError = FALSE;
- const BOOL bRangeName = eFT == FT_RangeName;
- const BOOL bSharedFormula = eFT == FT_SharedFormula;
- const BOOL bRNorSF = bRangeName || bSharedFormula;
-
- XclDumpFormulaStack aStack;
- sal_Bool bPrinted = sal_True;
-
-#define PRINTTOKEN() { if( !bPrinted ) Print( t ); bPrinted = sal_True; }
-#define STARTTOKEN( name ) lcl_StartToken( t, static_cast< sal_uInt16 >( pIn->GetRecPos() - nStartPos - 1 ), nOp, name )
-#define STARTTOKENCLASS( name ) lcl_StartTokenClass( t, static_cast< sal_uInt16 >( pIn->GetRecPos() - nStartPos - 1 ), nOp, name )
-
- while( pIn->IsValid() && ( pIn->GetRecPos() < nAfterPos ) && !bError )
- {
- *pIn >> nOp;
- bPrinted = sal_False;
- aOperand.Erase();
-
- switch( nOp ) // Buch Seite:
- { // SDK4 SDK5
- case 0x01: // Array Formula [325 ]
- {
- STARTTOKEN( "Exp" );
- sal_uInt16 nRow, nCol;
- *pIn >> nRow >> nCol;
- t += "array formula or shared formula, base-address=";
- lcl_AddRef( t, nCol, nRow );
- aStack.PushFunction( "ARRAY", 0, nOp );
- }
- break;
- case 0x02: // Data Table [325 277]
- {
- STARTTOKEN( "Tbl" );
- sal_uInt16 nRow, nCol;
- *pIn >> nRow >> nCol;
- t += "multiple operation, base-address=";
- lcl_AddRef( t, nCol, nRow );
- aStack.PushFunction( "MULTIPLE.OPERATIONS", 0, nOp );
- }
- break;
- case 0x03: // Addition [312 264]
- STARTTOKEN( "Add" );
- aStack.PushBinary( "+" );
- break;
- case 0x04: // Subtraction [313 264]
- STARTTOKEN( "Sub" );
- aStack.PushBinary( "-" );
- break;
- case 0x05: // Multiplication [313 264]
- STARTTOKEN( "Mul" );
- aStack.PushBinary( "*" );
- break;
- case 0x06: // Division [313 264]
- STARTTOKEN( "Div" );
- aStack.PushBinary( "/" );
- break;
- case 0x07: // Exponetiation [313 265]
- STARTTOKEN( "Power" );
- aStack.PushBinary( "^" );
- break;
- case 0x08: // Concatenation [313 265]
- STARTTOKEN( "Concat" );
- aStack.PushBinary( "&" );
- break;
- case 0x09: // Less Than [313 265]
- STARTTOKEN( "LT" );
- aStack.PushBinary( "<" );
- break;
- case 0x0A: // Less Than or Equal [313 265]
- STARTTOKEN( "LE" );
- aStack.PushBinary( "<=" );
- break;
- case 0x0B: // Equal [313 265]
- STARTTOKEN( "EQ" );
- aStack.PushBinary( "=" );
- break;
- case 0x0C: // Greater Than or Equal [313 265]
- STARTTOKEN( "GE" );
- aStack.PushBinary( ">=" );
- break;
- case 0x0D: // Greater Than [313 265]
- STARTTOKEN( "GT" );
- aStack.PushBinary( ">" );
- break;
- case 0x0E: // Not Equal [313 265]
- STARTTOKEN( "NE" );
- aStack.PushBinary( "<>" );
- break;
- case 0x0F: // Intersection [314 265]
- STARTTOKEN( "Isect" );
- aStack.PushBinary( " " );
- break;
- case 0x10: // List [314 265]
- STARTTOKEN( "List" );
- aStack.PushBinary( ";" );
- break;
- case 0x11: // Range [314 265]
- STARTTOKEN( "Range" );
- aStack.PushBinary( ":" );
- break;
- case 0x12: // Unary Plus [312 264]
- STARTTOKEN( "Uplus" );
- aStack.PushUnary( "+" );
- break;
- case 0x13: // Unary Minus [312 264]
- STARTTOKEN( "Uminus" );
- aStack.PushUnary( "-" );
- break;
- case 0x14: // Percent Sign [312 264]
- STARTTOKEN( "Percent" );
- aStack.PushUnary( "%", false );
- break;
- case 0x15: // Parenthesis [326 278]
- STARTTOKEN( "Paren" );
- // simulate two unary operators to enclose operand
- aStack.PushUnary( "(" );
- aStack.PushUnary( ")", false );
- break;
- case 0x16: // Missing Argument [314 266]
- STARTTOKEN( "MissArg" );
- aStack.PushOperand( "~", nOp );
- break;
- case 0x17: // ByteString Constant [314 266]
- {
- STARTTOKEN( "Str" );
-
- UINT8 nLen;
- *pIn >> nLen;
-
- t += "string [len=";
- __AddDec( t, nLen );
- t += "] ";
-
- aOperand += '"';
- if( nLen )
- aOperand += GETSTR( pIn->ReadUniString( nLen ) );
- else
- pIn->Ignore( 1 );
- aOperand += '"';
- t += aOperand;
- aStack.PushOperand( aOperand, nOp );
- }
- break;
- case 0x18:
- {
- STARTTOKEN( "Extended" );
- UINT8 nEptg;
- *pIn >> nEptg;
-
-#define D(name,size,ext,type) {t+="eptg ";__AddDec(t,(UINT16)nEptg);t+=": "; \
- t+=name;t+=" [";__AddDec(t,(UINT16)size);t+="] ";t+=type; \
- if(ext)t+=" + ext";PRINTTOKEN();ContDump(size);aStack.PushOperand(name,nOp);}
- switch( nEptg )
- { // name size ext type
- case 0x00: // res
- D( "res", 0, 0, "" );
- break;
- case 0x01: // Lel 4 - err
- D( "Lel", 4, 0, "err" );
- break;
- case 0x02: // Rw 4 - ref
- D( "Rw", 4, 0, "ref" );
- break;
- case 0x03: // Col 4 - ref
- D( "Col", 4, 0, "ref" );
- break;
- case 0x04: // res
- case 0x05: // res
- D( "res", 0, 0, "" );
- break;
- case 0x06: // RwV 4 - val
- D( "RwV", 4, 0, "val" );
- break;
- case 0x07: // ColV 4 - val
- D( "ColV", 4, 0, "val" );
- break;
- case 0x08: // res
- case 0x09: // res
- D( "res", 0, 0, "" );
- break;
- case 0x0A: // Radical 13 - ref
- D( "Radical", 13, 0, "ref" );
- break;
- case 0x0B: // RadicalS 13 x ref
- D( "RadicalS", 13, 1, "ref" );
- break;
- case 0x0C: // RwS 4 x ref
- D( "RwS", 4, 1, "ref" );
- break;
- case 0x0D: // ColS 4 x ref
- D( "ColS", 4, 1, "ref" );
- break;
- case 0x0E: // RwSV 4 x val
- D( "RwSV", 4, 1, "val" );
- break;
- case 0x0F: // ColSV 4 x val
- D( "ColSV", 4, 1, "val" );
- break;
- case 0x10: // RadicalLel 4 - err
- D( "RadicalLel", 4, 0, "err" );
- break;
- case 0x11: // res
- case 0x12: // res
- case 0x13: // res
- case 0x14: // res
- case 0x15: // res
- case 0x16: // res
- case 0x17: // res
- case 0x18: // res
- D( "res", 0, 0, "" );
- break;
- case 0x19: // invalid values
- case 0x1A: // invalid values
- D( "invalid vals", 0, 0, "" );
- break;
- case 0x1B: // res
- case 0x1C: // res
- D( "res", 0, 0, "" );
- break;
- case 0x1D: // SxName 4 - val
- D( "SxName", 4, 0, "val" );
- break;
- case 0x1E: // res
- D( "res", 0, 0, "" );
- break;
- default:
- D( "!unknown!", 0, 0, "" );
- }
-#undef D
- }
- break;
- case 0x19: // Special Attribute [327 279]
- {
- STARTTOKEN( "Attr" );
- UINT16 nData, nFakt;
- BYTE nOpt;
-
- *pIn >> nOpt >> nData;
- nFakt = 2;
-
- t += "flags="; __AddHex( t, nOpt );
-
- if( nOpt & 0x01 ) t += " volatile";
- if( nOpt & 0x02 ) t += " if";
- if( nOpt & 0x04 ) t += " choose";
- if( nOpt & 0x08 ) t += " skip";
- if( nOpt & 0x10 ) t += " sum";
- if( nOpt & 0x20 ) t += " assignment";
- if( nOpt & 0x40 ) t += " space";
- if( nOpt & 0x80 ) t += " unknown";
-
- if( nOpt & 0x02 )
- {
- t += " skip-to-false=";
- __AddHex( t, nData );
- }
- if( nOpt & 0x04 )
- {
- t += " count=";
- __AddDec( t, nData );
- t += " skip=";
- for( sal_uInt16 nIdx = 0; nIdx <= nData; ++nIdx )
- {
- if( nIdx ) t += ',';
- __AddDec( t, pIn->ReaduInt16() );
- }
- }
- if( nOpt & 0x08 )
- {
- t += " skip=";
- __AddHex( t, nData );
- t += " (";
- __AddDec( t, sal_uInt8( nData + 1 ) );
- t += " bytes)";
- }
- if( nOpt & 0x10 )
- aStack.PushFunction( "ATTRSUM", 1, nOp );
- if( nOpt & 0x40 )
- {
- t += " type=";
- __AddDec( t, static_cast< sal_uInt8 >( nData ) );
- t += " count=";
- __AddDec( t, static_cast< sal_uInt8 >( nData >> 8 ) );
- }
- }
- break;
- case 0x1C: // Error Value [314 266]
- {
- STARTTOKEN( "Err" );
- sal_uInt8 nErr = pIn->ReaduInt8();
- t += "error value ("; __AddHex( t, nErr );
- t += ") ";
- t += lcl_GetErrorString( nErr );
- aStack.PushOperand( lcl_GetErrorString( nErr ), nOp );
- }
- break;
- case 0x1D: // Boolean [315 266]
- STARTTOKEN( "Bool" );
- aOperand += pIn->ReaduInt8() ? "TRUE" : "FALSE";
- t += aOperand;
- aStack.PushOperand( aOperand, nOp );
- break;
- case 0x1E: // Integer [315 266]
- STARTTOKEN( "Int" );
- __AddDec( aOperand, pIn->ReaduInt16() );
- t += aOperand;
- aStack.PushOperand( aOperand, nOp );
- break;
- case 0x1F: // Number [315 266]
- STARTTOKEN( "Num" );
- __AddDouble( aOperand, pIn->ReadDouble() );
- t += aOperand;
- aStack.PushOperand( aOperand, nOp );
- break;
- case 0x20: // Array Constant [317 268]
- case 0x40:
- case 0x60:
- STARTTOKENCLASS( "Array" );
- pIn->Ignore( 7 );
- aStack.PushOperand( "{ConstArray}", nOp );
- break;
- case 0x21: // Function, Fixed Number of Arguments [333 282]
- case 0x41:
- case 0x61:
- {
- STARTTOKENCLASS( "Func" );
- UINT16 nInd = pIn->ReaduInt16();
- const XclDumpFunc* pFunc = lcl_GetFuncData( nInd );
- aOperand += pFunc ? pFunc->pName : "!unknown!";
-
- t += "fix function: index="; __AddHex( t, nInd );
- t += " ("; t += aOperand;
- t += ')';
- aStack.PushFunction( aOperand, pFunc ? pFunc->nParam : 0, nOp );
- }
- break;
- case 0x22: // Function, Variable Number of Arg. [333 283]
- case 0x42:
- case 0x62:
- {
- STARTTOKENCLASS( "FuncVar" );
- BYTE nAnz;
- UINT16 nInd;
- *pIn >> nAnz >> nInd;
- const XclDumpFunc* pFunc = lcl_GetFuncData( nInd & 0x7FFF );
- aOperand += pFunc ? pFunc->pName : "!unknown!";
-
- t += "var function: index="; __AddHex( t, nInd );
- t += " ("; t += aOperand;
- t += ") param count="; __AddHex( t, nAnz );
- t += " ("; __AddDec( t, (UINT8)(nAnz & 0x7F) );
- t += ')';
- if( nAnz & 0x8000 )
- t += " cmd-equiv.";
- aStack.PushFunction( aOperand, nAnz & 0x7F, nOp );
- }
- break;
- case 0x23: // Name [318 269]
- case 0x43:
- case 0x63:
- {
- STARTTOKENCLASS( "Name" );
- sal_uInt16 nNameIdx = pIn->ReaduInt16();
- __AddDec( aOperand, nNameIdx );
- t += "internal name: index=";
- t += aOperand;
- pIn->Ignore( 2 );
- if( (0 < nNameIdx) && (nNameIdx <= maNames.size()) )
- aOperand = maNames[ nNameIdx - 1 ];
- else
- aOperand.Insert( "NAME(", 0 ).Append( ')' );
- aStack.PushOperand( aOperand, nOp );
- }
- break;
- case 0x24: // Cell Reference [319 270]
- case 0x44:
- case 0x64:
- case 0x2A: // Deleted Cell Reference [323 273]
- case 0x4A:
- case 0x6A:
- {
- if( (nOp & 0x1F) == 0x04 )
- STARTTOKENCLASS( "Ref" );
- else
- STARTTOKENCLASS( "RefErr" );
-
- UINT16 nCol, nRow;
- *pIn >> nRow >> nCol;
- AddRef( aOperand, nRow, nCol, bRangeName );
- t += "2D cell ref C/R="; __AddHex( t, nCol );
- t += '/'; __AddHex( t, nRow );
- t += ' '; t += aOperand;
- aStack.PushOperand( aOperand, nOp );
- }
- break;
- case 0x25: // Area Reference [320 270]
- case 0x45:
- case 0x65:
- case 0x2B: // Deleted Area Refernce [323 273]
- case 0x4B:
- case 0x6B:
- {
- if( (nOp & 0x1F) == 0x05 )
- STARTTOKENCLASS( "Area" );
- else
- STARTTOKENCLASS( "AreaErr" );
-
- UINT16 nRowFirst, nRowLast, nColFirst, nColLast;
- *pIn >> nRowFirst >> nRowLast >> nColFirst >> nColLast;
- AddRangeRef( aOperand, nRowFirst, nColFirst, nRowLast, nColLast, bRangeName );
- t += "2D area ref C/R:C/R="; __AddHex( t, nColFirst );
- t += '/'; __AddHex( t, nRowFirst );
- t += ':'; __AddHex( t, nColLast );
- t += '/'; __AddHex( t, nRowLast );
- t += ' '; t += aOperand;
- aStack.PushOperand( aOperand, nOp );
- }
- break;
- case 0x26: // Constant Reference Subexpression [321 271]
- case 0x46:
- case 0x66:
- {
- STARTTOKENCLASS( "MemArea" );
- sal_uInt32 nRes;
- sal_uInt16 nSize;
- *pIn >> nRes >> nSize;
- t += "reserved="; __AddHex( t, nRes );
- t += " size="; __AddDec( t, nSize );
- }
- break;
- case 0x27: // Erroneous Constant Reference Subexpr. [322 272]
- case 0x47:
- case 0x67:
- {
- STARTTOKENCLASS( "MemErr" );
- sal_uInt32 nRes;
- sal_uInt16 nSize;
- *pIn >> nRes >> nSize;
- t += "reserved="; __AddHex( t, nRes );
- t += " size="; __AddDec( t, nSize );
- }
- break;
- case 0x28: // Incomplete Constant Reference Subexpr.[331 281]
- case 0x48:
- case 0x68:
- {
- STARTTOKENCLASS( "MemNoMem" );
- sal_uInt32 nRes;
- sal_uInt16 nSize;
- *pIn >> nRes >> nSize;
- t += "reserved="; __AddHex( t, nRes );
- t += " size="; __AddDec( t, nSize );
- }
- break;
- case 0x29: // Variable Reference Subexpression [331 281]
- case 0x49:
- case 0x69:
- {
- STARTTOKENCLASS( "MemFunc" );
- sal_uInt16 nSize;
- *pIn >> nSize;
- t += "size="; __AddDec( t, nSize );
- }
- break;
- case 0x2C: // Cell Reference Within a Name/ShrdFmla [323 273]
- case 0x4C:
- case 0x6C:
- {
- STARTTOKENCLASS( "RefN" );
- UINT16 nRow, nCol;
- *pIn >> nRow >> nCol;
- AddRef( aOperand, nRow, nCol, bRNorSF );
- t += "2D cell ref in name C/R="; __AddHex( t, nCol );
- t += '/'; __AddHex( t, nRow );
- t += ' '; t += aOperand;
- aStack.PushOperand( aOperand, nOp );
- }
- break;
- case 0x2D: // Area Reference Within a Name/ShrdFmla [324 274]
- case 0x4D:
- case 0x6D:
- {
- STARTTOKENCLASS( "AreaN" );
- UINT16 nRowFirst, nRowLast, nColFirst, nColLast;
- *pIn >> nRowFirst >> nRowLast >> nColFirst >> nColLast;
- AddRangeRef( aOperand, nRowFirst, nColFirst, nRowLast, nColLast, bRNorSF );
- t += "2D area ref in name C/R:C/R"; __AddHex( t, nColFirst );
- t += '/'; __AddHex( t, nRowFirst );
- t += ':'; __AddHex( t, nColLast );
- t += '/'; __AddHex( t, nRowLast );
- t += ' '; t += aOperand;
- aStack.PushOperand( aOperand, nOp );
- }
- break;
- case 0x2E: // Reference Subexpression Within a Name [332 282]
- case 0x4E:
- case 0x6E:
- {
- STARTTOKENCLASS( "MemAreaN" );
- sal_uInt16 nSize;
- *pIn >> nSize;
- t += "size="; __AddDec( t, nSize );
- }
- break;
- case 0x2F: // Incomplete Reference Subexpression... [332 282]
- case 0x4F:
- case 0x6F:
- {
- STARTTOKENCLASS( "MemNoMemN" );
- sal_uInt16 nSize;
- *pIn >> nSize;
- t += "size="; __AddDec( t, nSize );
- }
- break;
- case 0x39: // Name or External Name [ 275]
- case 0x59:
- case 0x79:
- {
- STARTTOKENCLASS( "NameX" );
- UINT16 nXti, nName;
- *pIn >> nXti >> nName;
- pIn->Ignore( 2 );
- t += "external name: XTI="; __AddDec( t, nXti );
- t += " name index="; __AddDec( t, nName );
- aOperand += "EXTNAME(XTI(";
- __AddDec( aOperand, nXti );
- aOperand += "),";
- __AddDec( aOperand, nName );
- aOperand += ')';
- aStack.PushOperand( aOperand, nOp );
- }
- break;
- case 0x3A: // 3-D Cell Reference [ 275]
- case 0x5A:
- case 0x7A:
- case 0x3C: // Deleted 3-D Cell Reference [ 277]
- case 0x5C:
- case 0x7C:
- {
- if( (nOp & 0x1F) == 0x1A )
- STARTTOKENCLASS( "Ref3d" );
- else
- STARTTOKENCLASS( "Ref3dErr" );
-
- UINT16 nXti, nRow, nCol;
- *pIn >> nXti >> nRow >> nCol;
- AddRef( aOperand, nRow, nCol, bRangeName, nXti );
- t += "3D cell ref Xti!C/R="; __AddHex( t, nXti );
- t += '!'; __AddHex( t, nCol );
- t += '/'; __AddHex( t, nRow );
- t += ' '; t += aOperand;
- aStack.PushOperand( aOperand, nOp );
- }
- break;
- case 0x3B: // 3-D Area Reference [ 276]
- case 0x5B:
- case 0x7B:
- case 0x3D: // Deleted 3-D Area Reference [ 277]
- case 0x5D:
- case 0x7D:
- {
- if( (nOp & 0x1F) == 0x1B )
- STARTTOKENCLASS( "Area3d" );
- else
- STARTTOKENCLASS( "Area3dErr" );
-
- UINT16 nXti, nRow1, nCol1, nRow2, nCol2;
- *pIn >> nXti >> nRow1 >> nRow2 >> nCol1 >> nCol2;
- AddRangeRef( aOperand, nRow1, nCol1, nRow2, nCol2, bRangeName, nXti );
- t += "3D area ref Xti!C/R:C/R="; __AddHex( t, nXti );
- t += '!'; __AddHex( t, nCol1 );
- t += '/'; __AddHex( t, nRow1 );
- t += ':'; __AddHex( t, nCol2 );
- t += '/'; __AddHex( t, nRow2 );
- t += ' '; t += aOperand;
- aStack.PushOperand( aOperand, nOp );
- }
- break;
- default:
- STARTTOKEN( "unknown" );
- bError = TRUE;
- }
- PRINTTOKEN();
- }
- t.Assign( " Formula = " );
- if( aStack.GetFormula().Len() ) t += aStack.GetFormula(); else t += "ERROR IN STACK";
- Print( t );
- t.Assign( " Tokencl = " ).Append( aStack.GetTokenClasses() );
- Print( t );
- pIn->Seek( nAfterPos );
-}
-
-
-// ============================================================================
-//
-// S T R E A M C O N T E N T S
-//
-// ============================================================================
-
-void Biff8RecDumper::DumpBinary( SvStream& rInStrm, ULONG nSize )
-{
- ULONG nStrmPos = rInStrm.Tell();
- rInStrm.Seek( STREAM_SEEK_TO_END );
- ULONG nStrmLen = rInStrm.Tell();
- rInStrm.Seek( nStrmPos );
- ULONG nDumpEnd = (nSize == STREAM_SEEK_TO_END) ? nStrmLen : ::std::min( nStrmPos + nSize, nStrmLen );
-
- const ULONG LINE_SIZE = 16;
- sal_uInt8 pnData[ LINE_SIZE ];
-
- while( rInStrm.Tell() < nDumpEnd )
- {
- ByteString aBinLine;
- ByteString aTextLine;
-
- ULONG nLineLen = ::std::min( nDumpEnd - rInStrm.Tell(), LINE_SIZE );
- rInStrm.Read( pnData, nLineLen );
-
- for( sal_uInt8 *pnByte = pnData, *pnEnd = pnData + nLineLen; pnByte != pnEnd; ++pnByte )
- {
- if( pnByte - pnData == LINE_SIZE / 2 )
- {
- aBinLine.Append( ' ' );
- aTextLine.Append( ' ' );
- }
- __AddPureHex( aBinLine, *pnByte );
- aBinLine.Append( ' ' );
- aTextLine.Append( static_cast< sal_Char >( IsPrintable( *pnByte ) ? *pnByte : '.' ) );
- }
-
- aBinLine.Expand( LINE_SIZE * 3 + 3, ' ' );
- (*pDumpStream) << aBinLine.GetBuffer() << aTextLine.GetBuffer() << "\n";
- }
-}
-
-// ============================================================================
-//
-// F O R M C O N T R O L S
-//
-// ============================================================================
-
-namespace {
-
-// little helpers -------------------------------------------------------------
-
-/** Import from bytestream. */
-SvStream& operator>>( SvStream& rStrm, XclGuid& rGuid )
-{
- rStrm.Read( rGuid.mpnData, 16 );
- return rStrm;
-}
-
-/** Output guid into text stream. */
-SvStream& operator<<( SvStream& rStrm, const XclGuid& rGuid )
-{
- ByteString aOut;
- lclAppendGuid( aOut, rGuid );
- return rStrm << aOut.GetBuffer();
-}
-
-void lclAlignStream( SvStream& rInStrm, ULONG nStartPos, ULONG nDataWidth )
-{
- rInStrm.SeekRel( nDataWidth - 1 - (rInStrm.Tell() - nStartPos + nDataWidth - 1) % nDataWidth );
-}
-
-// control types --------------------------------------------------------------
-
-const sal_uInt16 EXC_CTRL_PAGE = 0x0007;
-const sal_uInt16 EXC_CTRL_IMAGE = 0x000C;
-const sal_uInt16 EXC_CTRL_FRAME = 0x000E;
-const sal_uInt16 EXC_CTRL_SPINBUTTON = 0x0010;
-const sal_uInt16 EXC_CTRL_PUSHBUTTON = 0x0011;
-const sal_uInt16 EXC_CTRL_TABSTRIP = 0x0012;
-const sal_uInt16 EXC_CTRL_LABEL = 0x0015;
-const sal_uInt16 EXC_CTRL_TEXTBOX = 0x0017;
-const sal_uInt16 EXC_CTRL_LISTBOX = 0x0018;
-const sal_uInt16 EXC_CTRL_COMBOBOX = 0x0019;
-const sal_uInt16 EXC_CTRL_CHECKBOX = 0x001A;
-const sal_uInt16 EXC_CTRL_OPTIONBUTTON = 0x001B;
-const sal_uInt16 EXC_CTRL_TOGGLEBUTTON = 0x001C;
-const sal_uInt16 EXC_CTRL_SCROLLBAR = 0x002F;
-const sal_uInt16 EXC_CTRL_MULTIPAGE = 0x0039;
-const sal_uInt16 EXC_CTRL_REFEDIT = 0x8000;
-const sal_uInt16 EXC_CTRL_FONTDATA = 0xFFF0; // internal use only
-const sal_uInt16 EXC_CTRL_USERFORM = 0xFFF1; // internal use only
-const sal_uInt16 EXC_CTRL_ADDDATA = 0xFFF2; // internal use only
-const sal_uInt16 EXC_CTRL_FRAMECHILD = 0xFFF3; // internal use only
-const sal_uInt16 EXC_CTRL_PROGRESSBAR = 0xFFF4; // internal use only
-const sal_uInt16 EXC_CTRL_UNKNOWN = 0xFFFF; // internal use only
-
-const sal_uInt16 EXC_CTRL_RECORD_ID = 0x0000;
-const sal_uInt16 EXC_CTRL_CLIENT_ID = 0x0200;
-const sal_uInt16 EXC_CTRL_CONTAINER_ID = 0x0400;
-
-// control names --------------------------------------------------------------
-
-struct XclDumpControlInfo
-{
- sal_uInt16 mnType;
- const sal_Char* mpcName;
- sal_uInt16 mnId;
-};
-
-static const XclDumpControlInfo spControlInfos[] =
-{
- { EXC_CTRL_PAGE, "Page", EXC_CTRL_CONTAINER_ID },
- { EXC_CTRL_IMAGE, "Image", EXC_CTRL_CLIENT_ID },
- { EXC_CTRL_FRAME, "Frame", EXC_CTRL_CLIENT_ID },
- { EXC_CTRL_SPINBUTTON, "Spin", EXC_CTRL_CLIENT_ID },
- { EXC_CTRL_PUSHBUTTON, "PushButton", EXC_CTRL_CLIENT_ID },
- { EXC_CTRL_TABSTRIP, "TabStrip", EXC_CTRL_CLIENT_ID },
- { EXC_CTRL_LABEL, "Label", EXC_CTRL_CLIENT_ID },
- { EXC_CTRL_TEXTBOX, "TextBox", EXC_CTRL_CLIENT_ID },
- { EXC_CTRL_LISTBOX, "ListBox", EXC_CTRL_CLIENT_ID },
- { EXC_CTRL_COMBOBOX, "ComboBox", EXC_CTRL_CLIENT_ID },
- { EXC_CTRL_CHECKBOX, "CheckBox", EXC_CTRL_CLIENT_ID },
- { EXC_CTRL_OPTIONBUTTON, "OptionButton", EXC_CTRL_CLIENT_ID },
- { EXC_CTRL_TOGGLEBUTTON, "ToggleButton", EXC_CTRL_CLIENT_ID },
- { EXC_CTRL_SCROLLBAR, "ScrollBar", EXC_CTRL_CLIENT_ID },
- { EXC_CTRL_MULTIPAGE, "MultiPage", EXC_CTRL_CLIENT_ID },
- { EXC_CTRL_REFEDIT, "RefEdit", EXC_CTRL_CLIENT_ID },
- { EXC_CTRL_FONTDATA, "FontData", EXC_CTRL_CLIENT_ID },
- { EXC_CTRL_USERFORM, "UserForm", EXC_CTRL_CONTAINER_ID },
- { EXC_CTRL_ADDDATA, "AddData", EXC_CTRL_RECORD_ID },
- { EXC_CTRL_FRAMECHILD, "FrameChild", EXC_CTRL_RECORD_ID },
- { EXC_CTRL_PROGRESSBAR, "ProgressBar", EXC_CTRL_RECORD_ID }
-};
-
-typedef ::std::map< sal_uInt16, const XclDumpControlInfo* > XclDumpControlInfoMap;
-typedef ScfRef< XclDumpControlInfoMap > XclDumpControlInfoMapRef;
-
-XclDumpControlInfoMapRef lclCreateControlInfoMap()
-{
- XclDumpControlInfoMapRef xMap( new XclDumpControlInfoMap );
- for( const XclDumpControlInfo *pIt = spControlInfos, *pEnd = STATIC_TABLE_END( spControlInfos ); pIt != pEnd; ++pIt )
- (*xMap)[ pIt->mnType ] = pIt;
- return xMap;
-}
-
-const XclDumpControlInfoMap& lclGetControlInfoMap()
-{
- static const XclDumpControlInfoMapRef sxMap = lclCreateControlInfoMap();
- return *sxMap;
-}
-
-void lclAppendControlType( ByteString& rStr, sal_uInt16 nCtrlType )
-{
- const XclDumpControlInfoMap& rMap = lclGetControlInfoMap();
- XclDumpControlInfoMap::const_iterator aIt = rMap.find( nCtrlType );
- rStr.Append( (aIt == rMap.end()) ? "*UNKNOWN*" : aIt->second->mpcName );
-}
-
-void lclDumpControlType( SvStream& rOutStrm, sal_uInt16 nCtrlType )
-{
- ByteString aTitle( "type=" );
- lclAppendHex( aTitle, nCtrlType );
- aTitle.Append( " (" );
- lclAppendControlType( aTitle, nCtrlType );
- aTitle.Append( ')' );
- rOutStrm << aTitle.GetBuffer();
-}
-
-sal_uInt16 lclDumpControlHeader( SvStream& rInStrm, SvStream& rOutStrm, sal_uInt16 nCtrlType )
-{
- lclDumpControlType( rOutStrm, nCtrlType );
- sal_uInt16 nId, nSize;
- rInStrm >> nId >> nSize;
- ByteString aLine( " id=" ); lclAppendHex( aLine, nId );
- const XclDumpControlInfoMap& rMap = lclGetControlInfoMap();
- XclDumpControlInfoMap::const_iterator aIt = rMap.find( nCtrlType );
- bool bValid = (aIt != rMap.end()) && (aIt->second->mnId == nId);
- aLine.Append( bValid ? " (valid)" : " (invalid)" );
- aLine.Append( " size=" ); lclAppendHex( aLine, nSize );
- rOutStrm << aLine.GetBuffer() << "\n";
- return nSize;
-}
-
-// control GUIDs --------------------------------------------------------------
-
-struct XclDumpControlGuid
-{
- sal_uInt16 mnType;
- sal_uInt32 mnGuidData1;
- sal_uInt16 mnGuidData2;
- sal_uInt16 mnGuidData3;
- sal_uInt8 mnGuidData41;
- sal_uInt8 mnGuidData42;
- sal_uInt8 mnGuidData43;
- sal_uInt8 mnGuidData44;
- sal_uInt8 mnGuidData45;
- sal_uInt8 mnGuidData46;
- sal_uInt8 mnGuidData47;
- sal_uInt8 mnGuidData48;
-};
-
-static const XclDumpControlGuid spControlGuids[] =
-{
- { EXC_CTRL_PUSHBUTTON, 0xD7053240, 0xCE69, 0x11CD, 0xA7, 0x77, 0x00, 0xDD, 0x01, 0x14, 0x3C, 0x57 },
- { EXC_CTRL_TOGGLEBUTTON, 0x8BD21D60, 0xEC42, 0x11CE, 0x9E, 0x0D, 0x00, 0xAA, 0x00, 0x60, 0x02, 0xF3 },
- { EXC_CTRL_CHECKBOX, 0x8BD21D40, 0xEC42, 0x11CE, 0x9E, 0x0D, 0x00, 0xAA, 0x00, 0x60, 0x02, 0xF3 },
- { EXC_CTRL_OPTIONBUTTON, 0x8BD21D50, 0xEC42, 0x11CE, 0x9E, 0x0D, 0x00, 0xAA, 0x00, 0x60, 0x02, 0xF3 },
- { EXC_CTRL_LABEL, 0x978C9E23, 0xD4B0, 0x11CE, 0xBF, 0x2D, 0x00, 0xAA, 0x00, 0x3F, 0x40, 0xD0 },
- { EXC_CTRL_TEXTBOX, 0x8BD21D10, 0xEC42, 0x11CE, 0x9E, 0x0D, 0x00, 0xAA, 0x00, 0x60, 0x02, 0xF3 },
- { EXC_CTRL_LISTBOX, 0x8BD21D20, 0xEC42, 0x11CE, 0x9E, 0x0D, 0x00, 0xAA, 0x00, 0x60, 0x02, 0xF3 },
- { EXC_CTRL_COMBOBOX, 0x8BD21D30, 0xEC42, 0x11CE, 0x9E, 0x0D, 0x00, 0xAA, 0x00, 0x60, 0x02, 0xF3 },
- { EXC_CTRL_SPINBUTTON, 0x79176FB0, 0xB7F2, 0x11CE, 0x97, 0xEF, 0x00, 0xAA, 0x00, 0x6D, 0x27, 0x76 },
- { EXC_CTRL_SCROLLBAR, 0xDFD181E0, 0x5E2F, 0x11CE, 0xA4, 0x49, 0x00, 0xAA, 0x00, 0x4A, 0x80, 0x3D },
- { EXC_CTRL_IMAGE, 0x4C599241, 0x6926, 0x101B, 0x99, 0x92, 0x00, 0x00, 0x0B, 0x65, 0xC6, 0xF9 },
- { EXC_CTRL_PROGRESSBAR, 0x35053A22, 0x8589, 0x11D1, 0xB1, 0x6A, 0x00, 0xC0, 0xF0, 0x28, 0x36, 0x28 }
-};
-
-typedef ::std::map< XclGuid, sal_uInt16 > XclDumpControlGuidMap;
-typedef ScfRef< XclDumpControlGuidMap > XclDumpControlGuidMapRef;
-
-XclDumpControlGuidMapRef lclCreateControlGuidMap()
-{
- XclDumpControlGuidMapRef xMap( new XclDumpControlGuidMap );
- for( const XclDumpControlGuid *pIt = spControlGuids, *pEnd = STATIC_TABLE_END( spControlGuids ); pIt != pEnd; ++pIt )
- {
- XclGuid aGuid( pIt->mnGuidData1, pIt->mnGuidData2, pIt->mnGuidData3,
- pIt->mnGuidData41, pIt->mnGuidData42, pIt->mnGuidData43, pIt->mnGuidData44,
- pIt->mnGuidData45, pIt->mnGuidData46, pIt->mnGuidData47, pIt->mnGuidData48 );
- (*xMap)[ aGuid ] = pIt->mnType;
- }
- return xMap;
-}
-
-const XclDumpControlGuidMap& lclGetControlGuidMap()
-{
- static const XclDumpControlGuidMapRef sxMap = lclCreateControlGuidMap();
- return *sxMap;
-}
-
-sal_uInt16 lclDumpControlGuid( SvStream& rInStrm, SvStream& rOutStrm )
-{
- XclGuid aGuid;
- rInStrm >> aGuid;
- const XclDumpControlGuidMap& rMap = lclGetControlGuidMap();
- XclDumpControlGuidMap::const_iterator aIt = rMap.find( aGuid );
- sal_uInt16 nCtrlType = (aIt == rMap.end()) ? EXC_CTRL_UNKNOWN : aIt->second;
- rOutStrm << "guid=" << aGuid;
- return nCtrlType;
-};
-
-// other guids ----------------------------------------------------------------
-
-static const XclGuid saStdFontGuid( 0x0BE35203, 0x8F91, 0x11CE, 0x9D, 0xE3, 0x00, 0xAA, 0x00, 0x4B, 0xB8, 0x51 );
-static const XclGuid saStdPicGuid( 0x0BE35204, 0x8F91, 0x11CE, 0x9D, 0xE3, 0x00, 0xAA, 0x00, 0x4B, 0xB8, 0x51 );\
-
-// ----------------------------------------------------------------------------
-
-} // namespace
-
-// *** yet some other ugly macros for the specials of form control dumping ***
-
-// align the instream
-#define EXC_CTRLDUMP_ALIGN_INSTRM( val ) lclAlignStream( rInStrm, nStartPos, val )
-// push the string to outstream
-#define EXC_CTRLDUMP_PRINT() { if( t.Len() ) { rOutStrm << t.GetBuffer() << '\n'; t.Erase(); } }
-
-// implementation, don't use
-#define IMPL_EXC_CTRLDUMP_PLAIN_VALUE( type, func, text ) { type n; rInStrm >> n; t.Append( " " text "=" ); func( t, n ); EXC_CTRLDUMP_PRINT(); }
-#define IMPL_EXC_CTRLDUMP_VALUE( type, func, text ) { EXC_CTRLDUMP_ALIGN_INSTRM( sizeof( type ) ); IMPL_EXC_CTRLDUMP_PLAIN_VALUE( type, func, text ); }
-#define IMPL_EXC_CTRLDUMP_PLAIN_VAR( var, mask, func, text ) { rInStrm >> var; var &= (mask); t.Append( " " text "=" ); func( t, var ); EXC_CTRLDUMP_PRINT(); }
-#define IMPL_EXC_CTRLDUMP_VAR( var, mask, func, text ) { EXC_CTRLDUMP_ALIGN_INSTRM( sizeof( var ) ); IMPL_EXC_CTRLDUMP_PLAIN_VAR( var, mask, func, text ); }
-
-// read a value from stream (no stream alignment)
-#define EXC_CTRLDUMP_PLAIN_HEX4( text ) IMPL_EXC_CTRLDUMP_PLAIN_VALUE( sal_uInt32, lclAppendHex, text )
-#define EXC_CTRLDUMP_PLAIN_DEC4( text ) IMPL_EXC_CTRLDUMP_PLAIN_VALUE( sal_Int32, lclAppendDec, text )
-#define EXC_CTRLDUMP_PLAIN_HEX2( text ) IMPL_EXC_CTRLDUMP_PLAIN_VALUE( sal_uInt16, lclAppendHex, text )
-#define EXC_CTRLDUMP_PLAIN_DEC2( text ) IMPL_EXC_CTRLDUMP_PLAIN_VALUE( sal_Int16, lclAppendDec, text )
-#define EXC_CTRLDUMP_PLAIN_HEX1( text ) IMPL_EXC_CTRLDUMP_PLAIN_VALUE( sal_uInt8, lclAppendHex, text )
-#define EXC_CTRLDUMP_PLAIN_DEC1( text ) IMPL_EXC_CTRLDUMP_PLAIN_VALUE( sal_Int8, lclAppendDec, text )
-#define EXC_CTRLDUMP_PLAIN_DECF( text ) IMPL_EXC_CTRLDUMP_PLAIN_VALUE( float, lclAppendDec, text )
-// read a value from stream (with stream alignment)
-#define EXC_CTRLDUMP_HEX4( text ) IMPL_EXC_CTRLDUMP_VALUE( sal_uInt32, lclAppendHex, text )
-#define EXC_CTRLDUMP_DEC4( text ) IMPL_EXC_CTRLDUMP_VALUE( sal_Int32, lclAppendDec, text )
-#define EXC_CTRLDUMP_HEX2( text ) IMPL_EXC_CTRLDUMP_VALUE( sal_uInt16, lclAppendHex, text )
-#define EXC_CTRLDUMP_DEC2( text ) IMPL_EXC_CTRLDUMP_VALUE( sal_Int16, lclAppendDec, text )
-#define EXC_CTRLDUMP_HEX1( text ) IMPL_EXC_CTRLDUMP_VALUE( sal_uInt8, lclAppendHex, text )
-#define EXC_CTRLDUMP_DEC1( text ) IMPL_EXC_CTRLDUMP_VALUE( sal_Int8, lclAppendDec, text )
-// read a value from stream into existing variable (no stream alignment)
-#define EXC_CTRLDUMP_PLAIN_HEXVAR( var, text ) IMPL_EXC_CTRLDUMP_PLAIN_VAR( var, ~0, lclAppendHex, text )
-#define EXC_CTRLDUMP_PLAIN_DECVAR( var, text ) IMPL_EXC_CTRLDUMP_PLAIN_VAR( var, ~0, lclAppendDec, text )
-#define EXC_CTRLDUMP_PLAIN_HEXVARMASK( var, mask, text ) IMPL_EXC_CTRLDUMP_PLAIN_VAR( var, mask, lclAppendHex, text )
-#define EXC_CTRLDUMP_PLAIN_DECVARMASK( var, mask, text ) IMPL_EXC_CTRLDUMP_PLAIN_VAR( var, mask, lclAppendDec, text )
-// read a value from stream into existing variable (with stream alignment)
-#define EXC_CTRLDUMP_HEXVAR( var, text ) IMPL_EXC_CTRLDUMP_VAR( var, ~0, lclAppendHex, text )
-#define EXC_CTRLDUMP_DECVAR( var, text ) IMPL_EXC_CTRLDUMP_VAR( var, ~0, lclAppendDec, text )
-#define EXC_CTRLDUMP_HEXVARMASK( var, mask, text ) IMPL_EXC_CTRLDUMP_VAR( var, mask, lclAppendHex, text )
-#define EXC_CTRLDUMP_DECVARMASK( var, mask, text ) IMPL_EXC_CTRLDUMP_VAR( var, mask, lclAppendDec, text )
-// read flag fields
-#define EXC_CTRLDUMP_PLAIN_STARTOPTFLAG( text, doread, defaults )\
-{ \
- nFlags = defaults; \
- t.Append( " " text ); \
- if( doread ) \
- rInStrm >> nFlags; \
- else \
- t.Append( "-defaulted" ); \
- t.Append( '=' ); \
- lclAppendHex( t, nFlags ); \
-}
-#define EXC_CTRLDUMP_STARTOPTFLAG( text, doread, defaults ) { if( doread ) { EXC_CTRLDUMP_ALIGN_INSTRM( sizeof( nFlags ) ); } EXC_CTRLDUMP_PLAIN_STARTOPTFLAG( text, doread, defaults ) }
-#define EXC_CTRLDUMP_PLAIN_STARTFLAG( text ) EXC_CTRLDUMP_PLAIN_STARTOPTFLAG( text, true, 0 )
-#define EXC_CTRLDUMP_STARTFLAG( text ) EXC_CTRLDUMP_STARTOPTFLAG( text, true, 0 )
-#define EXC_CTRLDUMP_ADDFLAG( flag, text ) { if( nFlags & (flag) ) t.Append( " " text ); }
-#define EXC_CTRLDUMP_ADDFLAGVALUE( start, width, text ) { sal_uInt32 nValue; ::extract_value( nValue, nFlags, start, width ); t.Append( " " text "=" ); lclAppendDec( t, nValue ); }
-#define EXC_CTRLDUMP_ENDFLAG( reserved ) { if( nFlags & (reserved) ) { t.Append( " ?" ); lclAppendHex( t, static_cast< sal_uInt32 >( nFlags & (reserved) ) ); } EXC_CTRLDUMP_PRINT(); }
-// read coordinates
-#define EXC_CTRLDUMP_COORD2( text ) { EXC_CTRLDUMP_ALIGN_INSTRM( 4 ); EXC_CTRLDUMP_DEC2( text "-x" ); EXC_CTRLDUMP_DEC2( text "-y" ); }
-#define EXC_CTRLDUMP_COORD4( text ) { EXC_CTRLDUMP_DEC4( text "-x" ); EXC_CTRLDUMP_DEC4( text "-y" ); }
-#define EXC_CTRLDUMP_SIZE4( text ) { EXC_CTRLDUMP_DEC4( text "-width" ); EXC_CTRLDUMP_DEC4( text "-height" ); }
-// read guid
-#define EXC_CTRLDUMP_PLAIN_GUID( text ) IMPL_EXC_CTRLDUMP_PLAIN_VALUE( XclGuid, lclAppendGuid, text )
-#define EXC_CTRLDUMP_GUID( text ) { EXC_CTRLDUMP_ALIGN_INSTRM( 4 ); EXC_CTRLDUMP_PLAIN_GUID( text ); }
-// read control type
-#define EXC_CTRLDUMP_CTRLTYPE( var, text ) \
-{ \
- EXC_CTRLDUMP_ALIGN_INSTRM( 2 ); \
- rInStrm >> var; \
- t.Assign( " " text "=" ); lclAppendHex( t, var ); \
- t.Append( " (" ); lclAppendControlType( t, var ); \
- t.Append( ')' ); \
- EXC_CTRLDUMP_PRINT(); \
-}
-// read character array, add to string, but do not print
-#define EXC_CTRLDUMP_RAWSTRING( var ) \
-{ \
- t.Append( "='" ); \
- if( var ) \
- { \
- EXC_CTRLDUMP_ALIGN_INSTRM( 4 ); \
- ULONG nNextPos = rInStrm.Tell() + (var); \
- if( var > 128 ) var = 128; \
- sal_Char pc[ 129 ]; \
- rInStrm.Read( pc, var ); pc[ var ] = '\0'; \
- t.Append( pc ); \
- rInStrm.Seek( nNextPos ); \
- } \
- t.Append( '\'' ); \
-}
-// read a string
-#define EXC_CTRLDUMP_STRING( var, text ) \
-{ \
- t.Append( " " text ); \
- EXC_CTRLDUMP_RAWSTRING( var ); \
- EXC_CTRLDUMP_PRINT(); \
-}
-// read an array of strings
-#define EXC_CTRLDUMP_STRINGARRAY( total, count, text ) \
-{ \
- ULONG nNextPos = rInStrm.Tell() + (total); \
- for( sal_uInt32 nIdx = 0; (nIdx < (count)) && (rInStrm.Tell() < nNextPos); ++nIdx )\
- { \
- EXC_CTRLDUMP_ALIGN_INSTRM( 4 ); \
- sal_uInt32 nLen; \
- rInStrm >> nLen; \
- nLen &= 0x7FFFFFFF; \
- t.Append( " " text "[" ); \
- lclAppendDec( t, nIdx + 1 ); \
- t.Append( ']' ); \
- EXC_CTRLDUMP_RAWSTRING( nLen ); \
- } \
- EXC_CTRLDUMP_PRINT(); \
- rInStrm.Seek( nNextPos ); \
-}
-// read embedded font data
-#define EXC_CTRLDUMP_FONT( var, text ) \
-if( var ) \
-{ \
- EXC_CTRLDUMP_PRINT(); \
- XclGuid aGuid; rInStrm >> aGuid; \
- rOutStrm << "embedded-font-guid=" << aGuid; \
- if( aGuid == saStdFontGuid ) \
- { \
- rOutStrm << " (StdFont)\n"; \
- EXC_CTRLDUMP_PLAIN_HEX1( "unknown1" ); \
- EXC_CTRLDUMP_PLAIN_DEC1( "script-type" ); \
- EXC_CTRLDUMP_PLAIN_HEX1( "unknown2" ); \
- sal_uInt8 nFlags; \
- EXC_CTRLDUMP_PLAIN_STARTFLAG( "font-style-flags" ); \
- EXC_CTRLDUMP_ADDFLAG( 0x02, "italic" ); \
- EXC_CTRLDUMP_ADDFLAG( 0x04, "underline" ); \
- EXC_CTRLDUMP_ADDFLAG( 0x08, "strikeout" ); \
- EXC_CTRLDUMP_ENDFLAG( 0xF1 ); \
- EXC_CTRLDUMP_PLAIN_DEC2( "font-weight" ); \
- EXC_CTRLDUMP_PLAIN_DEC4( "font-size" ); \
-/* font-size := pt*10000 + (1-((pt+1)%3))*2500 */ \
- sal_uInt8 nLen; \
- EXC_CTRLDUMP_PLAIN_DECVAR( nLen, "font-name-len" ); \
- sal_Char* p = new sal_Char[ nLen + 1 ]; \
- rInStrm.Read( p, nLen ); p[ nLen ] = '\0'; \
- t.Append( " font-name='" ).Append( p ).Append( '\'' );\
- delete [] p; \
- EXC_CTRLDUMP_PRINT(); \
- } \
- else \
- rOutStrm << " (*UNKNOWN*)\n"; \
-}
-// read image data
-#define EXC_CTRLDUMP_IMAGE( var, text ) \
-if( var ) \
-{ \
- EXC_CTRLDUMP_PRINT(); \
- XclGuid aGuid; rInStrm >> aGuid; \
- rOutStrm << "embedded-" text "-guid=" << aGuid; \
- if( aGuid == saStdPicGuid ) \
- { \
- rOutStrm << " (StdPict)\n"; \
- EXC_CTRLDUMP_PLAIN_HEX2( "u1" ); \
- EXC_CTRLDUMP_PLAIN_HEX2( "u2" ); \
- sal_uInt32 nLen; \
- EXC_CTRLDUMP_PLAIN_DECVAR( nLen, text "-len" ); \
- rInStrm.SeekRel( nLen ); \
- } \
- else \
- rOutStrm << " (*UNKNOWN*)\n"; \
-}
-// hex dump remaining or unknown data
-#define EXC_CTRLDUMP_REMAINING( nextpos ) \
-{ \
- EXC_CTRLDUMP_ALIGN_INSTRM( 4 ); \
- if( rInStrm.Tell() < (nextpos) ) \
- { \
- rOutStrm << " unknown-data=\n"; \
- DumpBinary( rInStrm, ::std::min< ULONG >( (nextpos) - rInStrm.Tell(), 1024 ) );\
- } \
- rInStrm.Seek( nextpos ); \
-}
-
-// *** macros end ***
-
-void Biff8RecDumper::DumpControlContents( SvStream& rInStrm, sal_uInt16 nCtrlType )
-{
- SvStream& rOutStrm = *pDumpStream;
-
- if( nCtrlType == EXC_CTRL_PROGRESSBAR )
- {
- lclDumpControlType( rOutStrm, nCtrlType );
- rOutStrm << '\n';
-
- ByteString t; // "t" needed for macros
- sal_uInt32 nFlags = 0; // "nFlags" needed for macros
-
- EXC_CTRLDUMP_PLAIN_HEX4( "unknown" );
- EXC_CTRLDUMP_PLAIN_HEX4( "unknown" );
- EXC_CTRLDUMP_PLAIN_DEC4( "width" );
- EXC_CTRLDUMP_PLAIN_DEC4( "height" );
- EXC_CTRLDUMP_PLAIN_HEX4( "unknown" );
- EXC_CTRLDUMP_PLAIN_HEX4( "unknown" );
- EXC_CTRLDUMP_PLAIN_HEX4( "unknown" );
- EXC_CTRLDUMP_PLAIN_DECF( "min" );
- EXC_CTRLDUMP_PLAIN_DECF( "max" );
- EXC_CTRLDUMP_PLAIN_STARTFLAG( "flags1" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000001, "vertical" );
- EXC_CTRLDUMP_ADDFLAG( 0x00010000, "smooth-scroll" );
- EXC_CTRLDUMP_ENDFLAG( 0xFFFEFFFE );
- EXC_CTRLDUMP_PLAIN_HEX4( "unknown" );
- EXC_CTRLDUMP_PLAIN_HEX4( "unknown" );
- EXC_CTRLDUMP_PLAIN_HEX4( "unknown" );
- EXC_CTRLDUMP_PLAIN_STARTFLAG( "flags2" );
- EXC_CTRLDUMP_ADDFLAG( 0x0001, "border-single" );
- EXC_CTRLDUMP_ADDFLAG( 0x0002, "enabled" );
- EXC_CTRLDUMP_ADDFLAG( 0x0004, "3d-style" );
- EXC_CTRLDUMP_ADDFLAGVALUE( 3, 8, "mouse-icon" );
- EXC_CTRLDUMP_ADDFLAG( 0x2000, "ole-drop-manual" );
- EXC_CTRLDUMP_ENDFLAG( 0xFFFFD800 );
- return;
- }
-
- sal_uInt16 nSize = lclDumpControlHeader( rInStrm, rOutStrm, nCtrlType );
- if( nSize > 0 )
- {
- ULONG nStartPos = rInStrm.Tell(); // for stream alignment macro
- ByteString t; // "t" needed for macros
- sal_uInt32 nFlags = 0; // "nFlags" needed for macros
-
- bool bHasFontData = false;
- sal_uInt32 nNameLen = 0;
- sal_uInt32 nCaptionLen = 0;
- sal_uInt32 nValueLen = 0;
- sal_uInt32 nGroupNameLen = 0;
- sal_uInt32 nTagLen = 0;
- sal_uInt32 nTipLen = 0;
- sal_uInt32 nCtrlIdLen = 0;
- sal_uInt32 nCtrlSrcLen = 0;
- sal_uInt32 nRowSrcLen = 0;
- sal_uInt16 nPic = 0;
- sal_uInt16 nIcon = 0;
- sal_uInt16 nFont = 0;
-
- switch( nCtrlType )
- {
- case EXC_CTRL_PUSHBUTTON:
- {
- EXC_CTRLDUMP_STARTFLAG( "content-flags" );
- EXC_CTRLDUMP_ADDFLAG( 0x0001, "forecolor" );
- EXC_CTRLDUMP_ADDFLAG( 0x0002, "backcolor" );
- EXC_CTRLDUMP_ADDFLAG( 0x0004, "option" );
- EXC_CTRLDUMP_ADDFLAG( 0x0008, "caption" );
- EXC_CTRLDUMP_ADDFLAG( 0x0010, "picpos" );
- EXC_CTRLDUMP_ADDFLAG( 0x0020, "size" );
- EXC_CTRLDUMP_ADDFLAG( 0x0040, "mouseptr" );
- EXC_CTRLDUMP_ADDFLAG( 0x0080, "pic" );
- EXC_CTRLDUMP_ADDFLAG( 0x0100, "accel" );
- EXC_CTRLDUMP_ADDFLAG( 0x0200, "notakefocus" );
- EXC_CTRLDUMP_ADDFLAG( 0x0400, "icon" );
- EXC_CTRLDUMP_ENDFLAG( 0xFFFFF800 );
- sal_uInt32 nCtrlFlags = nFlags;
-
- if( nCtrlFlags & 0x0001 ) EXC_CTRLDUMP_HEX4( "forecolor" );
- if( nCtrlFlags & 0x0002 ) EXC_CTRLDUMP_HEX4( "backcolor" );
-
- EXC_CTRLDUMP_STARTOPTFLAG( "option-flags", nCtrlFlags & 0x0004, 0x0000001B );
- EXC_CTRLDUMP_ADDFLAG( 0x00000002, "enabled" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000004, "locked" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000008, "opaque" );
- EXC_CTRLDUMP_ADDFLAG( 0x00800000, "wordwrap" );
- EXC_CTRLDUMP_ADDFLAG( 0x10000000, "autosize" );
- EXC_CTRLDUMP_ENDFLAG( 0xEF7FFFF1 );
-
- if( nCtrlFlags & 0x0008 ) EXC_CTRLDUMP_DECVARMASK( nCaptionLen, 0x7FFFFFFF, "caption-len" );
- if( nCtrlFlags & 0x0010 ) EXC_CTRLDUMP_COORD2( "picpos" );
- if( nCtrlFlags & 0x0040 ) EXC_CTRLDUMP_DEC1( "mouseptr" );
- if( nCtrlFlags & 0x0080 ) EXC_CTRLDUMP_HEXVAR( nPic, "pic" );
- if( nCtrlFlags & 0x0100 ) EXC_CTRLDUMP_HEX2( "accel" );
- if( nCtrlFlags & 0x0400 ) EXC_CTRLDUMP_HEXVAR( nIcon, "icon" );
-
- if( nCtrlFlags & 0x0008 ) EXC_CTRLDUMP_STRING( nCaptionLen, "caption" );
- if( nCtrlFlags & 0x0020 ) EXC_CTRLDUMP_SIZE4( "size" );
- EXC_CTRLDUMP_REMAINING( nStartPos + nSize );
-
- EXC_CTRLDUMP_IMAGE( nPic, "pic" );
- EXC_CTRLDUMP_IMAGE( nIcon, "icon" );
- bHasFontData = true;
- }
- break;
-
- case EXC_CTRL_TOGGLEBUTTON:
- case EXC_CTRL_CHECKBOX:
- case EXC_CTRL_OPTIONBUTTON:
- case EXC_CTRL_TEXTBOX:
- case EXC_CTRL_LISTBOX:
- case EXC_CTRL_COMBOBOX:
- case EXC_CTRL_REFEDIT:
- {
- EXC_CTRLDUMP_STARTFLAG( "content-flags" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000001, "option" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000002, "backcolor" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000004, "forecolor" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000008, "maxlen" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000010, "borderstyle" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000020, "scrollbars" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000040, "style" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000080, "mouseptr" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000100, "size" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000200, "passwordchar" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000400, "listwidth" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000800, "boundcol" );
- EXC_CTRLDUMP_ADDFLAG( 0x00001000, "textcol" );
- EXC_CTRLDUMP_ADDFLAG( 0x00002000, "colcount" );
- EXC_CTRLDUMP_ADDFLAG( 0x00004000, "listrows" );
- EXC_CTRLDUMP_ADDFLAG( 0x00008000, "colwidth?" );
- EXC_CTRLDUMP_ADDFLAG( 0x00010000, "matchentry" );
- EXC_CTRLDUMP_ADDFLAG( 0x00020000, "liststyle" );
- EXC_CTRLDUMP_ADDFLAG( 0x00040000, "showdropbtn" );
- EXC_CTRLDUMP_ADDFLAG( 0x00100000, "dropbtnstyle" );
- EXC_CTRLDUMP_ADDFLAG( 0x00200000, "multistate" );
- EXC_CTRLDUMP_ADDFLAG( 0x00400000, "value" );
- EXC_CTRLDUMP_ADDFLAG( 0x00800000, "caption" );
- EXC_CTRLDUMP_ADDFLAG( 0x01000000, "picpos" );
- EXC_CTRLDUMP_ADDFLAG( 0x02000000, "bordercolor" );
- EXC_CTRLDUMP_ADDFLAG( 0x04000000, "specialeff" );
- EXC_CTRLDUMP_ADDFLAG( 0x08000000, "icon" );
- EXC_CTRLDUMP_ADDFLAG( 0x10000000, "pic" );
- EXC_CTRLDUMP_ADDFLAG( 0x20000000, "accel" );
- EXC_CTRLDUMP_ENDFLAG( 0x40080000 ); // 0x80000000 always set?
- sal_uInt32 nCtrlFlags = nFlags;
-
- EXC_CTRLDUMP_STARTFLAG( "2nd-content-flags" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000001, "groupname" );
- EXC_CTRLDUMP_ENDFLAG( 0xFFFFFFFE );
- sal_uInt32 nCtrlFlags2 = nFlags;
-
- EXC_CTRLDUMP_STARTOPTFLAG( "option-flags", nCtrlFlags & 0x00000001, 0x2C80081B );
- EXC_CTRLDUMP_ADDFLAG( 0x00000002, "enabled" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000004, "locked" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000008, "opaque" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000400, "colheads" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000800, "intheight" );
- EXC_CTRLDUMP_ADDFLAG( 0x00001000, "matchreq" );
- EXC_CTRLDUMP_ADDFLAG( 0x00002000, "align" );
- EXC_CTRLDUMP_ADDFLAGVALUE( 15, 4, "ime-mode" );
- EXC_CTRLDUMP_ADDFLAG( 0x00080000, "dragbehav" );
- EXC_CTRLDUMP_ADDFLAG( 0x00100000, "enterkeybehav" );
- EXC_CTRLDUMP_ADDFLAG( 0x00200000, "enterfieldbehav" );
- EXC_CTRLDUMP_ADDFLAG( 0x00400000, "tabkeybehav" );
- EXC_CTRLDUMP_ADDFLAG( 0x00800000, "wordwrap" );
- EXC_CTRLDUMP_ADDFLAG( 0x04000000, "selmargin" );
- EXC_CTRLDUMP_ADDFLAG( 0x08000000, "autowordsel" );
- EXC_CTRLDUMP_ADDFLAG( 0x10000000, "autosize" );
- EXC_CTRLDUMP_ADDFLAG( 0x20000000, "hidesel" );
- EXC_CTRLDUMP_ADDFLAG( 0x40000000, "autotab" );
- EXC_CTRLDUMP_ADDFLAG( 0x80000000, "multiline" );
- EXC_CTRLDUMP_ENDFLAG( 0x030043F1 );
-
- if( nCtrlFlags & 0x00000002 ) EXC_CTRLDUMP_HEX4( "backcolor" );
- if( nCtrlFlags & 0x00000004 ) EXC_CTRLDUMP_HEX4( "forecolor" );
- if( nCtrlFlags & 0x00000008 ) EXC_CTRLDUMP_DEC4( "maxlen" );
- if( nCtrlFlags & 0x00000010 ) EXC_CTRLDUMP_DEC1( "borderstyle" );
- if( nCtrlFlags & 0x00000020 ) EXC_CTRLDUMP_DEC1( "scrollbars" );
- if( nCtrlFlags & 0x00000040 ) EXC_CTRLDUMP_DEC1( "style" );
- if( nCtrlFlags & 0x00000080 ) EXC_CTRLDUMP_DEC1( "mouseptr" );
- if( nCtrlFlags & 0x00000200 ) EXC_CTRLDUMP_HEX2( "passwordchar" );
- if( nCtrlFlags & 0x00000400 ) EXC_CTRLDUMP_DEC4( "listwidth" );
- if( nCtrlFlags & 0x00000800 ) EXC_CTRLDUMP_DEC2( "boundcol" );
- if( nCtrlFlags & 0x00001000 ) EXC_CTRLDUMP_DEC2( "textcol" );
- if( nCtrlFlags & 0x00002000 ) EXC_CTRLDUMP_DEC2( "colcount" );
- if( nCtrlFlags & 0x00004000 ) EXC_CTRLDUMP_DEC2( "listrows" );
- if( nCtrlFlags & 0x00008000 ) EXC_CTRLDUMP_DEC2( "colwidth?" );
- if( nCtrlFlags & 0x00010000 ) EXC_CTRLDUMP_DEC1( "matchentry" );
- if( nCtrlFlags & 0x00020000 ) EXC_CTRLDUMP_DEC1( "liststyle" );
- if( nCtrlFlags & 0x00040000 ) EXC_CTRLDUMP_DEC1( "showdropbtn" );
- if( nCtrlFlags & 0x00100000 ) EXC_CTRLDUMP_DEC1( "dropbtnstyle" );
- if( nCtrlFlags & 0x00200000 ) EXC_CTRLDUMP_DEC1( "multistate" );
- if( nCtrlFlags & 0x00400000 ) EXC_CTRLDUMP_DECVARMASK( nValueLen, 0x7FFFFFFF, "value-len" );
- if( nCtrlFlags & 0x00800000 ) EXC_CTRLDUMP_DECVARMASK( nCaptionLen, 0x7FFFFFFF, "caption-len" );
- if( nCtrlFlags & 0x01000000 ) EXC_CTRLDUMP_COORD2( "picpos" );
- if( nCtrlFlags & 0x02000000 ) EXC_CTRLDUMP_HEX4( "bordercolor" );
- if( nCtrlFlags & 0x04000000 ) EXC_CTRLDUMP_DEC4( "specialeff" );
- if( nCtrlFlags & 0x08000000 ) EXC_CTRLDUMP_HEXVAR( nIcon, "icon" );
- if( nCtrlFlags & 0x10000000 ) EXC_CTRLDUMP_HEXVAR( nPic, "pic" );
- if( nCtrlFlags & 0x20000000 ) EXC_CTRLDUMP_HEX1( "accel" );
- if( nCtrlFlags2 & 0x00000001 ) EXC_CTRLDUMP_DECVARMASK( nGroupNameLen, 0x7FFFFFFF, "groupname-len" );
-
- if( nCtrlFlags & 0x00000100 ) EXC_CTRLDUMP_SIZE4( "size" );
- if( nCtrlFlags & 0x00400000 ) EXC_CTRLDUMP_STRING( nValueLen, "value" );
- if( nCtrlFlags & 0x00800000 ) EXC_CTRLDUMP_STRING( nCaptionLen, "caption" );
- if( nCtrlFlags2 & 0x00000001 ) EXC_CTRLDUMP_STRING( nGroupNameLen, "groupname" );
- EXC_CTRLDUMP_REMAINING( nStartPos + nSize );
-
- EXC_CTRLDUMP_IMAGE( nIcon, "icon" );
- EXC_CTRLDUMP_IMAGE( nPic, "pic" );
- bHasFontData = true;
- }
- break;
-
- case EXC_CTRL_LABEL:
- {
- EXC_CTRLDUMP_STARTFLAG( "content-flags" );
- EXC_CTRLDUMP_ADDFLAG( 0x0001, "forecolor" );
- EXC_CTRLDUMP_ADDFLAG( 0x0002, "backcolor" );
- EXC_CTRLDUMP_ADDFLAG( 0x0004, "option" );
- EXC_CTRLDUMP_ADDFLAG( 0x0008, "caption" );
- EXC_CTRLDUMP_ADDFLAG( 0x0010, "picpos" );
- EXC_CTRLDUMP_ADDFLAG( 0x0020, "size" );
- EXC_CTRLDUMP_ADDFLAG( 0x0040, "mouseptr" );
- EXC_CTRLDUMP_ADDFLAG( 0x0080, "bordercolor" );
- EXC_CTRLDUMP_ADDFLAG( 0x0100, "borderstyle" );
- EXC_CTRLDUMP_ADDFLAG( 0x0200, "specialeff" );
- EXC_CTRLDUMP_ADDFLAG( 0x0400, "pic" );
- EXC_CTRLDUMP_ADDFLAG( 0x0800, "accel" );
- EXC_CTRLDUMP_ADDFLAG( 0x1000, "icon" );
- EXC_CTRLDUMP_ENDFLAG( 0xFFFFE000 );
- sal_uInt32 nCtrlFlags = nFlags;
-
- if( nCtrlFlags & 0x0001 ) EXC_CTRLDUMP_HEX4( "forecolor" );
- if( nCtrlFlags & 0x0002 ) EXC_CTRLDUMP_HEX4( "backcolor" );
-
- EXC_CTRLDUMP_STARTOPTFLAG( "option-flags", nCtrlFlags & 0x0004, 0x0080001B );
- EXC_CTRLDUMP_ADDFLAG( 0x00000002, "enabled" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000004, "locked" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000008, "opaque" );
- EXC_CTRLDUMP_ADDFLAG( 0x00800000, "wordwrap" );
- EXC_CTRLDUMP_ADDFLAG( 0x10000000, "autosize" );
- EXC_CTRLDUMP_ENDFLAG( 0xEF7FFFF0 ); // 0x00000001 always set?
-
- if( nCtrlFlags & 0x0008 ) EXC_CTRLDUMP_DECVARMASK( nCaptionLen, 0x7FFFFFFF, "caption-len" );
- if( nCtrlFlags & 0x0010 ) EXC_CTRLDUMP_COORD2( "picpos" );
- if( nCtrlFlags & 0x0040 ) EXC_CTRLDUMP_DEC1( "mouseptr" );
- if( nCtrlFlags & 0x0080 ) EXC_CTRLDUMP_HEX4( "bordercolor" );
- if( nCtrlFlags & 0x0100 ) EXC_CTRLDUMP_HEX2( "borderstyle" );
- if( nCtrlFlags & 0x0200 ) EXC_CTRLDUMP_HEX2( "specialeff" );
- if( nCtrlFlags & 0x0400 ) EXC_CTRLDUMP_HEXVAR( nPic, "pic" );
- if( nCtrlFlags & 0x0800 ) EXC_CTRLDUMP_HEX2( "accel" );
- if( nCtrlFlags & 0x1000 ) EXC_CTRLDUMP_HEXVAR( nIcon, "icon" );
-
- if( nCtrlFlags & 0x0008 ) EXC_CTRLDUMP_STRING( nCaptionLen, "caption" );
- if( nCtrlFlags & 0x0020 ) EXC_CTRLDUMP_SIZE4( "size" );
- EXC_CTRLDUMP_REMAINING( nStartPos + nSize );
-
- EXC_CTRLDUMP_IMAGE( nPic, "pic" );
- EXC_CTRLDUMP_IMAGE( nIcon, "icon" );
- bHasFontData = true;
- }
- break;
-
- case EXC_CTRL_SPINBUTTON:
- case EXC_CTRL_SCROLLBAR:
- {
- EXC_CTRLDUMP_STARTFLAG( "content-flags" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000001, "forecolor" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000002, "backcolor" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000004, "option" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000008, "size" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000010, "mouseptr" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000100, "unknown1" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000200, "unknown2" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000400, "unknown3" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000020, "min" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000040, "max" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000080, "value" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000800, "step" );
- EXC_CTRLDUMP_ADDFLAG( 0x00001000, "page-step" );
- EXC_CTRLDUMP_ADDFLAG( 0x00002000, "orient" );
- EXC_CTRLDUMP_ADDFLAG( 0x00004000, "prop-thumb" );
- EXC_CTRLDUMP_ADDFLAG( 0x00008000, "delay" );
- EXC_CTRLDUMP_ADDFLAG( 0x00010000, "icon" );
- EXC_CTRLDUMP_ENDFLAG( 0xFFFE0000 );
- sal_uInt32 nCtrlFlags = nFlags;
-
- if( nCtrlFlags & 0x00000001 ) EXC_CTRLDUMP_HEX4( "forecolor" );
- if( nCtrlFlags & 0x00000002 ) EXC_CTRLDUMP_HEX4( "backcolor" );
-
- EXC_CTRLDUMP_STARTOPTFLAG( "option-flags", nCtrlFlags & 0x00000004, 0x0000001B );
- EXC_CTRLDUMP_ADDFLAG( 0x00000002, "enabled" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000004, "locked" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000008, "opaque" );
- EXC_CTRLDUMP_ADDFLAG( 0x10000000, "autosize" );
- EXC_CTRLDUMP_ENDFLAG( 0xEFFFFFF1 );
-
- if( nCtrlFlags & 0x00000010 ) EXC_CTRLDUMP_DEC1( "mouseptr" );
- if( nCtrlFlags & 0x00000020 ) EXC_CTRLDUMP_DEC4( "min" );
- if( nCtrlFlags & 0x00000040 ) EXC_CTRLDUMP_DEC4( "max" );
- if( nCtrlFlags & 0x00000080 ) EXC_CTRLDUMP_DEC4( "value" );
- if( nCtrlFlags & 0x00000100 ) EXC_CTRLDUMP_HEX4( "unknown1" );
- if( nCtrlFlags & 0x00000200 ) EXC_CTRLDUMP_HEX4( "unknown2" );
- if( nCtrlFlags & 0x00000400 ) EXC_CTRLDUMP_HEX4( "unknown3" );
- if( nCtrlFlags & 0x00000800 ) EXC_CTRLDUMP_DEC4( "step" );
- if( nCtrlFlags & 0x00001000 ) EXC_CTRLDUMP_DEC4( "page-step" );
- if( nCtrlFlags & 0x00002000 ) EXC_CTRLDUMP_DEC4( "orient" );
- if( nCtrlFlags & 0x00004000 ) EXC_CTRLDUMP_DEC4( "prop-thumb" );
- if( nCtrlFlags & 0x00008000 ) EXC_CTRLDUMP_DEC4( "delay" );
- if( nCtrlFlags & 0x00010000 ) EXC_CTRLDUMP_HEXVAR( nIcon, "icon" );
-
- if( nCtrlFlags & 0x00000008 ) EXC_CTRLDUMP_SIZE4( "size" );
- EXC_CTRLDUMP_REMAINING( nStartPos + nSize );
-
- EXC_CTRLDUMP_IMAGE( nIcon, "icon" );
- }
- break;
-
- case EXC_CTRL_IMAGE:
- {
- EXC_CTRLDUMP_STARTFLAG( "content-flags" );
- EXC_CTRLDUMP_ADDFLAG( 0x0004, "autosize" );
- EXC_CTRLDUMP_ADDFLAG( 0x0008, "bordercolor" );
- EXC_CTRLDUMP_ADDFLAG( 0x0010, "backcolor" );
- EXC_CTRLDUMP_ADDFLAG( 0x0020, "borderstyle" );
- EXC_CTRLDUMP_ADDFLAG( 0x0040, "mouseptr" );
- EXC_CTRLDUMP_ADDFLAG( 0x0080, "picsizemode" );
- EXC_CTRLDUMP_ADDFLAG( 0x0100, "speceffect" );
- EXC_CTRLDUMP_ADDFLAG( 0x0200, "size" );
- EXC_CTRLDUMP_ADDFLAG( 0x0400, "pic" );
- EXC_CTRLDUMP_ADDFLAG( 0x0800, "picalign" );
- EXC_CTRLDUMP_ADDFLAG( 0x1000, "pictiling" );
- EXC_CTRLDUMP_ADDFLAG( 0x2000, "option" );
- EXC_CTRLDUMP_ADDFLAG( 0x4000, "icon" );
- EXC_CTRLDUMP_ENDFLAG( 0xFFFF8003 );
- sal_uInt32 nCtrlFlags = nFlags;
-
- if( nCtrlFlags & 0x0008 ) EXC_CTRLDUMP_HEX4( "bordercolor" );
- if( nCtrlFlags & 0x0010 ) EXC_CTRLDUMP_HEX4( "backcolor" );
- if( nCtrlFlags & 0x0020 ) EXC_CTRLDUMP_HEX1( "borderstyle" );
- if( nCtrlFlags & 0x0040 ) EXC_CTRLDUMP_DEC1( "mouseptr" );
- if( nCtrlFlags & 0x0080 ) EXC_CTRLDUMP_DEC1( "picsizemode" );
- if( nCtrlFlags & 0x0100 ) EXC_CTRLDUMP_HEX1( "speceffect" );
- if( nCtrlFlags & 0x0400 ) EXC_CTRLDUMP_HEXVAR( nPic, "pic" );
- if( nCtrlFlags & 0x0800 ) EXC_CTRLDUMP_HEX1( "picalign" );
-
- EXC_CTRLDUMP_STARTOPTFLAG( "option-flags", nCtrlFlags & 0x2000, 0x0000001B );
- EXC_CTRLDUMP_ADDFLAG( 0x00000002, "enabled" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000008, "opaque" );
- EXC_CTRLDUMP_ENDFLAG( 0xFFFFFFF5 );
-
- if( nCtrlFlags & 0x4000 ) EXC_CTRLDUMP_HEXVAR( nIcon, "icon" );
-
- if( nCtrlFlags & 0x0200 ) EXC_CTRLDUMP_SIZE4( "size" );
- EXC_CTRLDUMP_REMAINING( nStartPos + nSize );
-
- EXC_CTRLDUMP_IMAGE( nPic, "pic" );
- EXC_CTRLDUMP_IMAGE( nIcon, "icon" );
- }
- break;
-
- case EXC_CTRL_TABSTRIP:
- {
- EXC_CTRLDUMP_STARTFLAG( "content-flags" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000001, "selected-tab" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000002, "backcolor" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000004, "forecolor" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000010, "size" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000020, "caption-arr-len" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000040, "mouseptr" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000100, "taborientation" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000200, "tabstyle" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000400, "multirow" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000800, "fixed-width" );
- EXC_CTRLDUMP_ADDFLAG( 0x00001000, "fixed-height" );
- EXC_CTRLDUMP_ADDFLAG( 0x00008000, "infotip-arr-len" );
- EXC_CTRLDUMP_ADDFLAG( 0x00020000, "id-arr-len" );
- EXC_CTRLDUMP_ADDFLAG( 0x00040000, "option" );
- EXC_CTRLDUMP_ADDFLAG( 0x00080000, "last-id" );
- EXC_CTRLDUMP_ADDFLAG( 0x00200000, "unknown-arr-len" );
- EXC_CTRLDUMP_ADDFLAG( 0x00400000, "tab-count" );
- EXC_CTRLDUMP_ADDFLAG( 0x00800000, "shortcut-arr-len" );
- EXC_CTRLDUMP_ADDFLAG( 0x01000000, "icon" );
- EXC_CTRLDUMP_ENDFLAG( 0xFE116088 );
- sal_uInt32 nCtrlFlags = nFlags;
-
- sal_uInt32 nTabCount = 0;
- sal_uInt32 nIdArrLen = 0;
- sal_uInt32 nUnknownArrLen = 0;
- sal_uInt32 nShortArrLen = 0;
-
- if( nCtrlFlags & 0x00000001 ) EXC_CTRLDUMP_DEC4( "selected-tab" ); // size ok?
- if( nCtrlFlags & 0x00000002 ) EXC_CTRLDUMP_HEX4( "backcolor" );
- if( nCtrlFlags & 0x00000004 ) EXC_CTRLDUMP_HEX4( "forecolor" );
- if( nCtrlFlags & 0x00000020 ) EXC_CTRLDUMP_HEXVAR( nCaptionLen, "caption-arr-len" );
- if( nCtrlFlags & 0x00000040 ) EXC_CTRLDUMP_DEC1( "mouseptr" ); // size ok?
- if( nCtrlFlags & 0x00000100 ) EXC_CTRLDUMP_DEC4( "taborientation" ); // size ok?
- if( nCtrlFlags & 0x00000200 ) EXC_CTRLDUMP_DEC4( "tabstyle" ); // size ok?
- if( nCtrlFlags & 0x00000800 ) EXC_CTRLDUMP_DEC4( "fixed-width" );
- if( nCtrlFlags & 0x00001000 ) EXC_CTRLDUMP_DEC4( "fixed-height" );
- if( nCtrlFlags & 0x00008000 ) EXC_CTRLDUMP_HEXVAR( nTipLen, "infotip-arr-len" );
- if( nCtrlFlags & 0x00020000 ) EXC_CTRLDUMP_HEXVAR( nIdArrLen, "id-arr-len" );
-
- EXC_CTRLDUMP_STARTOPTFLAG( "option-flags", nCtrlFlags & 0x00040000, 0x0000001B );
- EXC_CTRLDUMP_ADDFLAG( 0x00000002, "enabled" );
- EXC_CTRLDUMP_ENDFLAG( 0xFFFFFFFD );
-
- if( nCtrlFlags & 0x00080000 ) EXC_CTRLDUMP_DEC4( "last-id" );
- if( nCtrlFlags & 0x00200000 ) EXC_CTRLDUMP_HEXVAR( nUnknownArrLen, "unknown-arr-len" );
- if( nCtrlFlags & 0x00400000 ) EXC_CTRLDUMP_DECVAR( nTabCount, "tab-count" );
- if( nCtrlFlags & 0x00800000 ) EXC_CTRLDUMP_HEXVAR( nShortArrLen, "shortcut-arr-len" );
- if( nCtrlFlags & 0x01000000 ) EXC_CTRLDUMP_HEXVAR( nIcon, "icon" );
-
- if( nCtrlFlags & 0x00000010 ) EXC_CTRLDUMP_SIZE4( "size" );
- if( nCtrlFlags & 0x00000020 ) EXC_CTRLDUMP_STRINGARRAY( nCaptionLen, nTabCount, "caption" );
- if( nCtrlFlags & 0x00008000 ) EXC_CTRLDUMP_STRINGARRAY( nTipLen, nTabCount, "infotip" );
- if( nCtrlFlags & 0x00020000 ) EXC_CTRLDUMP_STRINGARRAY( nIdArrLen, nTabCount, "id" );
- if( nCtrlFlags & 0x00200000 ) EXC_CTRLDUMP_STRINGARRAY( nUnknownArrLen, nTabCount, "unknown" );
- if( nCtrlFlags & 0x00800000 ) EXC_CTRLDUMP_STRINGARRAY( nShortArrLen, nTabCount, "shortcut" );
- EXC_CTRLDUMP_REMAINING( nStartPos + nSize );
-
- EXC_CTRLDUMP_IMAGE( nIcon, "icon" );
- bHasFontData = true;
- }
- break;
-
- case EXC_CTRL_USERFORM:
- case EXC_CTRL_FRAME:
- case EXC_CTRL_MULTIPAGE:
- case EXC_CTRL_PAGE:
- {
- EXC_CTRLDUMP_STARTFLAG( "content-flags" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000002, "backcolor" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000004, "forecolor" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000008, "last-id" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000040, "option" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000080, "borderstyle" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000100, "mouseptr" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000200, "scrollbars" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000400, "size" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000800, "scrollsize" );
- EXC_CTRLDUMP_ADDFLAG( 0x00001000, "scrollpos" );
- EXC_CTRLDUMP_ADDFLAG( 0x00008000, "icon" );
- EXC_CTRLDUMP_ADDFLAG( 0x00010000, "cycle" );
- EXC_CTRLDUMP_ADDFLAG( 0x00020000, "speceffect" );
- EXC_CTRLDUMP_ADDFLAG( 0x00040000, "bordercolor" );
- EXC_CTRLDUMP_ADDFLAG( 0x00080000, "caption" );
- EXC_CTRLDUMP_ADDFLAG( 0x00100000, "font" );
- EXC_CTRLDUMP_ADDFLAG( 0x00200000, "pic" );
- EXC_CTRLDUMP_ADDFLAG( 0x00400000, "zoom" );
- EXC_CTRLDUMP_ADDFLAG( 0x00800000, "picalign" );
- EXC_CTRLDUMP_ADDFLAG( 0x01000000, "pictiling" );
- EXC_CTRLDUMP_ADDFLAG( 0x02000000, "picsizemode" );
- EXC_CTRLDUMP_ADDFLAG( 0x04000000, "typeinfover" );
- EXC_CTRLDUMP_ADDFLAG( 0x08000000, "drawbuffer" );
- EXC_CTRLDUMP_ENDFLAG( 0xF0006031 );
- sal_uInt32 nCtrlFlags = nFlags;
-
- if( nCtrlFlags & 0x00000002 ) EXC_CTRLDUMP_HEX4( "backcolor" );
- if( nCtrlFlags & 0x00000004 ) EXC_CTRLDUMP_HEX4( "forecolor" );
- if( nCtrlFlags & 0x00000008 ) EXC_CTRLDUMP_DEC4( "last-id" );
-
- EXC_CTRLDUMP_STARTOPTFLAG( "option-flags", nCtrlFlags & 0x00000040, 0x00000002 );
- EXC_CTRLDUMP_ADDFLAG( 0x00000002, "enabled" );
- EXC_CTRLDUMP_ENDFLAG( 0xFFFFFFFD );
-
- if( nCtrlFlags & 0x00000080 ) EXC_CTRLDUMP_HEX1( "borderstyle" );
- if( nCtrlFlags & 0x00000100 ) EXC_CTRLDUMP_DEC1( "mouseptr" );
- if( nCtrlFlags & 0x00000200 ) EXC_CTRLDUMP_HEX1( "scrollbars" );
- if( nCtrlFlags & 0x00008000 ) EXC_CTRLDUMP_HEXVAR( nIcon, "icon" );
- if( nCtrlFlags & 0x00010000 ) EXC_CTRLDUMP_DEC1( "cycle" );
- if( nCtrlFlags & 0x00020000 ) EXC_CTRLDUMP_HEX1( "speceffect" );
- if( nCtrlFlags & 0x00040000 ) EXC_CTRLDUMP_HEX4( "bordercolor" );
- if( nCtrlFlags & 0x00080000 ) EXC_CTRLDUMP_DECVARMASK( nCaptionLen, 0x7FFFFFFF, "caption-len" );
- if( nCtrlFlags & 0x00100000 ) EXC_CTRLDUMP_HEXVAR( nFont, "font" );
- if( nCtrlFlags & 0x00200000 ) EXC_CTRLDUMP_HEXVAR( nPic, "pic" );
- if( nCtrlFlags & 0x00400000 ) EXC_CTRLDUMP_DEC4( "zoom" );
- if( nCtrlFlags & 0x00800000 ) EXC_CTRLDUMP_HEX1( "picalign" );
- if( nCtrlFlags & 0x02000000 ) EXC_CTRLDUMP_DEC1( "picsizemode" );
- if( nCtrlFlags & 0x04000000 ) EXC_CTRLDUMP_DEC4( "typeinfover" );
- if( nCtrlFlags & 0x08000000 ) EXC_CTRLDUMP_DEC4( "drawbuffer" );
-
- if( nCtrlFlags & 0x00000400 ) EXC_CTRLDUMP_SIZE4( "size" );
- if( nCtrlFlags & 0x00000800 ) EXC_CTRLDUMP_SIZE4( "scrollsize" );
- if( nCtrlFlags & 0x00001000 ) EXC_CTRLDUMP_COORD4( "scrollpos" );
- if( nCtrlFlags & 0x00080000 ) EXC_CTRLDUMP_STRING( nCaptionLen, "caption" );
- EXC_CTRLDUMP_REMAINING( nStartPos + nSize );
-
- EXC_CTRLDUMP_FONT( nFont, "font" );
- EXC_CTRLDUMP_IMAGE( nIcon, "icon" );
- EXC_CTRLDUMP_IMAGE( nPic, "pic" );
- }
- break;
-
- case EXC_CTRL_FONTDATA:
- {
- EXC_CTRLDUMP_STARTFLAG( "content-flags" );
- EXC_CTRLDUMP_ADDFLAG( 0x01, "font-name" );
- EXC_CTRLDUMP_ADDFLAG( 0x02, "font-style" );
- EXC_CTRLDUMP_ADDFLAG( 0x04, "font-size" );
- EXC_CTRLDUMP_ADDFLAG( 0x10, "language-id" );
- EXC_CTRLDUMP_ADDFLAG( 0x40, "align" );
- EXC_CTRLDUMP_ADDFLAG( 0x80, "font-weight" );
- EXC_CTRLDUMP_ENDFLAG( 0xFFFFFF08 ); // 0x20 always set?
- sal_uInt32 nCtrlFlags = nFlags;
-
- if( nCtrlFlags & 0x0001 ) EXC_CTRLDUMP_DECVARMASK( nNameLen, 0x7FFFFFFF, "font-name-len" );
-
- EXC_CTRLDUMP_STARTOPTFLAG( "font-style-flags", nCtrlFlags & 0x0002, 0x40000000 );
- EXC_CTRLDUMP_ADDFLAG( 0x0001, "bold" );
- EXC_CTRLDUMP_ADDFLAG( 0x0002, "italic" );
- EXC_CTRLDUMP_ADDFLAG( 0x0004, "underline" );
- EXC_CTRLDUMP_ADDFLAG( 0x0008, "strikeout" );
- EXC_CTRLDUMP_ADDFLAG( 0x2000, "sunken" );
- EXC_CTRLDUMP_ENDFLAG( 0xBFFFDFF0 ); // 0x40000000 always set?
-
- if( nCtrlFlags & 0x0004 ) EXC_CTRLDUMP_DEC4( "font-size" );
- if( nCtrlFlags & 0x0010 ) EXC_CTRLDUMP_HEX2( "language-id" );
- if( nCtrlFlags & 0x0040 )
- {
- EXC_CTRLDUMP_ALIGN_INSTRM( 2 );
- sal_uInt16 nAlign; rInStrm >> nAlign;
- t += " align="; lclAppendDec( t, nAlign );
- switch( nAlign )
- {
- case 1: t += "=left"; break;
- case 2: t += "=right"; break;
- case 3: t += "=center"; break;
- default: t += "=!unknown!";
- }
- EXC_CTRLDUMP_PRINT();
- }
- if( nCtrlFlags & 0x0080 ) EXC_CTRLDUMP_DEC2( "font-weight" );
-
- if( nCtrlFlags & 0x0001 ) EXC_CTRLDUMP_STRING( nNameLen, "font-name" );
- EXC_CTRLDUMP_REMAINING( nStartPos + nSize );
- }
- break;
-
- case EXC_CTRL_ADDDATA:
- {
- EXC_CTRLDUMP_STARTFLAG( "content-flags" );
- EXC_CTRLDUMP_ADDFLAG( 0x0001, "guid1" );
- EXC_CTRLDUMP_ADDFLAG( 0x0002, "guid2" );
- EXC_CTRLDUMP_ADDFLAG( 0x0008, "guid4" );
- EXC_CTRLDUMP_ADDFLAG( 0x0040, "unknown1" );
- EXC_CTRLDUMP_ENDFLAG( 0xFFFFFFB4 );
- sal_uInt32 nCtrlFlags = nFlags;
-
- if( nCtrlFlags & 0x0040 ) EXC_CTRLDUMP_HEX4( "unknown1" );
-
- if( nCtrlFlags & 0x0001 ) EXC_CTRLDUMP_GUID( "guid1" );
- if( nCtrlFlags & 0x0002 ) EXC_CTRLDUMP_GUID( "guid2" );
- if( nCtrlFlags & 0x0008 ) EXC_CTRLDUMP_GUID( "guid4" );
- EXC_CTRLDUMP_REMAINING( nStartPos + nSize );
- }
- break;
-
- case EXC_CTRL_FRAMECHILD:
- {
- EXC_CTRLDUMP_STARTFLAG( "content-flags" );
- EXC_CTRLDUMP_ADDFLAG( 0x0001, "name-len" );
- EXC_CTRLDUMP_ADDFLAG( 0x0002, "tag-len" );
- EXC_CTRLDUMP_ADDFLAG( 0x0004, "storage-id" );
- EXC_CTRLDUMP_ADDFLAG( 0x0008, "helpcontext-id" );
- EXC_CTRLDUMP_ADDFLAG( 0x0010, "option" );
- EXC_CTRLDUMP_ADDFLAG( 0x0020, "substream-len" );
- EXC_CTRLDUMP_ADDFLAG( 0x0040, "tabpos" );
- EXC_CTRLDUMP_ADDFLAG( 0x0080, "type" );
- EXC_CTRLDUMP_ADDFLAG( 0x0100, "pos" );
- EXC_CTRLDUMP_ADDFLAG( 0x0800, "tiptext" );
- EXC_CTRLDUMP_ADDFLAG( 0x1000, "ctrl-id" );
- EXC_CTRLDUMP_ADDFLAG( 0x2000, "ctrl-source" );
- EXC_CTRLDUMP_ADDFLAG( 0x4000, "row-source" );
- EXC_CTRLDUMP_ENDFLAG( 0xFFFF8600 );
- sal_uInt32 nCtrlFlags = nFlags;
-
- sal_uInt32 nStorageId = 0;
- sal_uInt32 nSubStrmLen = 0;
- sal_uInt16 nChildType = EXC_CTRL_UNKNOWN;
-
- if( nCtrlFlags & 0x0001 ) EXC_CTRLDUMP_DECVARMASK( nNameLen, 0x7FFFFFFF, "name-len" );
- if( nCtrlFlags & 0x0002 ) EXC_CTRLDUMP_DECVARMASK( nTagLen, 0x7FFFFFFF, "tag-len" );
- if( nCtrlFlags & 0x0004 ) EXC_CTRLDUMP_PLAIN_DECVAR( nStorageId, "storage-id" );
- if( nCtrlFlags & 0x0008 ) EXC_CTRLDUMP_PLAIN_DEC4( "helpcontext-id" );
-
- EXC_CTRLDUMP_STARTOPTFLAG( "option-flags", nCtrlFlags & 0x0010, 0x00000033 );
- EXC_CTRLDUMP_ADDFLAG( 0x00000001, "tabstop" );
- EXC_CTRLDUMP_ADDFLAG( 0x00000002, "visible" );
- EXC_CTRLDUMP_ADDFLAG( 0x00040000, "container" );
- EXC_CTRLDUMP_ENDFLAG( 0xFFFBFFFC );
-
- if( nCtrlFlags & 0x0020 ) EXC_CTRLDUMP_HEXVAR( nSubStrmLen, "substream-len" );
- if( nCtrlFlags & 0x0040 ) EXC_CTRLDUMP_DEC2( "tabpos" );
- if( nCtrlFlags & 0x0080 ) EXC_CTRLDUMP_CTRLTYPE( nChildType, "type" );
- if( nCtrlFlags & 0x0800 ) EXC_CTRLDUMP_DECVARMASK( nTipLen, 0x7FFFFFFF, "infotip-len" );
- if( nCtrlFlags & 0x1000 ) EXC_CTRLDUMP_DECVARMASK( nCtrlIdLen, 0x7FFFFFFF, "ctrl-id-len" );
- if( nCtrlFlags & 0x2000 ) EXC_CTRLDUMP_DECVARMASK( nCtrlSrcLen, 0x7FFFFFFF, "ctrl-source-len" );
- if( nCtrlFlags & 0x4000 ) EXC_CTRLDUMP_DECVARMASK( nRowSrcLen, 0x7FFFFFFF, "row-source-len" );
-
- if( nCtrlFlags & 0x0001 ) EXC_CTRLDUMP_STRING( nNameLen, "name" );
- if( nCtrlFlags & 0x0002 ) EXC_CTRLDUMP_STRING( nTagLen, "tag" );
- if( nCtrlFlags & 0x0100 ) EXC_CTRLDUMP_COORD4( "pos" );
- if( nCtrlFlags & 0x0800 ) EXC_CTRLDUMP_STRING( nTipLen, "infotip" );
- if( nCtrlFlags & 0x1000 ) EXC_CTRLDUMP_STRING( nCtrlIdLen, "ctrl-id" );
- if( nCtrlFlags & 0x2000 ) EXC_CTRLDUMP_STRING( nCtrlSrcLen, "ctrl-source" );
- if( nCtrlFlags & 0x4000 ) EXC_CTRLDUMP_STRING( nRowSrcLen, "row-source" );
- EXC_CTRLDUMP_REMAINING( nStartPos + nSize );
-
- if( (nCtrlFlags & 0x0080) && (nChildType != EXC_CTRL_UNKNOWN) )
- {
- if( (nFlags & 0x00040000) && (nStorageId > 0) )
- maCtrlStorages.push_back( XclDumpCtrlPortion( nStorageId, nChildType ) );
- if( (nCtrlFlags & 0x0020) && (nSubStrmLen > 0) )
- maCtrlPortions.push_back( XclDumpCtrlPortion( nSubStrmLen, nChildType ) );
- }
- }
- break;
-
- default:
- EXC_CTRLDUMP_REMAINING( nStartPos + nSize );
- }
-
- // font data
- if( bHasFontData )
- DumpControlContents( rInStrm, EXC_CTRL_FONTDATA );
- }
-}
-
-// ============================================================================
-//
-// S T R E A M S
-//
-// ============================================================================
-
-void Biff8RecDumper::DumpBinaryStream( SotStorageRef xStrg, const String& rStrmName, const String& rStrgPath )
-{
- SotStorageStreamRef xInStrm = OpenStream( xStrg, rStrmName );
- if( !xInStrm || !pDumpStream ) return;
-
- XclDumpStreamHeader aStrmHeader( *xInStrm, *pDumpStream, rStrmName, rStrgPath );
- DumpBinary( *xInStrm );
- (*pDumpStream) << "\n";
-}
-
-void Biff8RecDumper::DumpTextStream( SotStorageRef xStrg, const String& rStrmName, const String& rStrgPath )
-{
- SotStorageStreamRef xInStrm = OpenStream( xStrg, rStrmName );
- if( !xInStrm || !pDumpStream ) return;
-
- XclDumpStreamHeader aStrmHeader( *xInStrm, *pDumpStream, rStrmName, rStrgPath );
- while( xInStrm->Tell() < aStrmHeader.GetStreamLen() )
- {
- ByteString aLine;
- xInStrm->ReadLine( aLine );
- lclDumpString( *pDumpStream, aLine );
- (*pDumpStream) << "\n";
- }
- (*pDumpStream) << "\n";
-}
-
-void Biff8RecDumper::DumpRecordStream( SotStorageRef xStrg, const String& rStrmName, const String& rStrgPath )
-{
- SotStorageStreamRef xInStrm = OpenStream( xStrg, rStrmName );
- if( !xInStrm || !pDumpStream ) return;
-
- XclDumpStreamHeader aStrmHeader( *xInStrm, *pDumpStream, rStrmName, rStrgPath );
-
- XclImpStream* pOldStream = pIn;
- pIn = new XclImpStream( *xInStrm, GetRoot() );
- XclImpStream& rIn = *pIn;
- if( pOldStream )
- rIn.CopyDecrypterFrom( *pOldStream );
-
- // -- dump from here --
- UINT16 nId;
- BOOL bLoop = TRUE;
-
- while( bLoop && rIn.StartNextRecord() )
- {
- nId = rIn.GetRecId();
- if( HasModeDump( nId ) )
- RecDump( TRUE );
-
- bLoop = (nId != 0x000A);
- }
-
- delete pIn;
- pIn = pOldStream;
-}
-
-void Biff8RecDumper::DumpCtlsStream()
-{
- SotStorageStreamRef xInStrm = OpenStream( EXC_STREAM_CTLS );
- if( !xInStrm || !pDumpStream ) return;
-
- SvStream& rInStrm = *xInStrm;
- SvStream& rOutStrm = *pDumpStream;
- XclDumpStreamHeader aStrmHeader( rInStrm, rOutStrm, EXC_STREAM_CTLS, EMPTY_STRING );
-
- for( StrmPortionMap::const_iterator aIt = maCtlsPosMap.begin(), aEnd = maCtlsPosMap.end(); aIt != aEnd; ++aIt )
- {
- ULONG nCtrlPos = static_cast< ULONG >( aIt->first );
- ULONG nCtrlEnd = nCtrlPos + static_cast< ULONG >( aIt->second );
- if( nCtrlEnd <= aStrmHeader.GetStreamLen() )
- {
- // stream position
- ULONG nStartPos = nCtrlPos; // for stream alignment macro
- rInStrm.Seek( nStartPos );
-
- ByteString t( "\npos=" ); __AddHex( t, aIt->first );
- t.Append( " len=" ); __AddHex( t, aIt->second );
- rOutStrm << t.GetBuffer() << " ";
-
- // control type
- sal_uInt16 nCtrlType = lclDumpControlGuid( rInStrm, rOutStrm );
- rOutStrm << "\n";
-
- // control contents
- if( nCtrlType != EXC_CTRL_UNKNOWN )
- DumpControlContents( rInStrm, nCtrlType );
-
- // remaining unknown data
- EXC_CTRLDUMP_REMAINING( nCtrlEnd );
- rOutStrm << "\n";
- }
- }
-}
-
-void Biff8RecDumper::DumpControlFrameStream( SotStorageRef xInStrg, sal_uInt16 nCtrlType, const String& rStrgPath )
-{
- static const String saStrmName( sal_Unicode( 'f' ) );
-
- SotStorageStreamRef xInStrm = OpenStream( xInStrg, saStrmName );
- if( !xInStrm || !pDumpStream ) return;
-
- SvStream& rInStrm = *xInStrm;
- SvStream& rOutStrm = *pDumpStream;
- XclDumpStreamHeader aStrmHeader( rInStrm, rOutStrm, saStrmName, rStrgPath );
-
- if( aStrmHeader.GetStreamLen() > 0 )
- {
- ByteString t; // "t" needed for macros
-
- rOutStrm << "header-record\n";
- DumpControlContents( rInStrm, nCtrlType );
- rOutStrm << "\n";
-
- if( nCtrlType == EXC_CTRL_USERFORM )
- {
- rOutStrm << "add-records\n";
- sal_uInt16 nAddCount;
- EXC_CTRLDUMP_PLAIN_DECVAR( nAddCount, "count" );
- EXC_CTRLDUMP_PRINT();
- rOutStrm << "\n";
-
- for( sal_uInt16 nAdd = 0; (nAdd < nAddCount) && (rInStrm.Tell() < aStrmHeader.GetStreamLen()); ++nAdd )
- {
- DumpControlContents( rInStrm, EXC_CTRL_ADDDATA );
- rOutStrm << "\n";
- }
- }
-
- rOutStrm << "children-records\n";
- sal_uInt32 nRecCount, nTotalSize;
- EXC_CTRLDUMP_PLAIN_DECVAR( nRecCount, "count" );
- EXC_CTRLDUMP_PLAIN_HEXVAR( nTotalSize, "total-size" );
- if( nTotalSize > 0 )
- {
- EXC_CTRLDUMP_PLAIN_HEX4( "header-unknown" );
- rOutStrm << "\n";
-
- for( sal_uInt32 nRec = 0; (nRec < nRecCount) && (rInStrm.Tell() < aStrmHeader.GetStreamLen()); ++nRec )
- {
- DumpControlContents( rInStrm, EXC_CTRL_FRAMECHILD );
- rOutStrm << "\n";
- }
- }
- else
- rOutStrm << "\n";
-
- if( rInStrm.Tell() < aStrmHeader.GetStreamLen() )
- {
- rOutStrm << "remaining=\n";
- DumpBinary( rInStrm );
- rOutStrm << "\n";
- }
- }
-}
-
-void Biff8RecDumper::DumpControlObjectsStream( SotStorageRef xInStrg, const String& rStrgPath )
-{
- static const String saStrmName( sal_Unicode( 'o' ) );
-
- SotStorageStreamRef xInStrm = OpenStream( xInStrg, saStrmName );
- if( !xInStrm || !pDumpStream ) return;
-
- SvStream& rInStrm = *xInStrm;
- SvStream& rOutStrm = *pDumpStream;
- XclDumpStreamHeader aStrmHeader( rInStrm, rOutStrm, saStrmName, rStrgPath );
-
- if( aStrmHeader.GetStreamLen() > 0 )
- {
- ULONG nStrmPos = 0;
- for( XclDumpCtrlPortionVec::const_iterator aIt = maCtrlPortions.begin(), aEnd = maCtrlPortions.end(); aIt != aEnd; ++aIt )
- {
- rInStrm.Seek( nStrmPos );
- DumpControlContents( rInStrm, aIt->second );
- rOutStrm << "\n";
- nStrmPos += aIt->first;
- }
-
- if( rInStrm.Tell() < aStrmHeader.GetStreamLen() )
- {
- rOutStrm << "remaining=\n";
- DumpBinary( rInStrm );
- rOutStrm << "\n";
- }
- }
-}
-
-// ============================================================================
-//
-// S T O R A G E S
-//
-// ============================================================================
-
-void Biff8RecDumper::DumpAnyStorage( SotStorageRef xParentStrg, const String& rStrgName, const String& rStrgPath )
-{
- SotStorageRef xInStrg = OpenStorage( xParentStrg, rStrgName );
- if( !xInStrg || !pDumpStream ) return;
-
- XclDumpStorageHeader aStrgHeader( *xInStrg, *pDumpStream, rStrgPath );
-}
-
-void Biff8RecDumper::DumpUserFormStorage( SotStorageRef xParentStrg, const String& rStrgName, sal_uInt16 nCtrlType, const String& rStrgPath )
-{
- SotStorageRef xInStrg = OpenStorage( xParentStrg, rStrgName );
- if( !xInStrg || !pDumpStream ) return;
-
- XclDumpStorageHeader aStrgHeader( *xInStrg, *pDumpStream, rStrgPath );
-
- // streams
- maCtrlStorages.clear();
- maCtrlPortions.clear();
- DumpControlFrameStream( xInStrg, nCtrlType, rStrgPath );
- DumpControlObjectsStream( xInStrg, rStrgPath );
- DumpTextStream( xInStrg, CREATE_STRING( "\003VBFrame" ), rStrgPath );
-
- // frame substorages
- XclDumpCtrlPortionVec aCtrlStorages( maCtrlStorages ); // make local copy, maCtrlStorages is reused in loop
- for( XclDumpCtrlPortionVec::const_iterator aIt = aCtrlStorages.begin(), aEnd = aCtrlStorages.end(); aIt != aEnd; ++aIt )
- {
- sal_uInt32 nStorageId = aIt->first;
- String aSubName( sal_Unicode( 'i' ) );
- if( nStorageId < 10 )
- aSubName.Append( sal_Unicode( '0' ) );
- aSubName.Append( String::CreateFromInt32( static_cast< sal_Int32 >( nStorageId ) ) );
-
- String aPath( rStrgPath );
- aPath.Append( sal_Unicode( '/' ) ).Append( rStrgName );
-
- DumpUserFormStorage( xInStrg, aSubName, aIt->second, aPath );
- }
-}
-
-void Biff8RecDumper::DumpVbaProjectStorage()
-{
- SotStorageRef xInStrg = OpenStorage( EXC_STORAGE_VBA_PROJECT );
- if( !xInStrg || !pDumpStream ) return;
-
- XclDumpStorageHeader aStrgHeader( *xInStrg, *pDumpStream, EMPTY_STRING );
- // PROJECT substream
- DumpTextStream( xInStrg, CREATE_STRING( "PROJECT" ), EXC_STORAGE_VBA_PROJECT );
- // VBA storage
- DumpAnyStorage( xInStrg, EXC_STORAGE_VBA, EXC_STORAGE_VBA_PROJECT );
- // user forms
- SvStorageInfoList aInfoList;
- xInStrg->FillInfoList( &aInfoList );
- for( ULONG nInfo = 0; nInfo < aInfoList.Count(); ++nInfo )
- {
- SvStorageInfo& rInfo = aInfoList.GetObject( nInfo );
- if( rInfo.IsStorage() && (rInfo.GetName() != EXC_STORAGE_VBA) )
- DumpUserFormStorage( xInStrg, rInfo.GetName(), EXC_CTRL_USERFORM, EXC_STORAGE_VBA_PROJECT );
- }
-}
-
-// ============================================================================
-//
-// ============================================================================
-
-const sal_Char* Biff8RecDumper::GetBlanks( const UINT16 nNumOfBlanks )
-{
- DBG_ASSERT( pBlankLine, "-Biff8RecDumper::GetBlanks(): nicht so schnell mein Freund!" );
- DBG_ASSERT( nNumOfBlanks <= nLenBlankLine,
- "+Biff8RecDumper::GetBlanks(): So viel kannst Du nicht von mir verlangen!" );
-
- return pBlankLine + ( ( nNumOfBlanks <= nLenBlankLine )? ( nLenBlankLine - nNumOfBlanks ) : 0 );
-}
-
-
-BOOL Biff8RecDumper::IsLineEnd( const sal_Char c, sal_Char& rNext, SvStream& rIn, INT32& rLeft )
-{
- static const sal_Char cNL = '\n';
- static const sal_Char cRET = '\r';
-
- if( IsEndOfLine( c ) )
- {
- sal_Char cDouble = ( c == cNL )? cRET : cNL;
-
- if( rNext == cDouble )
- {
- rIn >> rNext;
- rLeft--;
- }
-
- return TRUE;
- }
- else
- return FALSE;
-}
-
-
-_KEYWORD Biff8RecDumper::GetKeyType( const ByteString& r )
-{
- ByteString t( r );
- _KEYWORD e;
-
- t.ToUpperAscii();
-
- if( t == "SKIPDUMP" )
- e = Skipdump;
- else if( t == "SKIPOFFSET" )
- e = SkipOffset;
- else if( t == "READCONTRECS" )
- e = ReadContRecs;
- else if( t == "NOWARNINGS" )
- e = NoWarnings;
- else if( t == "CONTLOAD" )
- e = Contload;
- else if( t == "BLANKLINE" )
- e = BlankLine;
- else if( t == "EXPORTBOOKSTREAM" )
- e = ExportBookStream;
- else if( t == "PARSEP" )
- e = Parsep;
- else if( t == "MAXBODYLINES" )
- e = Maxbodylines;
- else if( t == "INCLUDE" || t == "+" )
- e = Include;
- else if( t == "EXCLUDE" || t == "-" )
- e = Exclude;
- else if( t == "HEX" || t == "H" )
- e = Hex;
- else if( t == "BODY" || t == "B" )
- e = Body;
- else if( t == "NAMEONLY" || t =="N" )
- e = NameOnly;
- else if( t == "COMMENT" )
- e = Comment;
- else if( t == "OUTPUT" )
- e = Output;
- else if( t == "TITLE" )
- e = Title;
- else if( t == "CLEARFILE" )
- e = ClearFile;
- else
- e = KW_Unknown;
-
- return e;
-}
-
-
-void Biff8RecDumper::Init( void )
-{
- bClearFile = FALSE;
-
- if( pDumpModes || ppRecNames )
- return;
-
- const sal_Char* pDefName = "biffrecdumper.ini";
- const sal_Char* pIniKey = "BIFFRECDUMPERINI";
- const sal_Char pPathSep[] = { SAL_PATHDELIMITER, '\0' };
- ByteString aIniName;
-
- SvFileStream* pIn = NULL;
-
- // first try: search for biffrecdumper.ini in dir, specified in %HOME%
- const sal_Char* pHome = getenv( "HOME" );
- if( pHome )
- {
- aIniName = pHome;
- aIniName.EraseTrailingChars( *pPathSep );
- aIniName += pPathSep;
- aIniName += pDefName;
-
- pIn = CreateInStream( aIniName.GetBuffer() );
- }
-
- if( !pIn )
- { // %HOME% not set or %HOME%\biffrecdumper.ini could not be opened
- const sal_Char* pIni = getenv( pIniKey );
- if( pIni )
- {
- pIn = CreateInStream( pIni );
- if( !pIn )
- {
- AddError( 0, "Could not open ini file", ByteString( pIni ) );
- bEndLoading = TRUE; // zur Sicherheit....
- }
- }
- }
-
- if( pIn )
- {
- pIn->Seek( STREAM_SEEK_TO_END );
-
- const UINT32 nStreamLen = pIn->Tell();
-
- if( nStreamLen <= 1 )
- {
- pIn->Close();
- delete pIn;
- return;
- }
-
- pIn->Seek( STREAM_SEEK_TO_BEGIN );
-
- pDumpModes = new UINT16[ nRecCnt ];
- ppRecNames = new ByteString*[ nRecCnt ];
-
- memset( pDumpModes, 0x00, sizeof( UINT16 ) * nRecCnt );
- memset( ppRecNames, 0x00, sizeof( ByteString* )* nRecCnt );
-
- enum STATE { PreLine, InCommand, PostCommand, InId, PostEqu,
- InVal, InName, InInExClude, InBodyMode, PostSepIEC,
- PostSepBM, InComment };
-
- STATE eAct = PreLine;
- sal_Char c;
- sal_Char cNext;
- INT32 n = ( INT32 ) nStreamLen;
- ByteString aCommand;
- ByteString aVal;
- ByteString aInExClude;
- ByteString aHexBody;
- UINT32 nLine = 1;
- BOOL bCommand = FALSE;
-
- *pIn >> c >> cNext;
-
- while( n > 0 )
- {
- n--;
-
- switch( eAct )
- {
- case PreLine:
- if( IsAlphaNum( c ) )
- {
- if( IsNum( c ) )
- {
- eAct = InId;
- bCommand = FALSE;
- }
- else
- {
- eAct = InCommand;
- bCommand = TRUE;
- }
- aCommand.Erase();
- aCommand += c;
- }
- else if( c == cComm1 && cNext == cComm2 )
- eAct = InComment;
- else if( IsLineEnd( c, cNext, *pIn, n ) )
- nLine++;
- else if( !IsBlank( c ) )
- {
- AddError( nLine, "Unexpected command or id" );
- n = 0;
- }
- break;
- case InCommand:
- if( c == '=' )
- {
- eAct = PostEqu;
- aVal.Erase();
- }
- else if( IsAlpha( c ) )
- aCommand += c;
- else if( IsBlank( c ) )
- eAct = PostCommand;
- else if( IsLineEnd( c, cNext, *pIn, n ) )
- {
- if( ExecCommand( nLine, aCommand ) )
- {
- eAct = PreLine;
- nLine++;
- }
- else
- n = 0;
- }
- else if( c == cComm1 && cNext == cComm2 )
- {
- if( ExecCommand( nLine, aCommand ) )
- eAct = InComment;
- else
- {
- AddError( nLine, "Invalid command before comment", aCommand );
- n = 0;
- }
- }
- else
- {
- aCommand += '>';
- aCommand += c;
- aCommand += '<';
- AddError( nLine, "Invalid character in command or id", aCommand );
- n = 0;
- }
- break;
- case PostCommand:
- if( c == '=' )
- {
- eAct = PostEqu;
- aVal.Erase();
- }
- else if( IsLineEnd( c, cNext, *pIn, n ) )
- {
- if( ExecCommand( nLine, aCommand ) )
- {
- eAct = PreLine;
- nLine++;
- }
- else
- n = 0;
- }
- else if( c == cComm1 && cNext == cComm2 )
- {
- if( ExecCommand( nLine, aCommand ) )
- eAct = InComment;
- else
- {
- AddError( nLine, "Invalid command before comment", aCommand );
- n = 0;
- }
- }
- else if( !IsBlank( c ) )
- {
- AddError( nLine, "Expecting blank or \'=\' following the command", aCommand );
- n = 0;
- }
- break;
- case InId:
- if( c == '=' )
- {
- eAct = PostEqu;
- aVal.Erase();
- }
- else if( IsAlphaNum( c ) )
- aCommand += c;
- else if( IsBlank( c ) )
- eAct = PostCommand;
- else if( ( c == cComm1 && cNext == cComm2 ) || IsLineEnd( c, cNext, *pIn, n ) )
- {
- AddError( nLine, "Unexpected end of record id", aCommand );
- eAct = InComment;
- }
- else
- {
- AddError( nLine, "Unexpected sal_Char in record id", aCommand );
- n = 0;
- }
- break;
- case PostEqu:
- if( bCommand )
- { // Command
- if( c == cComm1 && cNext == cComm2 )
- {
- if( ExecCommand( nLine, aCommand ) )
- eAct = InComment;
- else
- {
- AddError( nLine, "Unknown command", aCommand );
- n = 0;
- }
- }
- else if( IsLineEnd( c, cNext, *pIn, n ) )
- {
- if( ExecCommand( nLine, aCommand ) )
- {
- eAct = PreLine;
- nLine++;
- }
- else
- {
- AddError( nLine, "Unknown command", aCommand );
- n = 0;
- }
- }
- else if( !bCommand && c == cParSep )
- eAct = PostSepIEC;
- else if( !IsBlank( c ) )
- {
- aVal.Erase();
- aVal += c;
- eAct = InVal;
- }
- }
- else
- { // Set
- if( ( c == cComm1 && cNext == cComm2 ) || IsLineEnd( c, cNext, *pIn, n ) )
- {
- AddError( nLine, "No mode set for record", aCommand );
- n = 0;
- }
- else if( !bCommand && c == cParSep )
- eAct = PostSepIEC;
- else
- {
- aVal.Erase();
- aVal += c;
- eAct = InName;
- aInExClude.Erase();
- aHexBody.Erase();
- }
- }
- break;
- case InVal:
- if( c == cComm1 && cNext == cComm2 )
- {
- if( ExecCommand( nLine, aCommand, &aVal ) )
- eAct = InComment;
- else
- {
- AddError( nLine, "Unknown command", aCommand );
- n = 0;
- }
- }
- else if( IsLineEnd( c, cNext, *pIn, n ) )
- {
- if( ExecCommand( nLine, aCommand, &aVal ) )
- {
- eAct = PreLine;
- nLine++;
- }
- else
- {
- AddError( nLine, "Unknown command", aCommand );
- n = 0;
- }
- }
- else
- aVal += c;
- break;
- case InName:
- if( c == cParSep )
- eAct = PostSepIEC;
- else if( c == cComm1 && cNext == cComm2 )
- {
- if( ExecSetVal( nLine, aCommand, &aVal, NULL, NULL ) )
- eAct = InComment;
- else
- n = 0;
- }
- else if( IsLineEnd( c, cNext, *pIn, n ) )
- {
- if( ExecSetVal( nLine, aCommand, &aVal, NULL, NULL ) )
- {
- eAct = PreLine;
- nLine++;
- }
- else
- n = 0;
- }
- else
- aVal += c;
- break;
- case InInExClude:
- if( c == cParSep )
- eAct = PostSepBM;
- else if( c == cComm1 && cNext == cComm2 )
- {
- if( ExecSetVal( nLine, aCommand, &aVal, &aInExClude, NULL ) )
- eAct = InComment;
- else
- n = 0;
- }
- else if( IsLineEnd( c, cNext, *pIn, n ) )
- {
- if( ExecSetVal( nLine, aCommand, &aVal, &aInExClude, NULL ) )
- {
- eAct = PreLine;
- nLine++;
- }
- else
- n = 0;
- }
- else
- aInExClude += c;
- break;
- case InBodyMode:
- if( c == cParSep )
- {
- AddError( nLine, "Only 3 parameter possible" );
- n = 0;
- }
- else if( c == cComm1 && cNext == cComm2 )
- {
- if( ExecSetVal( nLine, aCommand, &aVal, &aInExClude, &aHexBody ) )
- eAct = InComment;
- else
- n = 0;
- }
- else if( IsLineEnd( c, cNext, *pIn, n ) )
- {
- if( ExecSetVal( nLine, aCommand, &aVal, &aInExClude, &aHexBody ) )
- {
- eAct = PreLine;
- nLine++;
- }
- else
- n = 0;
- }
- else
- aInExClude += c;
- break;
- case PostSepIEC:
- if( c == cParSep )
- eAct = PostSepBM;
- else if( c == cComm1 && cNext == cComm2 )
- {
- if( ExecSetVal( nLine, aCommand, &aVal, NULL, NULL ) )
- eAct = InComment;
- else
- n = 0;
- }
- else if( IsLineEnd( c, cNext, *pIn, n ) )
- {
- if( ExecSetVal( nLine, aCommand, &aVal, NULL, NULL ) )
- {
- eAct = PreLine;
- nLine++;
- }
- else
- n = 0;
- }
- else if( !IsBlank( c ) )
- {
- aInExClude += c;
- eAct = InInExClude;
- }
- break;
- case PostSepBM:
- if( c == cParSep )
- eAct = PostSepBM;
- else if( c == cComm1 && cNext == cComm2 )
- {
- if( ExecSetVal( nLine, aCommand, &aVal, &aInExClude, NULL ) )
- eAct = InComment;
- else
- n = 0;
- }
- else if( IsLineEnd( c, cNext, *pIn, n ) )
- {
- if( ExecSetVal( nLine, aCommand, &aVal, &aInExClude, NULL ) )
- {
- eAct = PreLine;
- nLine++;
- }
- else
- n = 0;
- }
- else if( !IsBlank( c ) )
- {
- aHexBody += c;
- eAct = InBodyMode;
- }
- break;
- case InComment:
- if( IsLineEnd( c, cNext, *pIn, n ) )
- {
- eAct = PreLine;
- nLine++;
- }
- break;
- default:
- n = 0;
- }
-
- c = cNext;
- *pIn >> cNext;
- }
-
- pIn->Close();
- delete pIn;
- }
-}
-
-
-BOOL Biff8RecDumper::ExecCommand( const UINT32 nL, const ByteString& r, const ByteString* pVal )
-{
- _KEYWORD e = GetKeyType( r );
- BOOL b = TRUE;
- const UINT32 nValLen = ( pVal )? pVal->Len() : 0;
- BOOL bSet;
- UINT16 nMode;
-
- switch( e )
- {
- case Skipdump: bSkip = TRUE; break;
- case SkipOffset: bSkipOffset = TRUE; break;
- case ReadContRecs: bReadContRecs = TRUE; break;
- case NoWarnings: bWarnings = FALSE; break;
- case Contload: bEndLoading = TRUE; break;
- case BlankLine: bBlankLine = TRUE; break;
- case ExportBookStream: bExportBookStream = TRUE; break;
- case Parsep:
- if( nValLen == 0 )
- {
- AddError( nL, "No separator found" );
- b = FALSE;
- }
- else if( nValLen == 1 )
- cParSep = *( pVal->GetBuffer() );
- else
- {
- AddError( nL, "More than 1 sal_Char is not valid for separator", *pVal );
- b = FALSE;
- }
- break;
- case Maxbodylines:
- if( nValLen )
- {
- UINT32 n = GetVal( *pVal );
-
- if( n == 0xFFFFFFFF )
- {
- AddError( nL, "Syntax error in value of body lines" );
- b = FALSE;
- }
- else
- nMaxBodyLines = n;
- }
- else
- {
- AddError( nL, "No value specified for number of body lines" );
- b = FALSE;
- }
- break;
- case Include:
- bSet = FALSE;
- nMode = MODE_SKIP;
- goto _common;
- case Exclude:
- bSet = TRUE;
- nMode = MODE_SKIP;
- goto _common;
- case Hex:
- bSet = TRUE;
- nMode = MODE_HEX;
- goto _common;
- case Body:
- bSet = FALSE;
- nMode = MODE_HEX;
- goto _common;
- case NameOnly:
- bSet = TRUE;
- nMode = MODE_NAMEONLY;
- goto _common;
-_common:
- if( pVal )
- {
- IdRangeList aRL;
- if( FillIdRangeList( nL, aRL, *pVal ) )
- {
- const IdRange* p = aRL.First();
- if( bSet )
- {
- while( p )
- { SetFlag( p->nFirst, p->nLast, nMode ); p = aRL.Next(); }
- }
- else
- {
- while( p )
- { ClrFlag( p->nFirst, p->nLast, nMode ); p = aRL.Next(); }
- }
- }
- else
- b = FALSE;
- }
- break;
- case Comment:
- if( pVal && pVal->Len() >= 2 )
- {
- cComm1 = pVal->GetChar( 0 );
- cComm2 = pVal->GetChar( 1 );
- }
- break;
- case Output:
- CopyStrpOnStrp( pOutName, pVal );
- if( pOutName )
- {
- if( *pOutName == "*" )
- {
- ByteString aDefault( "DefaultDumpName.txt" );
- SfxObjectShell* pShell = GetDocShell();
- if( pShell )
- {
- SfxMedium* pMedium = pShell->GetMedium();
- if( pMedium )
- {
- const ByteString aTextExtension( ".txt" );
- aDefault = GETSTR( pMedium->GetPhysicalName() );
- xub_StrLen nStrLen = aDefault.Len();
- if( nStrLen >= 4 )
- {
- ByteString aTmp( aDefault );
- aTmp.ToLowerAscii();
- if( aTmp.Copy( nStrLen -4 ) == ".xls" )
- aDefault.Replace( nStrLen - 4, aTextExtension.Len(), aTextExtension );
- else
- aDefault += aTextExtension;
- }
- else
- aDefault += aTextExtension;
- }
- }
-
- *pOutName = aDefault;
- }
- CreateOutStream();
- }
- else if( pDumpStream )
- {
- pDumpStream->Close();
- DELANDNULL( pDumpStream );
- }
- break;
- case Title:
- CopyStrpOnStrp( pTitle, pVal );
- break;
- case ClearFile:
- bClearFile = TRUE;
- break;
- default:
- AddError( nL, "Unknown command", r );
- b = FALSE;
- }
-
- return b;
-}
-
-
-BOOL Biff8RecDumper::ExecSetVal( const UINT32 nL, const ByteString& rId, const ByteString* pName,
- const ByteString* pIEC, const ByteString* pHB )
-{
- UINT32 _nId = GetVal( rId );
-
- if( _nId == 0xFFFFFFFF )
- {
- AddError( nL, "Syntax error in record id", rId );
- return FALSE;
- }
- else if( _nId >= ( UINT32 ) nRecCnt )
- {
- AddError( nL, "Record id to high", rId );
- return FALSE;
- }
-
- UINT16 nId = ( UINT16 ) _nId;
-
- if( pName && pName->Len() )
- SetName( nId, *pName );
-
- _KEYWORD e;
- UINT16 n = GetMode( nId );
-
- if( pIEC && pIEC->Len() )
- {
- e = GetKeyType( *pIEC );
-
- if( e == Include )
- n &= ~MODE_SKIP;
- else if( e == Exclude )
- n |= MODE_SKIP;
- else
- {
- AddError( nL, "Invalid key for in-/exclude", *pIEC );
- return FALSE;
- }
- }
-
- if( pHB && pHB->Len() )
- {
- e = GetKeyType( *pHB );
-
- if( e == NameOnly )
- n |= MODE_NAMEONLY;
- else
- {
- n &= ~MODE_NAMEONLY;
- if( e == Hex )
- n |= MODE_HEX;
- else if( e == Body )
- n &= ~MODE_HEX;
- else
- {
- AddError( nL, "Invalid key for hex/body/name only", *pIEC );
- return FALSE;
- }
- }
- }
-
- SetMode( nId, n );
- return TRUE;
-}
-
-
-void Biff8RecDumper::SetFlag( const UINT16 nF, const UINT16 nL, const UINT16 nFl )
-{
- UINT16 n = ( nF < nL )? nF : nL;
- UINT16 nLast = ( nF < nL )? nL : nF;
-
- if( nLast >= nRecCnt )
- nLast = nRecCnt - 1;
-
- while( n <= nLast )
- {
- pDumpModes[ n ] |= nFl;
- n++;
- }
-}
-
-
-void Biff8RecDumper::ClrFlag( const UINT16 nF, const UINT16 nL, const UINT16 nFlags )
-{
- UINT16 n = ( nF < nL )? nF : nL;
- UINT16 nLast = ( nF < nL )? nL : nF;
- UINT16 nFl = ~nFlags;
-
- if( nLast >= nRecCnt )
- nLast = nRecCnt - 1;
-
- while( n <= nLast )
- {
- pDumpModes[ n ] &= nFl;
- n++;
- }
-}
-
-
-void Biff8RecDumper::SetName( const UINT16 n, ByteString* p )
-{
- if( n < nRecCnt )
- CopyStrpOnStrp( ppRecNames[ n ], p );
-}
-
-
-UINT32 Biff8RecDumper::GetVal( const ByteString& r )
-{
- const sal_Char* p = r.GetBuffer();
- sal_Char c = *p;
- UINT32 n = 0;
- const UINT32 nLimitDec = 0xFFFFFFFF / 10;
- const UINT32 nLimitHex = 0xFFFFFFFF / 16;
- BOOL bError = FALSE;
-
- enum STATE { First, Dec, MaybeHex, Hex };
-
- STATE e = First;
-
- while( c )
- {
- switch( e )
- {
- case First:
- if( IsNum( c ) )
- {
- if( c == '0' )
- e = MaybeHex;
- else
- {
- e = Dec;
- n = GetVal( c );
- }
- }
- else
- bError = TRUE;
- break;
- case Dec:
- if( n < nLimitDec && IsNum( c ) )
- {
- n *= 10;
- n += GetVal( c );
- }
- else
- bError = TRUE;
- break;
- case MaybeHex:
- if( c == 'x' || c == 'X' )
- {
- e = Hex;
- n = 0;
- }
- else if( IsNum( c ) )
- {
- n = GetVal( c );
- e = Dec;
- }
- else
- bError = TRUE;
- break;
- case Hex:
- if( n < nLimitHex && IsHex( c ) )
- {
- n *= 16;
- n += GetVal( c );
- }
- else
- bError = TRUE;
- break;
- }
-
- if( bError )
- c = 0x00;
- else
- {
- p++;
- c = *p;
- }
- }
-
- if( bError )
- return 0xFFFFFFFF;
- else
- return n;
-}
-
-
-BOOL Biff8RecDumper::FillIdRangeList( const UINT32 nL, IdRangeList& rRL, const ByteString& rV )
-{
- rRL.Clear();
-
- const sal_Char* pSyntErr = "Syntax error in number (list)";
-
-#define SYNTERR(ch) AddError( ((UINT32)(b=FALSE))+nL, pSyntErr, ch? ((((t+=">")+=ByteString::CreateFromInt32(ch))+="<")) : t )
-#define NEWVAL(_n) _n=(n>=(UINT32)nRecCnt)?nRecCnt-1:(UINT16)n
-#define ORDERN() {if(n1>n2){UINT16 nT=n1;n1=n2;n2=nT;}}
-
- const sal_Char* p = rV.GetBuffer();
- sal_Char c = *p;
- const sal_Char cSep = cParSep;
- const sal_Char cCont = '.';
- const sal_Char cAll = '*';
- ByteString t;
- UINT16 n1 = 0, n2 = 0;
- UINT32 n;
- BOOL b = TRUE;
- BOOL bExp2 = FALSE;
-
- enum STATE { PreFirst, InFirst, PostFirst, InCont, PreLast, InLast, PostLast };
- STATE e = PreFirst;
-
- while( c )
- {
- switch( e )
- {
- case PreFirst:
- if( IsAlphaNum( c ) )
- {
- t += c;
- e = InFirst;
- }
- else if( c == cAll )
- {
- rRL.Append( 0, nRecCnt - 1 );
- e = PostLast;
- }
- else if( !IsBlank( c ) )
- SYNTERR( c );
- break;
- case InFirst:
- if( c == cSep || c == cCont || IsBlank( c ) )
- {
- n = GetVal( t );
- if( n == 0xFFFFFFFF )
- SYNTERR( 0 );
- else
- NEWVAL( n1 );
-
- t.Erase();
-
- if( c == cSep )
- {
- rRL.Append( n1, n1 );
- e = PreFirst;
- }
- else if( c == cCont )
- {
- bExp2 = TRUE;
- e = InCont;
- }
- else
- e = PostFirst;
- }
- else if( IsAlphaNum( c ) )
- t += c;
- else
- SYNTERR( c );
- break;
- case PostFirst:
- if( c == cCont )
- {
- e = InCont;
- bExp2 = TRUE;
- }
- else if( c == cSep )
- {
- n = GetVal( t );
- if( n == 0xFFFFFFFF )
- SYNTERR( 0 );
- else
- NEWVAL( n1 );
-
- e = PreFirst;
- }
- else if( !IsBlank( c ) )
- SYNTERR( c );
- break;
- case InCont:
- if( IsAlphaNum( c ) )
- {
- t += c;
- e = InLast;
- }
- else if( IsBlank( c ) )
- e = PreLast;
- else if( c == cSep || c == cAll )
- {
- rRL.Append( n1, nRecCnt - 1 );
- bExp2 = FALSE;
- e = PreFirst;
- }
- else if( c != cCont )
- SYNTERR( c );
- break;
- case PreLast:
- if( IsAlphaNum( c ) )
- {
- t += c;
- e = InLast;
- }
- else if( !IsBlank( c ) )
- SYNTERR( c );
- break;
- break;
- case InLast:
- if( c == cSep || IsBlank( c ) )
- {
- n = GetVal( t );
- if( n == 0xFFFFFFFF )
- SYNTERR( 0 );
- else
- NEWVAL( n2 );
-
- t.Erase();
- ORDERN();
- rRL.Append( n1, n2 );
- bExp2 = FALSE;
- e = ( c == cSep )? PreFirst : PostLast;
- }
- else if( IsAlphaNum( c ) )
- t += c;
- else
- SYNTERR( c );
- break;
- case PostLast:
- if( c == cSep )
- {
- e = PreFirst;
- bExp2 = FALSE;
- }
- else if( !IsBlank( c ) )
- SYNTERR( c );
- break;
- }
-
- if( b )
- {
- p++;
- c = *p;
- }
- else
- c = 0x00;
- }
-
- if( bExp2 )
- {
- if( t.Len() )
- {
- n = GetVal( t );
- if( n == 0xFFFFFFFF )
- SYNTERR( 0 );
- else
- NEWVAL( n2 );
- ORDERN();
- }
- else
- n2 = nRecCnt - 1;
-
- if( b )
- rRL.Append( n1, n2 );
- }
-
-#undef SYNTERR
-#undef NEWVAL
-#undef ORDERN
-
- return b;
-}
-
-
-BOOL Biff8RecDumper::CreateOutStream()
-{
- if( pDumpStream )
- {
- pDumpStream->Close();
- DELANDNULL( pDumpStream );
- }
-
- if( !bSkip && pOutName )
- {
- pOutName->EraseLeadingChars( ' ' );
- pOutName->EraseTrailingChars( ' ' );
- pOutName->EraseLeadingChars( '\t' );
- pOutName->EraseTrailingChars( '\t' );
-
- pDumpStream = new SvFileStream( String::CreateFromAscii( pOutName->GetBuffer() ), STREAM_WRITE|STREAM_SHARE_DENYWRITE|(bClearFile?STREAM_TRUNC:0) );
-
- if( pDumpStream->IsOpen() )
- {
- pDumpStream->Seek( bClearFile? STREAM_SEEK_TO_BEGIN : STREAM_SEEK_TO_END );
- return TRUE;
- }
- else
- {
- DELANDNULL( pDumpStream );
- }
- }
-
- return FALSE;
-}
-
-
-SvFileStream* Biff8RecDumper::CreateInStream( const sal_Char* pN )
-{
- SvFileStream* p = new SvFileStream( String::CreateFromAscii( pN ), STREAM_READ|STREAM_SHARE_DENYWRITE );
-
- if( p->IsOpen() )
- return p;
- else
- {
- delete p;
- return NULL;
- }
-}
-
-
-SvFileStream* Biff8RecDumper::CreateInStream( const sal_Char* pP, const sal_Char* pN )
-{
- ByteString t( pP );
- const sal_Char c = t.GetChar( t.Len() - 1 );
-
- if( c != '\\' )
- t += '\\';
- else if( c != '/' )
- t += '/';
-
- t += pN;
-
- return CreateInStream( t.GetBuffer() );
-}
-
-
-void Biff8RecDumper::AddError( const UINT32 n, const ByteString& rT, const ByteString& rH )
-{
- DUMP_ERR* p = new DUMP_ERR( n, rT, rH );
-
- if( pFirst )
- pLast->pNext = p;
- else
- pFirst = p;
-
- pLast = p;
-}
-
-
-Biff8RecDumper::Biff8RecDumper( const XclImpRoot& rRoot, BOOL _bBIFF8 ) :
- XclImpRoot( rRoot ),
- bBIFF8( _bBIFF8 ),
- bEncrypted( false ),
- mnEscherPos( 0 )
-{
- nXFCount = 0;
- nFontIndex = 0;
- nInstances++;
- mnSubstream = EXC_BOF_UNKNOWN;
-
- if( !pCharType )
- {
- pCharType = new UINT8[ 256 ];
- memset( pCharType, 0x00, 256 );
-
- pCharVal = new UINT8[ 256 ];
- memset( pCharVal, 0x00, 256 );
-
- sal_Char c;
- UINT8 n;
-
-#define __TYPE(n) pCharType[(UINT8)n]
-#define __VAL(n) pCharVal[(UINT8)n]
-
- __TYPE( '\n' ) = CT_EOL;
- __TYPE( '\r' ) = CT_EOL;
-
- __TYPE( ' ' ) = CT_BLANK;
- __TYPE( '\t' ) = CT_BLANK;
-
- for( c = '0', n = 0 ; c <= '9' ; c++, n++ )
- {
- __TYPE( c ) = CT_NUM|CT_HEX|CT_ALPHANUM;
- __VAL( c ) = n;
- }
- for( c = 'a', n = 10 ; c <= 'f' ; c++, n++ )
- {
- __TYPE( c ) = CT_HEX|CT_ALPHA|CT_ALPHANUM|CT_LOWERALPHA;
- __VAL( c ) = n;
- }
- for( c = 'g' ; c <= 'z' ; c++ )
- __TYPE( c ) = CT_ALPHA|CT_ALPHANUM|CT_LOWERALPHA;
- for( c = 'A', n = 10 ; c <= 'F' ; c++, n++ )
- {
- __TYPE( c ) = CT_HEX|CT_ALPHA|CT_ALPHANUM|CT_UPPERALPHA;
- __VAL( c ) = n;
- }
- for( c = 'G' ; c <= 'Z' ; c++ )
- __TYPE( c ) = CT_ALPHA|CT_ALPHANUM|CT_UPPERALPHA;
-
-#undef __TYPE
-#undef __VAL
- }
-
- pDumpStream = NULL;
-
- if( !pBlankLine )
- {
- pBlankLine = new sal_Char[ nLenBlankLine + 1 ];
- memset( pBlankLine, ' ', nLenBlankLine );
- pBlankLine[ nLenBlankLine ] = 0x00;
- }
-
- pTitle = NULL;
- pOutName = NULL;
- pLevelPre = pLevelPreStringNT;
-
- nMaxBodyLines = 1024;
- bEndLoading = bSkip = bSkipOffset = bReadContRecs = bBlankLine = bExportBookStream = FALSE;
- bWarnings = TRUE;
-
- pDumpModes = NULL;
- ppRecNames = NULL;
-
- pFirst = pLast = pAct = NULL;
-
- cParSep = ',';
- cComm1 = cComm2 = '/';
-
- nFieldCnt = nItemCnt = nTabIndexCnt = 0;
-
- Init();
-}
-
-
-Biff8RecDumper::~Biff8RecDumper()
-{
- if( pDumpStream )
- {
- pDumpStream->Close();
- delete pDumpStream;
- }
-
- if( nInstances )
- {
- nInstances--;
- if( !nInstances )
- {
- delete[] pBlankLine;
- pBlankLine = NULL;
-
- delete[] pCharType;
- pCharType = NULL;
-
- delete[] pCharVal;
- pCharVal = NULL;
- }
- }
-
- if( pDumpModes )
- delete[] pDumpModes;
-
- if( ppRecNames )
- {
- ByteString** pp = ppRecNames;
- UINT16 n = nRecCnt;
- while( n )
- {
- if( *pp )
- delete *pp;
- pp++;
- n--;
- }
- delete[] ppRecNames;
- }
-
- if( pTitle )
- delete pTitle;
-
- if( pOutName )
- delete pOutName;
-
- DUMP_ERR* p = pFirst;
- DUMP_ERR* pD;
- if( p )
- {
- pD = p;
- p = p->pNext;
- delete pD;
- }
-}
-
-
-BOOL Biff8RecDumper::Dump( XclImpStream& r )
-{
- const DUMP_ERR* pErr = FirstErr();
-
- if( pErr )
- {
- if( pDumpStream )
- {
- SvFileStream& rOut = *pDumpStream;
- while( pErr )
- {
- rOut << "\nError";
- if( pErr->nLine )
- {
- ByteString t;
- t += ByteString::CreateFromInt32( pErr->nLine );
- rOut << " at line " << t.GetBuffer();
- }
-
- rOut << ": " << pErr->aText.GetBuffer();
-
- if( pErr->pHint )
- rOut << " (" << pErr->pHint->GetBuffer() << ')';
- pErr = NextErr();
- }
- rOut << '\n';
- }
- }
- else if( pDumpStream && !bSkip )
- {
- SvStream& rOutStrm = *pDumpStream;
-
- if( bExportBookStream && pOutName )
- {
- ByteString aBookOutName( *pOutName, 0, pOutName->Len() - 4 );
- aBookOutName.Append( "_book.xls" );
- SvFileStream aBook( String::CreateFromAscii( aBookOutName.GetBuffer() ), STREAM_WRITE|STREAM_SHARE_DENYWRITE|STREAM_TRUNC );
- if( aBook.IsOpen() )
- {
- const sal_uInt32 nBufLen = 0xFFFF;
- sal_uInt8 pBuffer[ nBufLen ];
- r.StoreGlobalPosition();
- while( r.StartNextRecord() )
- {
- r.ResetRecord( false );
- sal_uInt16 nRecSize = (sal_uInt16) Min( r.GetRecSize(), nBufLen );
- aBook << r.GetRecId() << nRecSize;
- r.Read( pBuffer, nRecSize );
- aBook.Write( pBuffer, nRecSize );
- }
- r.SeekGlobalPosition();
- }
- }
-
- if( pTitle )
- rOutStrm << pTitle->GetBuffer();
-
- pIn = &r;
- r.StoreGlobalPosition();
-
- ::std::auto_ptr< XclDumpStorageHeader > xStrgHerader;
- SotStorageRef xRootStrg = GetRootStorage();
- if( xRootStrg.Is() )
- xStrgHerader.reset( new XclDumpStorageHeader( *xRootStrg, rOutStrm, EMPTY_STRING ) );
-
- ::std::auto_ptr< ScfProgressBar > xProgress( new ScfProgressBar(
- GetDocShell(), String( RTL_CONSTASCII_USTRINGPARAM( "Dumper" ) ) ) );
- sal_Int32 nStreamSeg = xProgress->AddSegment( r.GetSvStreamSize() );
- xProgress->ActivateSegment( nStreamSeg );
-
- while( r.StartNextRecord() )
- {
- xProgress->ProgressAbs( r.GetSvStreamPos() );
- if( HasModeDump( r.GetRecId() ) )
- RecDump();
- }
-
- rOutStrm << "\n\n";
-
- pIn = NULL;
- xProgress.reset();
-
- r.SeekGlobalPosition();
-
- // dump substreams
- if( xRootStrg.Is() )
- {
- pIn = NULL;
- bool bOldEncr = bEncrypted;
- bEncrypted = false;
- DumpRecordStream( xRootStrg, EXC_STREAM_USERNAMES, EMPTY_STRING );
-
- pIn = &r;
- bEncrypted = bOldEncr;
- DumpRecordStream( xRootStrg, EXC_STREAM_REVLOG, EMPTY_STRING );
-
- pIn = NULL;
-
- DumpCtlsStream();
- DumpVbaProjectStorage();
- }
- }
-
- return !bEndLoading;
-}
-
-#undef Read1
-#undef Read2
-#undef Read4
-#undef Read8
-
-#endif
-
diff --git a/sc/source/filter/excel/excel.cxx b/sc/source/filter/excel/excel.cxx
index 3965d0acaf4e..8365ef0db3f9 100644
--- a/sc/source/filter/excel/excel.cxx
+++ b/sc/source/filter/excel/excel.cxx
@@ -98,15 +98,21 @@ FltError ScFormatFilterPluginImpl::ScImportExcel( SfxMedium& rMedium, ScDocument
CREATE_OUSTRING( "com.sun.star.comp.oox.ExcelBiffFilter" ), aArgs ), uno::UNO_QUERY_THROW );
xImporter->setTargetDocument( xComponent );
- MediaDescriptor aDescriptor;
- if( const SfxItemSet* pItemSet = rMedium.GetItemSet() )
+ MediaDescriptor aMediaDesc;
+ SfxItemSet* pItemSet = rMedium.GetItemSet();
+ if( pItemSet )
+ {
if( const SfxStringItem* pItem = static_cast< const SfxStringItem* >( pItemSet->GetItem( SID_FILE_NAME ) ) )
- aDescriptor[ MediaDescriptor::PROP_URL() ] <<= ::rtl::OUString( pItem->GetValue() );
- aDescriptor[ MediaDescriptor::PROP_INPUTSTREAM() ] <<= rMedium.GetInputStream();
+ aMediaDesc[ MediaDescriptor::PROP_URL() ] <<= ::rtl::OUString( pItem->GetValue() );
+ if( const SfxStringItem* pItem = static_cast< const SfxStringItem* >( pItemSet->GetItem( SID_PASSWORD ) ) )
+ aMediaDesc[ MediaDescriptor::PROP_PASSWORD() ] <<= ::rtl::OUString( pItem->GetValue() );
+ }
+ aMediaDesc[ MediaDescriptor::PROP_INPUTSTREAM() ] <<= rMedium.GetInputStream();
+ aMediaDesc[ MediaDescriptor::PROP_INTERACTIONHANDLER() ] <<= rMedium.GetInteractionHandler();
// call the filter
uno::Reference< document::XFilter > xFilter( xImporter, uno::UNO_QUERY_THROW );
- bool bResult = xFilter->filter( aDescriptor.getAsConstPropertyValueList() );
+ bool bResult = xFilter->filter( aMediaDesc.getAsConstPropertyValueList() );
// if filter returns false, document is invalid, or dumper has disabled import -> exit here
if( !bResult )
@@ -141,27 +147,27 @@ FltError ScFormatFilterPluginImpl::ScImportExcel( SfxMedium& rMedium, ScDocument
if( xRootStrg.Is() )
{
// try to open the "Book" stream
- SotStorageStreamRef xBookStrm5 = ScfTools::OpenStorageStreamRead( xRootStrg, EXC_STREAM_BOOK );
- XclBiff eBookStrm5Biff = xBookStrm5.Is() ? XclImpStream::DetectBiffVersion( *xBookStrm5 ) : EXC_BIFF_UNKNOWN;
+ SotStorageStreamRef xBookStrm = ScfTools::OpenStorageStreamRead( xRootStrg, EXC_STREAM_BOOK );
+ XclBiff eBookBiff = xBookStrm.Is() ? XclImpStream::DetectBiffVersion( *xBookStrm ) : EXC_BIFF_UNKNOWN;
// try to open the "Workbook" stream
- SotStorageStreamRef xBookStrm8 = ScfTools::OpenStorageStreamRead( xRootStrg, EXC_STREAM_WORKBOOK );
- XclBiff eBookStrm8Biff = xBookStrm8.Is() ? XclImpStream::DetectBiffVersion( *xBookStrm8 ) : EXC_BIFF_UNKNOWN;
+ SotStorageStreamRef xWorkbookStrm = ScfTools::OpenStorageStreamRead( xRootStrg, EXC_STREAM_WORKBOOK );
+ XclBiff eWorkbookBiff = xWorkbookStrm.Is() ? XclImpStream::DetectBiffVersion( *xWorkbookStrm ) : EXC_BIFF_UNKNOWN;
// decide which stream to use
- if( (eBookStrm8Biff != EXC_BIFF_UNKNOWN) && ((eBookStrm5Biff == EXC_BIFF_UNKNOWN) || (eBookStrm8Biff > eBookStrm5Biff)) )
+ if( (eWorkbookBiff != EXC_BIFF_UNKNOWN) && ((eBookBiff == EXC_BIFF_UNKNOWN) || (eWorkbookBiff > eBookBiff)) )
{
/* Only "Workbook" stream exists; or both streams exist,
and "Workbook" has higher BIFF version than "Book" stream. */
- xStrgStrm = xBookStrm8;
- eBiff = eBookStrm8Biff;
+ xStrgStrm = xWorkbookStrm;
+ eBiff = eWorkbookBiff;
}
- else if( eBookStrm5Biff != EXC_BIFF_UNKNOWN )
+ else if( eBookBiff != EXC_BIFF_UNKNOWN )
{
/* Only "Book" stream exists; or both streams exist,
and "Book" has higher BIFF version than "Workbook" stream. */
- xStrgStrm = xBookStrm5;
- eBiff = eBookStrm5Biff;
+ xStrgStrm = xBookStrm;
+ eBiff = eBookBiff;
}
pBookStrm = xStrgStrm;
diff --git a/sc/source/filter/excel/impop.cxx b/sc/source/filter/excel/impop.cxx
index cfbef0a15a6e..5a0ae1f9a972 100644
--- a/sc/source/filter/excel/impop.cxx
+++ b/sc/source/filter/excel/impop.cxx
@@ -46,6 +46,7 @@
#include <svx/pageitem.hxx>
#include <svx/colritem.hxx>
#include <sfx2/printer.hxx>
+#include <sfx2/docfile.hxx>
#include <svtools/zforlist.hxx>
#include <sfx2/objsh.hxx>
@@ -175,6 +176,15 @@ ImportExcel::~ImportExcel( void )
}
+void ImportExcel::ReadFileSharing()
+{
+ sal_uInt16 nRecommendReadOnly, nPasswordHash;
+ maStrm >> nRecommendReadOnly >> nPasswordHash;
+ if( (nRecommendReadOnly != 0) || (nPasswordHash != 0) )
+ if( SfxItemSet* pItemSet = GetMedium().GetItemSet() )
+ pItemSet->Put( SfxBoolItem( SID_DOC_READONLY, TRUE ) );
+}
+
sal_uInt16 ImportExcel::ReadXFIndex( bool bBiff2 )
{
sal_uInt16 nXFIdx = 0;
@@ -604,7 +614,6 @@ void ImportExcel::DocPasssword( void )
void ImportExcel::Codepage( void )
{
- maStrm.EnableDecryption();
SetCodePage( maStrm.ReaduInt16() );
}
diff --git a/sc/source/filter/excel/makefile.mk b/sc/source/filter/excel/makefile.mk
index 4fffb1ef3ed1..5b483f04729d 100644
--- a/sc/source/filter/excel/makefile.mk
+++ b/sc/source/filter/excel/makefile.mk
@@ -103,7 +103,6 @@ SLOFILES = \
$(SLO)$/xlpage.obj \
$(SLO)$/xlpivot.obj \
$(SLO)$/xlroot.obj \
- $(SLO)$/xlstream.obj \
$(SLO)$/xlstyle.obj \
$(SLO)$/xltools.obj \
$(SLO)$/xltracer.obj \
@@ -153,6 +152,7 @@ EXCEPTIONSFILES = \
$(SLO)$/xlchart.obj \
$(SLO)$/xlformula.obj \
$(SLO)$/xlpivot.obj \
+ $(SLO)$/xlroot.obj \
$(SLO)$/xlstyle.obj \
$(SLO)$/xlview.obj
diff --git a/sc/source/filter/excel/read.cxx b/sc/source/filter/excel/read.cxx
index e7473ba23d02..a4a286d27171 100644
--- a/sc/source/filter/excel/read.cxx
+++ b/sc/source/filter/excel/read.cxx
@@ -305,6 +305,7 @@ FltError ImportExcel::Read( void )
if( eLastErr != ERRCODE_NONE )
eAkt = Z_Ende;
break;
+ case EXC_ID_FILESHARING: ReadFileSharing(); break;
case 0x41: rTabViewSett.ReadPane( maStrm ); break;
case 0x42: Codepage(); break; // CODEPAGE [ 2345]
case 0x56: Builtinfmtcnt(); break; // BUILTINFMTCNT[ 34 ]
@@ -374,6 +375,7 @@ FltError ImportExcel::Read( void )
if( eLastErr != ERRCODE_NONE )
eAkt = Z_Ende;
break;
+ case EXC_ID_FILESHARING: ReadFileSharing(); break;
case 0x41: rTabViewSett.ReadPane( maStrm ); break;
case 0x42: Codepage(); break; // CODEPAGE [ 2345]
case 0x55: DefColWidth(); break;
@@ -412,6 +414,7 @@ FltError ImportExcel::Read( void )
if( eLastErr != ERRCODE_NONE )
eAkt = Z_Ende;
break;
+ case EXC_ID_FILESHARING: ReadFileSharing(); break;
case 0x17: Externsheet(); break; // EXTERNSHEET [ 2345]
case 0x42: Codepage(); break; // CODEPAGE [ 2345]
case 0x55: DefColWidth(); break;
@@ -546,6 +549,7 @@ FltError ImportExcel::Read( void )
if( eLastErr != ERRCODE_NONE )
eAkt = Z_Ende;
break;
+ case EXC_ID_FILESHARING: ReadFileSharing(); break;
case 0x3D: Window1(); break;
case 0x42: Codepage(); break; // CODEPAGE [ 2345]
case 0x85: Boundsheet(); break; // BOUNDSHEET [ 5]
@@ -902,6 +906,7 @@ FltError ImportExcel8::Read( void )
if( eLastErr != ERRCODE_NONE )
eAkt = EXC_STATE_END;
break;
+ case EXC_ID_FILESHARING: ReadFileSharing(); break;
case 0x3D: Window1(); break;
case 0x42: Codepage(); break; // CODEPAGE [ 2345 ]
case 0x85: Boundsheet(); break; // BOUNDSHEET [ 5 ]
diff --git a/sc/source/filter/excel/xestream.cxx b/sc/source/filter/excel/xestream.cxx
index 6b2f53c8056a..45ced68de006 100644
--- a/sc/source/filter/excel/xestream.cxx
+++ b/sc/source/filter/excel/xestream.cxx
@@ -485,7 +485,7 @@ XclExpBiff8Encrypter::XclExpBiff8Encrypter( const XclExpRoot& rRoot, const sal_u
String aPass = rRoot.GetPassword();
if (aPass.Len() == 0)
// Empty password. Get the default biff8 password.
- aPass = XclCryptoHelper::GetBiff8WbProtPassword();
+ aPass = rRoot.GetDefaultPassword();
Init(aPass, nDocId, nSalt);
}
diff --git a/sc/source/filter/excel/xicontent.cxx b/sc/source/filter/excel/xicontent.cxx
index 24c1999b581b..b57297b344dc 100644
--- a/sc/source/filter/excel/xicontent.cxx
+++ b/sc/source/filter/excel/xicontent.cxx
@@ -1011,7 +1011,7 @@ XclImpDecrypterRef lclReadFilepass5( XclImpStream& rStrm )
{
sal_uInt16 nKey, nHash;
rStrm >> nKey >> nHash;
- xDecr.reset( new XclImpBiff5Decrypter( rStrm.GetRoot(), nKey, nHash ) );
+ xDecr.reset( new XclImpBiff5Decrypter( nKey, nHash ) );
}
return xDecr;
}
@@ -1022,14 +1022,13 @@ XclImpDecrypterRef lclReadFilepass8_Standard( XclImpStream& rStrm )
DBG_ASSERT( rStrm.GetRecLeft() == 48, "lclReadFilepass8 - wrong record size" );
if( rStrm.GetRecLeft() == 48 )
{
- sal_uInt8 pnDocId[ 16 ];
- sal_uInt8 pnSaltData[ 16 ];
- sal_uInt8 pnSaltHash[ 16 ];
- rStrm.Read( pnDocId, 16 );
- rStrm.Read( pnSaltData, 16 );
- rStrm.Read( pnSaltHash, 16 );
- xDecr.reset( new XclImpBiff8Decrypter(
- rStrm.GetRoot(), pnDocId, pnSaltData, pnSaltHash ) );
+ sal_uInt8 pnSalt[ 16 ];
+ sal_uInt8 pnVerifier[ 16 ];
+ sal_uInt8 pnVerifierHash[ 16 ];
+ rStrm.Read( pnSalt, 16 );
+ rStrm.Read( pnVerifier, 16 );
+ rStrm.Read( pnVerifierHash, 16 );
+ xDecr.reset( new XclImpBiff8Decrypter( pnSalt, pnVerifier, pnVerifierHash ) );
}
return xDecr;
}
@@ -1087,6 +1086,7 @@ ErrCode XclImpDecryptHelper::ReadFilepass( XclImpStream& rStrm )
XclImpDecrypterRef xDecr;
rStrm.DisableDecryption();
+ // read the FILEPASS record and create a new decrypter object
switch( rStrm.GetRoot().GetBiff() )
{
case EXC_BIFF2:
@@ -1097,21 +1097,15 @@ ErrCode XclImpDecryptHelper::ReadFilepass( XclImpStream& rStrm )
default: DBG_ERROR_BIFF();
};
- if (!xDecr.is())
- return EXC_ENCR_ERROR_UNSUPP_CRYPT;
-
// set decrypter at import stream
rStrm.SetDecrypter( xDecr );
- // Store the document password for export.
- SfxItemSet* pSet = rStrm.GetRoot().GetDocShell()->GetMedium()->GetItemSet();
- if (pSet)
- {
- String aPass = xDecr->GetPassword();
- pSet->Put( SfxStringItem(SID_PASSWORD, aPass) );
- }
+ // request and verify a password (decrypter implements IDocPasswordVerifier)
+ if( xDecr.is() )
+ rStrm.GetRoot().RequestPassword( *xDecr );
- return xDecr->GetError();
+ // return error code (success, wrong password, etc.)
+ return xDecr.is() ? xDecr->GetError() : EXC_ENCR_ERROR_UNSUPP_CRYPT;
}
// Document protection ========================================================
diff --git a/sc/source/filter/excel/xiroot.cxx b/sc/source/filter/excel/xiroot.cxx
index 55ba4bdc4cb4..30cab47f57f5 100644
--- a/sc/source/filter/excel/xiroot.cxx
+++ b/sc/source/filter/excel/xiroot.cxx
@@ -52,7 +52,6 @@
XclImpRootData::XclImpRootData( XclBiff eBiff, SfxMedium& rMedium,
SotStorageRef xRootStrg, ScDocument& rDoc, rtl_TextEncoding eTextEnc ) :
XclRootData( eBiff, rMedium, xRootStrg, rDoc, eTextEnc, false ),
- mbPassQueried( false ),
mbHasCodePage( false )
{
}
@@ -270,16 +269,5 @@ String XclImpRoot::GetScAddInName( const String& rXclName ) const
return rXclName;
}
-const String& XclImpRoot::QueryPassword() const
-{
- if( !mrImpData.mbPassQueried )
- {
- mrImpData.maPassw = ScfApiHelper::QueryPasswordForMedium( GetMedium() );
- // set to true, even if dialog has been cancelled (never ask twice)
- mrImpData.mbPassQueried = true;
- }
- return mrImpData.maPassw;
-}
-
// ============================================================================
diff --git a/sc/source/filter/excel/xistream.cxx b/sc/source/filter/excel/xistream.cxx
index e7780c065118..b168c4389c4c 100644
--- a/sc/source/filter/excel/xistream.cxx
+++ b/sc/source/filter/excel/xistream.cxx
@@ -31,13 +31,16 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sc.hxx"
-// ============================================================================
#include "xistream.hxx"
#include "xlstring.hxx"
#include "xiroot.hxx"
#include <vector>
+using ::rtl::OString;
+using ::rtl::OUString;
+using ::rtl::OUStringToOString;
+
// ============================================================================
// Decryption
// ============================================================================
@@ -50,6 +53,7 @@ XclImpDecrypter::XclImpDecrypter() :
}
XclImpDecrypter::XclImpDecrypter( const XclImpDecrypter& rSrc ) :
+ ::comphelper::IDocPasswordVerifier(),
mnError( rSrc.mnError ),
mnOldPos( STREAM_SEEK_TO_END ),
mnRecSize( 0 )
@@ -68,6 +72,13 @@ XclImpDecrypterRef XclImpDecrypter::Clone() const
return xNewDecr;
}
+::comphelper::DocPasswordVerifierResult XclImpDecrypter::verifyPassword( const OUString& rPassword )
+{
+ bool bValid = OnVerify( rPassword );
+ mnError = bValid ? ERRCODE_NONE : ERRCODE_ABORT;
+ return bValid ? ::comphelper::DocPasswordVerifierResult_OK : ::comphelper::DocPasswordVerifierResult_WRONG_PASSWORD;
+}
+
void XclImpDecrypter::Update( SvStream& rStrm, sal_uInt16 nRecSize )
{
if( IsValid() )
@@ -99,47 +110,48 @@ sal_uInt16 XclImpDecrypter::Read( SvStream& rStrm, void* pData, sal_uInt16 nByte
return nRet;
}
-const String XclImpDecrypter::GetPassword() const
-{
- return maPass;
-}
+// ----------------------------------------------------------------------------
-void XclImpDecrypter::SetHasValidPassword( bool bValid )
+XclImpBiff5Decrypter::XclImpBiff5Decrypter( sal_uInt16 nKey, sal_uInt16 nHash ) :
+ maPassword( 16 ),
+ mnKey( nKey ),
+ mnHash( nHash )
{
- mnError = bValid ? ERRCODE_NONE : EXC_ENCR_ERROR_WRONG_PASS;
}
-void XclImpDecrypter::SetPassword( const String& rPass )
+XclImpBiff5Decrypter::XclImpBiff5Decrypter( const XclImpBiff5Decrypter& rSrc ) :
+ XclImpDecrypter( rSrc ),
+ maPassword( rSrc.maPassword ),
+ mnKey( rSrc.mnKey ),
+ mnHash( rSrc.mnHash )
{
- maPass = rPass;
+ if( IsValid() )
+ maCodec.InitKey( &maPassword.front() );
}
-// ----------------------------------------------------------------------------
-
-XclImpBiff5Decrypter::XclImpBiff5Decrypter( const XclImpRoot& rRoot, sal_uInt16 nKey, sal_uInt16 nHash )
+XclImpBiff5Decrypter* XclImpBiff5Decrypter::OnClone() const
{
- Init( XclCryptoHelper::GetBiff5WbProtPassword(), nKey, nHash );
- if( !IsValid() )
- {
- //! TODO: correct byte string encoding in all cases?
- ByteString aPass( rRoot.QueryPassword(), RTL_TEXTENCODING_MS_1252 );
- Init( aPass, nKey, nHash );
- }
+ return new XclImpBiff5Decrypter( *this );
}
-XclImpBiff5Decrypter::XclImpBiff5Decrypter( const XclImpBiff5Decrypter& rSrc ) :
- XclImpDecrypter( rSrc )
+bool XclImpBiff5Decrypter::OnVerify( const OUString& rPassword )
{
- if( rSrc.IsValid() )
+ /* Convert password to a byte string. TODO: this needs some finetuning
+ according to the spec... */
+ OString aBytePassword = OUStringToOString( rPassword, osl_getThreadTextEncoding() );
+ sal_Int32 nLen = aBytePassword.getLength();
+ if( (0 < nLen) && (nLen < 16) )
{
- memcpy( mpnPassw, rSrc.mpnPassw, sizeof( mpnPassw ) );
- maCodec.InitKey( mpnPassw );
- }
-}
+ // copy byte string to sal_uInt8 array
+ maPassword.clear();
+ maPassword.resize( 16, 0 );
+ memcpy( &maPassword.front(), aBytePassword.getStr(), static_cast< size_t >( nLen ) );
-XclImpBiff5Decrypter* XclImpBiff5Decrypter::OnClone() const
-{
- return new XclImpBiff5Decrypter( *this );
+ // init codec
+ maCodec.InitKey( &maPassword.front() );
+ return maCodec.VerifyKey( mnKey, mnHash );
+ }
+ return false;
}
void XclImpBiff5Decrypter::OnUpdate( sal_Size /*nOldStrmPos*/, sal_Size nNewStrmPos, sal_uInt16 nRecSize )
@@ -155,48 +167,26 @@ sal_uInt16 XclImpBiff5Decrypter::OnRead( SvStream& rStrm, sal_uInt8* pnData, sal
return nRet;
}
-void XclImpBiff5Decrypter::Init( const ByteString& rPass, sal_uInt16 nKey, sal_uInt16 nHash )
-{
- xub_StrLen nLen = rPass.Len();
- bool bValid = (0 < nLen) && (nLen < 16);
-
- if( bValid )
- {
- // transform ByteString to sal_uInt8 array
- memset( mpnPassw, 0, sizeof( mpnPassw ) );
- for( xub_StrLen nChar = 0; nChar < nLen; ++nChar )
- mpnPassw[ nChar ] = static_cast< sal_uInt8 >( rPass.GetChar( nChar ) );
- // init codec
- maCodec.InitKey( mpnPassw );
- bValid = maCodec.VerifyKey( nKey, nHash );
-
- String aUniPass( rPass, RTL_TEXTENCODING_MS_1252 );
- SetPassword( aUniPass );
- }
-
- SetHasValidPassword( bValid );
-}
-
// ----------------------------------------------------------------------------
-XclImpBiff8Decrypter::XclImpBiff8Decrypter(
- const XclImpRoot& rRoot, sal_uInt8 pnDocId[ 16 ],
- sal_uInt8 pnSaltData[ 16 ], sal_uInt8 pnSaltHash[ 16 ] )
+XclImpBiff8Decrypter::XclImpBiff8Decrypter( sal_uInt8 pnSalt[ 16 ],
+ sal_uInt8 pnVerifier[ 16 ], sal_uInt8 pnVerifierHash[ 16 ] ) :
+ maPassword( 16, 0 ),
+ maSalt( pnSalt, pnSalt + 16 ),
+ maVerifier( pnVerifier, pnVerifier + 16 ),
+ maVerifierHash( pnVerifierHash, pnVerifierHash + 16 )
{
- Init( XclCryptoHelper::GetBiff8WbProtPassword(), pnDocId, pnSaltData, pnSaltHash );
- if( !IsValid() )
- Init( rRoot.QueryPassword(), pnDocId, pnSaltData, pnSaltHash );
}
XclImpBiff8Decrypter::XclImpBiff8Decrypter( const XclImpBiff8Decrypter& rSrc ) :
- XclImpDecrypter( rSrc )
+ XclImpDecrypter( rSrc ),
+ maPassword( rSrc.maPassword ),
+ maSalt( rSrc.maSalt ),
+ maVerifier( rSrc.maVerifier ),
+ maVerifierHash( rSrc.maVerifierHash )
{
- if( rSrc.IsValid() )
- {
- memcpy( mpnPassw, rSrc.mpnPassw, sizeof( mpnPassw ) );
- memcpy( mpnDocId, rSrc.mpnDocId, sizeof( mpnDocId ) );
- maCodec.InitKey( mpnPassw, mpnDocId );
- }
+ if( IsValid() )
+ maCodec.InitKey( &maPassword.front(), &maSalt.front() );
}
XclImpBiff8Decrypter* XclImpBiff8Decrypter::OnClone() const
@@ -204,6 +194,27 @@ XclImpBiff8Decrypter* XclImpBiff8Decrypter::OnClone() const
return new XclImpBiff8Decrypter( *this );
}
+bool XclImpBiff8Decrypter::OnVerify( const OUString& rPassword )
+{
+ sal_Int32 nLen = rPassword.getLength();
+ if( (0 < nLen) && (nLen < 16) )
+ {
+ // copy string to sal_uInt16 array
+ maPassword.clear();
+ maPassword.resize( 16, 0 );
+ const sal_Unicode* pcChar = rPassword.getStr();
+ const sal_Unicode* pcCharEnd = pcChar + nLen;
+ ::std::vector< sal_uInt16 >::iterator aIt = maPassword.begin();
+ for( ; pcChar < pcCharEnd; ++pcChar, ++aIt )
+ *aIt = static_cast< sal_uInt16 >( *pcChar );
+
+ // init codec
+ maCodec.InitKey( &maPassword.front(), &maSalt.front() );
+ return maCodec.VerifyKey( &maVerifier.front(), &maVerifierHash.front() );
+ }
+ return false;
+}
+
void XclImpBiff8Decrypter::OnUpdate( sal_Size nOldStrmPos, sal_Size nNewStrmPos, sal_uInt16 /*nRecSize*/ )
{
if( nNewStrmPos != nOldStrmPos )
@@ -252,31 +263,6 @@ sal_uInt16 XclImpBiff8Decrypter::OnRead( SvStream& rStrm, sal_uInt8* pnData, sal
return nRet;
}
-void XclImpBiff8Decrypter::Init(
- const String& rPass, sal_uInt8 pnDocId[ 16 ],
- sal_uInt8 pnSaltData[ 16 ], sal_uInt8 pnSaltHash[ 16 ] )
-{
- xub_StrLen nLen = rPass.Len();
- bool bValid = (0 < nLen) && (nLen < 16);
-
- if( bValid )
- {
- // transform String to sal_uInt16 array
- memset( mpnPassw, 0, sizeof( mpnPassw ) );
- for( xub_StrLen nChar = 0; nChar < nLen; ++nChar )
- mpnPassw[ nChar ] = static_cast< sal_uInt16 >( rPass.GetChar( nChar ) );
- // copy document ID
- memcpy( mpnDocId, pnDocId, sizeof( mpnDocId ) );
- // init codec
- maCodec.InitKey( mpnPassw, mpnDocId );
- bValid = maCodec.VerifyKey( pnSaltData, pnSaltHash );
-
- SetPassword(rPass);
- }
-
- SetHasValidPassword( bValid );
-}
-
sal_uInt32 XclImpBiff8Decrypter::GetBlock( sal_Size nStrmPos ) const
{
return static_cast< sal_uInt32 >( nStrmPos / EXC_ENCR_BLOCKSIZE );
diff --git a/sc/source/filter/excel/xlroot.cxx b/sc/source/filter/excel/xlroot.cxx
index 8f5ddadd0370..29522f4f50ff 100644
--- a/sc/source/filter/excel/xlroot.cxx
+++ b/sc/source/filter/excel/xlroot.cxx
@@ -79,6 +79,7 @@ XclRootData::XclRootData( XclBiff eBiff, SfxMedium& rMedium,
mrMedium( rMedium ),
mxRootStrg( xRootStrg ),
mrDoc( rDoc ),
+ maDefPassword( CREATE_STRING( "VelvetSweatshop" ) ),
meTextEnc( eTextEnc ),
meSysLang( Application::GetSettings().GetLanguage() ),
meDocLang( Application::GetSettings().GetLanguage() ),
@@ -198,6 +199,13 @@ void XclRoot::SetCharWidth( const XclFontData& rFontData )
}
}
+String XclRoot::RequestPassword( ::comphelper::IDocPasswordVerifier& rVerifier ) const
+{
+ ::std::vector< OUString > aDefaultPasswords;
+ aDefaultPasswords.push_back( mrData.maDefPassword );
+ return ScfApiHelper::QueryPasswordForMedium( mrData.mrMedium, rVerifier, &aDefaultPasswords );
+}
+
bool XclRoot::HasVbaStorage() const
{
SotStorageRef xRootStrg = GetRootStorage();
diff --git a/sc/source/filter/excel/xlstream.cxx b/sc/source/filter/excel/xlstream.cxx
deleted file mode 100644
index 7340e073c51f..000000000000
--- a/sc/source/filter/excel/xlstream.cxx
+++ /dev/null
@@ -1,52 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: xlstream.cxx,v $
- * $Revision: 1.5 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_sc.hxx"
-
-// ============================================================================
-#include "xlstream.hxx"
-
-// Encryption/decryption ======================================================
-
-const ByteString XclCryptoHelper::GetBiff5WbProtPassword()
-{
- static const ByteString saPass( "VelvetSweatshop" );
- return saPass;
-}
-
-const String XclCryptoHelper::GetBiff8WbProtPassword()
-{
- static const String saPass( GetBiff5WbProtPassword(), RTL_TEXTENCODING_ASCII_US );
- return saPass;
-}
-
-// ============================================================================
-
diff --git a/sc/source/filter/ftools/fapihelper.cxx b/sc/source/filter/ftools/fapihelper.cxx
index 3befbf4d866f..31190b6407b1 100644
--- a/sc/source/filter/ftools/fapihelper.cxx
+++ b/sc/source/filter/ftools/fapihelper.cxx
@@ -35,9 +35,8 @@
#include <algorithm>
#include <com/sun/star/lang/XServiceName.hpp>
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/task/XInteractionHandler.hpp>
-#include <com/sun/star/task/XInteractionRequest.hpp>
#include <com/sun/star/beans/XPropertyState.hpp>
+#include <comphelper/docpasswordhelper.hxx>
#include <comphelper/processfactory.hxx>
#include <tools/urlobj.hxx>
#include <sfx2/objsh.hxx>
@@ -45,7 +44,6 @@
#include <sfx2/sfxsids.hrc>
#include <svtools/stritem.hxx>
#include <svtools/itemset.hxx>
-#include <svtools/docpasswdrequest.hxx>
#include "miscuno.hxx"
using ::rtl::OUString;
@@ -55,14 +53,14 @@ using ::com::sun::star::uno::Sequence;
using ::com::sun::star::uno::Exception;
using ::com::sun::star::uno::UNO_QUERY;
using ::com::sun::star::uno::UNO_QUERY_THROW;
+using ::com::sun::star::uno::UNO_SET_THROW;
using ::com::sun::star::uno::TypeClass_BOOLEAN;
using ::com::sun::star::uno::XInterface;
using ::com::sun::star::beans::XPropertySet;
using ::com::sun::star::beans::XPropertyState;
using ::com::sun::star::lang::XServiceName;
using ::com::sun::star::lang::XMultiServiceFactory;
-using ::com::sun::star::task::XInteractionHandler;
-using ::com::sun::star::task::XInteractionRequest;
+using ::com::sun::star::task::PasswordRequestMode_PASSWORD_ENTER;
// Static helper functions ====================================================
@@ -141,40 +139,25 @@ Reference< XInterface > ScfApiHelper::CreateInstanceWithArgs(
return CreateInstanceWithArgs( ::comphelper::getProcessServiceFactory(), rServiceName, rArgs );
}
-String ScfApiHelper::QueryPasswordForMedium( SfxMedium& rMedium )
+String ScfApiHelper::QueryPasswordForMedium( SfxMedium& rMedium,
+ ::comphelper::IDocPasswordVerifier& rVerifier, const ::std::vector< OUString >* pDefaultPasswords )
{
- String aPassw;
- const SfxItemSet* pSet = rMedium.GetItemSet();
+ OUString aMediaPassword;
+ SfxItemSet* pItemSet = rMedium.GetItemSet();
const SfxPoolItem *pPasswordItem;
+ if( pItemSet && (SFX_ITEM_SET == pItemSet->GetItemState( SID_PASSWORD, TRUE, &pPasswordItem )) )
+ aMediaPassword = static_cast< const SfxStringItem* >( pPasswordItem )->GetValue();
+ OUString aDocName = INetURLObject( rMedium.GetOrigURL() ).GetName( INetURLObject::DECODE_WITH_CHARSET );
- if( pSet && (SFX_ITEM_SET == pSet->GetItemState( SID_PASSWORD, TRUE, &pPasswordItem )) )
- {
- aPassw = static_cast< const SfxStringItem* >( pPasswordItem )->GetValue();
- }
- else
- {
- try
- {
- Reference< XInteractionHandler > xHandler( rMedium.GetInteractionHandler() );
- if( xHandler.is() )
- {
- RequestDocumentPassword* pRequest = new RequestDocumentPassword(
- ::com::sun::star::task::PasswordRequestMode_PASSWORD_ENTER,
- INetURLObject( rMedium.GetOrigURL() ).GetName( INetURLObject::DECODE_WITH_CHARSET ) );
- Reference< XInteractionRequest > xRequest( pRequest );
-
- xHandler->handle( xRequest );
-
- if( pRequest->isPassword() )
- aPassw = pRequest->getPassword();
- }
- }
- catch( Exception& )
- {
- }
- }
+ bool bIsDefaultPassword = false;
+ OUString aPassword = ::comphelper::DocPasswordHelper::requestAndVerifyDocPassword(
+ rVerifier, aMediaPassword, rMedium.GetInteractionHandler(), aDocName,
+ ::comphelper::DocPasswordRequestType_MS, pDefaultPasswords, &bIsDefaultPassword );
+
+ if( !bIsDefaultPassword && (aPassword.getLength() > 0) && pItemSet )
+ pItemSet->Put( SfxStringItem( SID_PASSWORD, aPassword ) );
- return aPassw;
+ return aPassword;
}
// Property sets ==============================================================
diff --git a/sc/source/filter/inc/fapihelper.hxx b/sc/source/filter/inc/fapihelper.hxx
index d8881889e7fa..f3cdc782ee9c 100644
--- a/sc/source/filter/inc/fapihelper.hxx
+++ b/sc/source/filter/inc/fapihelper.hxx
@@ -45,6 +45,8 @@ namespace com { namespace sun { namespace star {
namespace lang { class XMultiServiceFactory; }
} } }
+namespace comphelper { class IDocPasswordVerifier; }
+
// Static helper functions ====================================================
class SfxMedium;
@@ -109,7 +111,9 @@ public:
/** Opens a password dialog and returns the entered password.
@return The entered password or an empty string on 'Cancel' or any error. */
- static String QueryPasswordForMedium( SfxMedium& rMedium );
+ static String QueryPasswordForMedium( SfxMedium& rMedium,
+ ::comphelper::IDocPasswordVerifier& rVerifier,
+ const ::std::vector< ::rtl::OUString >* pDefaultPasswords = 0 );
};
template< typename Type >
diff --git a/sc/source/filter/inc/fdumper.hxx b/sc/source/filter/inc/fdumper.hxx
deleted file mode 100644
index ea4aabf69009..000000000000
--- a/sc/source/filter/inc/fdumper.hxx
+++ /dev/null
@@ -1,1520 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: fdumper.hxx,v $
- * $Revision: 1.8.28.2 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SC_FDUMPER_HXX
-#define SC_FDUMPER_HXX
-
-#define SCF_INCL_DUMPER (OSL_DEBUG_LEVEL > 0) && 0
-
-#include <map>
-// #include <math.h>
-#include "ftools.hxx"
-
-#if SCF_INCL_DUMPER
-
-class SvStream;
-class SfxMedium;
-class SfxObjectShell;
-class Color;
-class DateTime;
-
-namespace scf {
-namespace dump {
-
-#define SCF_DUMP_UNUSED "unused"
-#define SCF_DUMP_UNKNOWN "?unknown"
-
-#define SCF_DUMP_ERRASCII( ascii ) "?err:" ascii
-#define SCF_DUMP_ERRSTRING( ascii ) CREATE_STRING( SCF_DUMP_ERRASCII( ascii ) )
-
-#define SCF_DUMP_ERR_NOMAP SCF_DUMP_ERRSTRING( "no-map" )
-#define SCF_DUMP_ERR_NONAME SCF_DUMP_ERRSTRING( "no-name" )
-#define SCF_DUMP_ERR_STREAM SCF_DUMP_ERRSTRING( "stream-error" )
-
-// ============================================================================
-// ============================================================================
-
-/** Specifiers for atomic data types. */
-enum DataType
-{
- DATATYPE_VOID, /// No data type.
- DATATYPE_INT8, /// Signed 8-bit integer.
- DATATYPE_UINT8, /// Unsigned 8-bit integer.
- DATATYPE_INT16, /// Signed 16-bit integer.
- DATATYPE_UINT16, /// Unsigned 16-bit integer.
- DATATYPE_INT32, /// Signed 32-bit integer.
- DATATYPE_UINT32, /// Unsigned 32-bit integer.
- DATATYPE_INT64, /// Signed 64-bit integer.
- DATATYPE_UINT64, /// Unsigned 64-bit integer.
- DATATYPE_FLOAT, /// Floating-point, single precision.
- DATATYPE_DOUBLE /// Floating-point, double precision.
-};
-
-// ----------------------------------------------------------------------------
-
-/** Specifiers for the output format of values. */
-enum FormatType
-{
- FORMATTYPE_NONE, /// No numeric format (e.g. show name only).
- FORMATTYPE_DEC, /// Decimal.
- FORMATTYPE_HEX, /// Hexadecimal.
- FORMATTYPE_BIN, /// Binary.
- FORMATTYPE_FIX, /// Fixed-point.
- FORMATTYPE_BOOL /// Boolean ('true' or 'false').
-};
-
-// ----------------------------------------------------------------------------
-
-/** Describes the output format of a data item.
-
- Data items are written in the following format:
-
- <NAME>=<VALUE>=<NAME-FROM-LIST>
-
- NAME is the name of the data item. The name is contained in the members
- maItemName and maItemNameUtf8. If the name is empty, only the value is
- written (without a leading equality sign).
-
- VALUE is the numeric value of the data item. Its format is dependent on the
- output format given in the member meFmtType. If the format type is
- FORMATTYPE_NONE, no value is written.
-
- NAME-FROM-LIST is a symbolic name for the current value of the data item.
- Various types of name lists produce different names for values, which can
- be used for enumerations or names for single bits in bitfields (see class
- NameListBase and derived classes). The name of the list is given in the
- member maListName. If it is empty, no name is written for the value.
- */
-struct ItemFormat
-{
- DataType meDataType; /// Data type of the item.
- FormatType meFmtType; /// Output format for the value.
- String maItemName; /// Name of the item.
- ByteString maItemNameUtf8; /// Name of the item, converted to UTF-8.
- String maListName; /// Name of a name list to be used for this item.
-
- explicit ItemFormat();
-
- void Set( DataType eDataType, FormatType eFmtType, const String& rItemName );
- void Set( DataType eDataType, FormatType eFmtType, const String& rItemName, const String& rListName );
-
- /** Initializes the struct from a vector of strings containing the item format.
-
- The vector must contain at least 2 strings. The struct is filled from
- the strings in the vector in the following order:
- 1) Data type (one of: [u]int8, [u]int16, [u]int32, [u]int64, float, double).
- 2) Format type (one of: dec, hex, bin, fix, bool, unused, unknown).
- 3) Item name (optional).
- 4) Name list name (optional).
-
- @return Iterator pointing to the first unhandled string.
- */
- ScfStringVec::const_iterator Parse( const ScfStringVec& rFormatVec );
-
- /** Initializes the struct from a string containing the item format.
-
- The string must have the following format:
- DATATYPE,FORMATTYPE[,ITEMNAME[,LISTNAME]]
-
- DATATYPE is the data type of the item (see above for possible values).
- FORMATTYPE is the format type of the item (see above for possible values).
- ITEMNAME is the name of the item (optional).
- LISTNAME is the name of a name list (optional).
-
- @return List containing remaining unhandled format strings.
- */
- ScfStringVec Parse( const String& rFormatStr );
-};
-
-// ============================================================================
-// ============================================================================
-
-/** Static helper functions for formatted output to strings. */
-class StringHelper
-{
-public:
- // append string to string ------------------------------------------------
-
- static void AppendString( String& rStr, const String& rData, xub_StrLen nWidth = 0, sal_Unicode cFill = ' ' );
-
- // append decimal ---------------------------------------------------------
-
- static void AppendDec( String& rStr, sal_uInt8 nData, xub_StrLen nWidth = 0, sal_Unicode cFill = ' ' );
- static void AppendDec( String& rStr, sal_Int8 nData, xub_StrLen nWidth = 0, sal_Unicode cFill = ' ' );
- static void AppendDec( String& rStr, sal_uInt16 nData, xub_StrLen nWidth = 0, sal_Unicode cFill = ' ' );
- static void AppendDec( String& rStr, sal_Int16 nData, xub_StrLen nWidth = 0, sal_Unicode cFill = ' ' );
- static void AppendDec( String& rStr, sal_uInt32 nData, xub_StrLen nWidth = 0, sal_Unicode cFill = ' ' );
- static void AppendDec( String& rStr, sal_Int32 nData, xub_StrLen nWidth = 0, sal_Unicode cFill = ' ' );
- static void AppendDec( String& rStr, sal_uInt64 nData, xub_StrLen nWidth = 0, sal_Unicode cFill = ' ' );
- static void AppendDec( String& rStr, sal_Int64 nData, xub_StrLen nWidth = 0, sal_Unicode cFill = ' ' );
- static void AppendDec( String& rStr, double fData, xub_StrLen nWidth = 0, sal_Unicode cFill = ' ' );
-
- // append hexadecimal -----------------------------------------------------
-
- static void AppendHex( String& rStr, sal_uInt8 nData, bool bPrefix = true );
- static void AppendHex( String& rStr, sal_Int8 nData, bool bPrefix = true );
- static void AppendHex( String& rStr, sal_uInt16 nData, bool bPrefix = true );
- static void AppendHex( String& rStr, sal_Int16 nData, bool bPrefix = true );
- static void AppendHex( String& rStr, sal_uInt32 nData, bool bPrefix = true );
- static void AppendHex( String& rStr, sal_Int32 nData, bool bPrefix = true );
- static void AppendHex( String& rStr, sal_uInt64 nData, bool bPrefix = true );
- static void AppendHex( String& rStr, sal_Int64 nData, bool bPrefix = true );
- static void AppendHex( String& rStr, double fData, bool bPrefix = true );
-
- // append shortened hexadecimal -------------------------------------------
-
- static void AppendShortHex( String& rStr, sal_uInt8 nData, bool bPrefix = true );
- static void AppendShortHex( String& rStr, sal_Int8 nData, bool bPrefix = true );
- static void AppendShortHex( String& rStr, sal_uInt16 nData, bool bPrefix = true );
- static void AppendShortHex( String& rStr, sal_Int16 nData, bool bPrefix = true );
- static void AppendShortHex( String& rStr, sal_uInt32 nData, bool bPrefix = true );
- static void AppendShortHex( String& rStr, sal_Int32 nData, bool bPrefix = true );
- static void AppendShortHex( String& rStr, sal_uInt64 nData, bool bPrefix = true );
- static void AppendShortHex( String& rStr, sal_Int64 nData, bool bPrefix = true );
-
- // append binary ----------------------------------------------------------
-
- static void AppendBin( String& rStr, sal_uInt8 nData, bool bDots = true );
- static void AppendBin( String& rStr, sal_Int8 nData, bool bDots = true );
- static void AppendBin( String& rStr, sal_uInt16 nData, bool bDots = true );
- static void AppendBin( String& rStr, sal_Int16 nData, bool bDots = true );
- static void AppendBin( String& rStr, sal_uInt32 nData, bool bDots = true );
- static void AppendBin( String& rStr, sal_Int32 nData, bool bDots = true );
- static void AppendBin( String& rStr, sal_uInt64 nData, bool bDots = true );
- static void AppendBin( String& rStr, sal_Int64 nData, bool bDots = true );
- static void AppendBin( String& rStr, double fData, bool bDots = true );
-
- // append fixed-point decimal ---------------------------------------------
-
- template< typename Type >
- static void AppendFix( String& rStr, Type nData, xub_StrLen nWidth = 0 );
-
- // append formatted value -------------------------------------------------
-
- static void AppendBool( String& rStr, bool bData );
- template< typename Type >
- static void AppendValue( String& rStr, Type nData, FormatType eFmtType );
-
- // encoded text output ----------------------------------------------------
-
- static void AppendCChar( String& rStr, sal_Unicode cChar, bool bPrefix = true );
- static void AppendEncChar( String& rStr, sal_Unicode cChar, xub_StrLen nCount = 1, bool bPrefix = true );
- static void AppendEncString( String& rStr, const String& rData, bool bPrefix = true );
-
- // token list -------------------------------------------------------------
-
- static void AppendToken( String& rStr, const String& rToken, sal_Unicode cSep = ',' );
- static void AppendToken( String& rStr, sal_Int64 nToken, sal_Unicode cSep = ',' );
- static void PrependToken( String& rStr, const String& rToken, sal_Unicode cSep = ',' );
- static void PrependToken( String& rStr, sal_Int64 nToken, sal_Unicode cSep = ',' );
-
- static void AppendIndex( String& rStr, const String& rIdx );
- static void AppendIndex( String& rStr, sal_Int64 nIdx );
- static void AppendIndexedText( String& rStr, const String& rData, const String& rIdx );
- static void AppendIndexedText( String& rStr, const String& rData, sal_Int64 nIdx );
-
- static String GetToken( const String& rData, xub_StrLen& rnPos, sal_Unicode cSep = ',' );
-
- // quoting and trimming ---------------------------------------------------
-
- /** Encloses the passed string with the passed characters. Uses cOpen, if cClose is NUL. */
- static void Enclose( String& rStr, sal_Unicode cOpen, sal_Unicode cClose = '\0' );
-
- static void TrimSpaces( String& rStr );
- static void TrimQuotes( String& rStr );
-
- // string conversion ------------------------------------------------------
-
- static ByteString ConvertToUtf8( const String& rStr );
- static DataType ConvertToDataType( const String& rStr );
- static FormatType ConvertToFormatType( const String& rStr );
-
- static bool ConvertFromDec( sal_Int64& rnData, const String& rData );
- static bool ConvertFromHex( sal_Int64& rnData, const String& rData );
-
- static bool ConvertStringToInt( sal_Int64& rnData, const String& rData );
- static bool ConvertStringToDouble( double& rfData, const String& rData );
- static bool ConvertStringToBool( const String& rData );
-
- // string to list conversion ----------------------------------------------
-
- static void ConvertStringToStringList( ScfStringVec& rVec, const String& rData, bool bIgnoreEmpty );
- static void ConvertStringToIntList( ScfInt64Vec& rVec, const String& rData, bool bIgnoreEmpty );
-
- // file names -------------------------------------------------------------
-
- static String ConvertFileNameToUrl( const String& rFileName );
- static xub_StrLen GetFileNamePos( const String& rFileUrl );
-};
-
-// ----------------------------------------------------------------------------
-
-template< typename Type >
-void StringHelper::AppendFix( String& rStr, Type nData, xub_StrLen nWidth )
-{
- AppendDec( rStr, static_cast< double >( nData ) / pow( 2.0, 4.0 * sizeof( Type ) ), nWidth );
-}
-
-template< typename Type >
-void StringHelper::AppendValue( String& rStr, Type nData, FormatType eFmtType )
-{
- switch( eFmtType )
- {
- case FORMATTYPE_DEC: AppendDec( rStr, nData ); break;
- case FORMATTYPE_HEX: AppendHex( rStr, nData ); break;
- case FORMATTYPE_BIN: AppendBin( rStr, nData ); break;
- case FORMATTYPE_FIX: AppendFix( rStr, nData ); break;
- case FORMATTYPE_BOOL: AppendBool( rStr, nData ); break;
- default:;
- }
-}
-
-// ============================================================================
-
-class StringWrapper
-{
-public:
- inline StringWrapper() {}
- inline /*implicit*/ StringWrapper( const String& rStr ) : maStr( rStr ) {}
- inline /*implicit*/ StringWrapper( const sal_Char* pcStr ) : maStr( String::CreateFromAscii( pcStr ? pcStr : "" ) ) {}
- inline /*implicit*/ StringWrapper( sal_Unicode cChar ) : maStr( cChar ) {}
-
- inline bool Empty() const { return maStr.Len() == 0; }
- inline const String& GetString() const { return maStr; }
-
-private:
- String maStr;
-};
-
-// ============================================================================
-// ============================================================================
-
-class Base;
-typedef ScfRef< Base > BaseRef;
-
-/** Base class for all dumper classes.
-
- Derived classes implement the virtual function ImplIsValid(). It should
- check all members the other functions rely on. If the function
- ImplIsValid() returns true, all references and pointers can be used without
- further checking.
-
- Overview of all classes in this header file based on this Base class:
-
- Base
- |
- +----> NameListBase
- | |
- | +----> ConstList ------> MultiList
- | +----> FlagsList ------> CombiList
- | +----> UnitConverter
- |
- +----> ConfigCoreData
- +----> Config
- +----> CoreData
- |
- +----> Input ------> SvStreamInput
- +----> Output
- |
- +----> ObjectBase
- |
- +----> InputObjectBase
- | |
- | +----> StreamObjectBase
- | | |
- | | +----> SvStreamObject
- | | +----> OleStreamObject
- | | +----> WrappedStreamObject
- | |
- | +----> RecordHeaderBase
- |
- +----> OleStorageObject
- +----> DumperBase
- */
-class Base
-{
-public:
- virtual ~Base();
-
- inline bool IsValid() const { return ImplIsValid(); }
- inline static bool IsValid( BaseRef xBase ) { return xBase.is() && xBase->IsValid(); }
-
-protected:
- inline explicit Base() {}
-
- virtual bool ImplIsValid() const = 0;
-};
-
-// ============================================================================
-// ============================================================================
-
-class ConfigItemBase
-{
-public:
- virtual ~ConfigItemBase();
- void ReadConfigBlock( SvStream& rStrm );
-
-protected:
- inline explicit ConfigItemBase() {}
-
- virtual void ImplProcessConfigItemStr( SvStream& rStrm, const String& rKey, const String& rData );
- virtual void ImplProcessConfigItemInt( SvStream& rStrm, sal_Int64 nKey, const String& rData );
-
- void ReadConfigBlockContents( SvStream& rStrm );
- void IgnoreConfigBlockContents( SvStream& rStrm );
-
-private:
- enum LineType { LINETYPE_DATA, LINETYPE_BEGIN, LINETYPE_END };
-
- LineType ReadConfigLine( SvStream& rStrm, String& rKey, String& rData ) const;
- LineType ReadConfigLine( SvStream& rStrm ) const;
- void ProcessConfigItem( SvStream& rStrm, const String& rKey, const String& rData );
-};
-
-// ============================================================================
-
-class ConfigCoreData;
-class Config;
-
-class NameListBase;
-typedef ScfRef< NameListBase > NameListRef;
-
-/** Base class of all classes providing names for specific values (name lists).
-
- The idea is to provide a unique interfase for all different methods to
- write specific names for any values. This can be enumerations (dedicated
- names for a subset of values), or names for bits in bit fields. Classes
- derived from this base class implement the specific behaviour for the
- desired purpose.
- */
-class NameListBase : public Base, public ConfigItemBase
-{
-public:
- typedef ::std::map< sal_Int64, String > StringMap;
- typedef StringMap::const_iterator const_iterator;
-
- virtual ~NameListBase();
-
- /** Sets a name for the specified key. */
- void SetName( sal_Int64 nKey, const StringWrapper& rNameWrp );
- /** Include all names of the passed list. */
- void IncludeList( NameListRef xList );
-
- /** Returns true, if the map contains an entry for the passed key. */
- template< typename Type >
- inline bool HasName( Type nKey ) const
- { return maMap.count( static_cast< sal_Int64 >( nKey ) ) != 0; }
- /** Returns the name for the passed key. */
- template< typename Type >
- inline String GetName( const Config& rCfg, Type nKey ) const
- { return ImplGetName( rCfg, static_cast< sal_Int64 >( nKey ) ); }
- /** Returns a display name for the passed double value. */
- inline String GetName( const Config& rCfg, double fValue ) const
- { return ImplGetNameDbl( rCfg, fValue ); }
-
- /** Returns a map iterator pointing to the first contained name. */
- inline const_iterator begin() const { return maMap.begin(); }
- /** Returns a map iterator pointing one past the last contained name. */
- inline const_iterator end() const { return maMap.end(); }
-
-protected:
- inline explicit NameListBase( const ConfigCoreData& rCoreData ) : mrCoreData( rCoreData ) {}
-
- virtual bool ImplIsValid() const;
- virtual void ImplProcessConfigItemStr( SvStream& rStrm, const String& rKey, const String& rData );
- virtual void ImplProcessConfigItemInt( SvStream& rStrm, sal_Int64 nKey, const String& rData );
-
- /** Derived classes set the name for the passed key. */
- virtual void ImplSetName( sal_Int64 nKey, const String& rName ) = 0;
- /** Derived classes generate and return the name for the passed key. */
- virtual String ImplGetName( const Config& rCfg, sal_Int64 nKey ) const = 0;
- /** Derived classes generate and return the name for the passed double value. */
- virtual String ImplGetNameDbl( const Config& rCfg, double fValue ) const = 0;
- /** Derived classes insert all names and other settings from the passed list. */
- virtual void ImplIncludeList( const NameListBase& rList ) = 0;
-
- /** Returns the configuration core data, which can be used to access other name lists. */
- inline const ConfigCoreData& GetCoreData() const { return mrCoreData; }
- /** Inserts the passed name into the internal map. */
- void InsertRawName( sal_Int64 nKey, const String& rName );
- /** Returns the name for the passed key, or 0, if nothing found. */
- const String* FindRawName( sal_Int64 nKey ) const;
-
-private:
- /** Includes name lists, given in a comma separated list of names of the lists. */
- void Include( const String& rListKeys );
- /** Excludes names from the list, given by a comma separated list of their keys. */
- void Exclude( const String& rKeys );
-
-private:
- StringMap maMap;
- const ConfigCoreData& mrCoreData;
-};
-
-// ============================================================================
-
-class ConstList : public NameListBase
-{
-public:
- explicit ConstList( const ConfigCoreData& rCoreData );
-
- /** Sets a default name for unknown keys. */
- inline void SetDefaultName( const StringWrapper& rDefName ) { maDefName = rDefName.GetString(); }
- /** Enables or disables automatic quotation of returned names. */
- inline void SetQuoteNames( bool bQuoteNames ) { mbQuoteNames = bQuoteNames; }
-
-protected:
- virtual void ImplProcessConfigItemStr( SvStream& rStrm, const String& rKey, const String& rData );
-
- /** Sets the name for the passed key. */
- virtual void ImplSetName( sal_Int64 nKey, const String& rName );
- /** Returns the name for the passed key, or the default name, if key is not contained. */
- virtual String ImplGetName( const Config& rCfg, sal_Int64 nKey ) const;
- /** Returns the name for the passed double value. */
- virtual String ImplGetNameDbl( const Config& rCfg, double fValue ) const;
- /** Inserts all names from the passed list. */
- virtual void ImplIncludeList( const NameListBase& rList );
-
-private:
- String maDefName;
- bool mbQuoteNames;
-};
-
-// ============================================================================
-
-class MultiList : public ConstList
-{
-public:
- explicit MultiList( const ConfigCoreData& rCoreData );
-
- void SetNamesFromVec( sal_Int64 nStartKey, const ScfStringVec& rNames );
-
-protected:
- virtual void ImplProcessConfigItemStr( SvStream& rStrm, const String& rKey, const String& rData );
- virtual void ImplSetName( sal_Int64 nKey, const String& rName );
-
-private:
- void InsertNames( sal_Int64 nStartKey, const String& rData );
-
-private:
- bool mbIgnoreEmpty;
-};
-
-// ============================================================================
-
-class FlagsList : public NameListBase
-{
-public:
- explicit FlagsList( const ConfigCoreData& rCoreData );
-
- /** Sets flags to be ignored on output. */
- template< typename Type >
- inline void SetIgnoreFlags( Type nIgnore )
- { mnIgnore = static_cast< sal_Int64 >( nIgnore ); }
-
-protected:
- virtual void ImplProcessConfigItemStr( SvStream& rStrm, const String& rKey, const String& rData );
-
- /** Sets the name for the passed key. */
- virtual void ImplSetName( sal_Int64 nKey, const String& rName );
- /** Returns the name for the passed key. */
- virtual String ImplGetName( const Config& rCfg, sal_Int64 nKey ) const;
- /** Returns the name for the passed double value. */
- virtual String ImplGetNameDbl( const Config& rCfg, double fValue ) const;
- /** Inserts all flags from the passed list. */
- virtual void ImplIncludeList( const NameListBase& rList );
-
-private:
- sal_Int64 mnIgnore;
-};
-
-// ============================================================================
-
-class CombiList : public FlagsList
-{
-public:
- explicit CombiList( const ConfigCoreData& rCoreData );
-
-protected:
- /** Sets the name for the passed key. */
- virtual void ImplSetName( sal_Int64 nKey, const String& rName );
- /** Returns the name for the passed key. */
- virtual String ImplGetName( const Config& rCfg, sal_Int64 nKey ) const;
- /** Inserts all flags from the passed list. */
- virtual void ImplIncludeList( const NameListBase& rList );
-
-private:
- struct ExtItemFormat : public ItemFormat
- {
- bool mbShiftValue;
- inline explicit ExtItemFormat() : mbShiftValue( true ) {}
- };
- typedef ::std::map< sal_Int64, ExtItemFormat > ExtItemFormatMap;
- ExtItemFormatMap maFmtMap;
-};
-
-// ============================================================================
-
-class UnitConverter : public NameListBase
-{
-public:
- explicit UnitConverter( const ConfigCoreData& rCoreData );
-
- inline void SetUnitName( const StringWrapper& rUnitName ) { maUnitName = rUnitName.GetString(); }
- inline void SetFactor( double fFactor ) { mfFactor = fFactor; }
-
-protected:
- /** Sets the name for the passed key. */
- virtual void ImplSetName( sal_Int64 nKey, const String& rName );
- /** Returns the converted value with appended unit name. */
- virtual String ImplGetName( const Config& rCfg, sal_Int64 nKey ) const;
- /** Returns the converted value with appended unit name. */
- virtual String ImplGetNameDbl( const Config& rCfg, double fValue ) const;
- /** Empty implementation. */
- virtual void ImplIncludeList( const NameListBase& rList );
-
-private:
- String maUnitName;
- double mfFactor;
-};
-
-// ============================================================================
-
-class NameListWrapper
-{
-public:
- inline NameListWrapper() {}
- inline /*implicit*/ NameListWrapper( const String& rListName ) : maNameWrp( rListName ) {}
- inline /*implicit*/ NameListWrapper( const sal_Char* pcListName ) : maNameWrp( pcListName ) {}
- inline /*implicit*/ NameListWrapper( NameListRef xList ) : mxList( xList ) {}
-
- inline bool Empty() const { return !mxList && maNameWrp.Empty(); }
- NameListRef GetNameList( const Config& rCfg ) const;
-
-private:
- StringWrapper maNameWrp;
- mutable NameListRef mxList;
-};
-
-static const NameListWrapper NO_LIST;
-
-// ============================================================================
-// ============================================================================
-
-class ConfigCoreData : public Base, public ConfigItemBase
-{
-public:
- explicit ConfigCoreData( const String& rFileName );
- virtual ~ConfigCoreData();
-
- void SetOption( const String& rKey, const String& rData );
- const String* GetOption( const String& rKey ) const;
-
- template< typename ListType >
- ScfRef< ListType > CreateNameList( const String& rListName );
- void SetNameList( const String& rListName, NameListRef xList );
- void EraseNameList( const String& rListName );
- NameListRef GetNameList( const String& rListName ) const;
-
-protected:
- inline explicit ConfigCoreData() : mbLoaded( false ) {}
- void Construct( const String& rFileName );
-
- virtual bool ImplIsValid() const;
- virtual void ImplProcessConfigItemStr( SvStream& rStrm, const String& rKey, const String& rData );
-
-private:
- void ConstructCfgCoreData();
-
- bool ReadConfigFile( const String& rFileUrl );
- template< typename ListType >
- void ReadNameList( SvStream& rStrm, const String& rListName );
- void CreateShortList( const String& rData );
- void CreateUnitConverter( const String& rData );
-
-private:
- typedef ::std::map< String, String > ConfigDataMap;
- typedef ::std::map< String, NameListRef > NameListMap;
-
- ConfigDataMap maConfigData;
- NameListMap maNameLists;
- String maConfigPath;
- bool mbLoaded;
-};
-
-// ----------------------------------------------------------------------------
-
-template< typename ListType >
-ScfRef< ListType > ConfigCoreData::CreateNameList( const String& rListName )
-{
- ScfRef< ListType > xList;
- if( rListName.Len() > 0 )
- {
- xList.reset( new ListType( *this ) );
- SetNameList( rListName, xList );
- }
- return xList;
-}
-
-template< typename ListType >
-void ConfigCoreData::ReadNameList( SvStream& rStrm, const String& rListName )
-{
- NameListRef xList = CreateNameList< ListType >( rListName );
- if( xList.is() )
- xList->ReadConfigBlock( rStrm );
-}
-
-// ============================================================================
-
-class Config : public Base
-{
-public:
- explicit Config( const Config& rParent );
- explicit Config( const String& rFileName );
- explicit Config( const sal_Char* pcEnvVar );
- virtual ~Config();
-
- void SetStringOption( const StringWrapper& rKey, const StringWrapper& rData );
-
- const String& GetStringOption( const StringWrapper& rKey, const String& rDefault ) const;
- bool GetBoolOption( const StringWrapper& rKey, bool bDefault ) const;
- template< typename Type >
- Type GetIntOption( const StringWrapper& rKey, Type nDefault ) const;
-
- bool IsDumperEnabled() const;
- bool IsImportEnabled() const;
-
- template< typename ListType >
- ScfRef< ListType > CreateNameList( const StringWrapper& rListName );
- void SetNameList( const StringWrapper& rListName, NameListRef xList );
- void EraseNameList( const StringWrapper& rListName );
- NameListRef GetNameList( const StringWrapper& rListName ) const;
-
- /** Returns the name for the passed key from the passed name list. */
- template< typename Type >
- String GetName( const NameListWrapper& rListWrp, Type nKey ) const;
- /** Returns true, if the passed name list contains an entry for the passed key. */
- template< typename Type >
- bool HasName( const NameListWrapper& rList, Type nKey ) const;
-
-protected:
- inline explicit Config() {}
- void Construct( const Config& rParent );
- void Construct( const String& rFileName );
- void Construct( const sal_Char* pcEnvVar );
-
- virtual bool ImplIsValid() const;
- virtual const String* ImplGetOption( const String& rKey ) const;
- virtual NameListRef ImplGetNameList( const String& rListName ) const;
-
-private:
- typedef ScfRef< ConfigCoreData > ConfigCoreDataRef;
- ConfigCoreDataRef mxCoreData;
-};
-
-typedef ScfRef< Config > ConfigRef;
-
-// ----------------------------------------------------------------------------
-
-template< typename Type >
-Type Config::GetIntOption( const StringWrapper& rKey, Type nDefault ) const
-{
- sal_Int64 nRawData;
- const String* pData = ImplGetOption( rKey.GetString() );
- return (pData && StringHelper::ConvertStringToInt( nRawData, *pData )) ?
- static_cast< Type >( nRawData ) : nDefault;
-}
-
-template< typename ListType >
-ScfRef< ListType > Config::CreateNameList( const StringWrapper& rListName )
-{
- return mxCoreData->CreateNameList< ListType >( rListName.GetString() );
-}
-
-template< typename Type >
-String Config::GetName( const NameListWrapper& rListWrp, Type nKey ) const
-{
- NameListRef xList = rListWrp.GetNameList( *this );
- return xList.is() ? xList->GetName( *this, nKey ) : SCF_DUMP_ERR_NOMAP;
-}
-
-template< typename Type >
-bool Config::HasName( const NameListWrapper& rListWrp, Type nKey ) const
-{
- NameListRef xList = rListWrp.GetNameList( *this );
- return xList.is() && xList->HasName( nKey );
-}
-
-// ============================================================================
-// ============================================================================
-
-class CoreData : public Base
-{
-public:
- explicit CoreData( SfxMedium& rMedium, SfxObjectShell* pDocShell );
-
- inline SfxMedium& GetMedium() { return mrMedium; }
- inline SfxObjectShell* GetDocShell() { return mpDocShell; }
- SvStream& GetCoreStream();
-
-protected:
- virtual bool ImplIsValid() const;
-
-private:
- SfxMedium& mrMedium;
- SfxObjectShell* mpDocShell;
-};
-
-typedef ScfRef< CoreData > CoreDataRef;
-
-// ============================================================================
-// ============================================================================
-
-class Input : public Base
-{
-public:
- virtual sal_Size GetSize() const = 0;
- virtual sal_Size Tell() const = 0;
- virtual void Seek( sal_Size nPos ) = 0;
- virtual void SeekRel( sal_sSize nRelPos ) = 0;
- virtual sal_Size Read( void* pBuffer, sal_Size nSize ) = 0;
- virtual void ReadLine( String& rLine, rtl_TextEncoding eEnc ) = 0;
-
- virtual Input& operator>>( sal_Int8& rnData ) = 0;
- virtual Input& operator>>( sal_uInt8& rnData ) = 0;
- virtual Input& operator>>( sal_Int16& rnData ) = 0;
- virtual Input& operator>>( sal_uInt16& rnData ) = 0;
- virtual Input& operator>>( sal_Int32& rnData ) = 0;
- virtual Input& operator>>( sal_uInt32& rnData ) = 0;
- virtual Input& operator>>( float& rfData ) = 0;
- virtual Input& operator>>( double& rfData ) = 0;
-
- inline bool IsValidPos() const { return Tell() < GetSize(); }
- template< typename Type >
- inline Type ReadValue() { Type nValue; *this >> nValue; return nValue; }
-
-protected:
- virtual bool ImplIsValid() const;
-};
-
-typedef ScfRef< Input > InputRef;
-
-Input& operator>>( Input& rIn, sal_Int64& rnData );
-Input& operator>>( Input& rIn, sal_uInt64& rnData );
-
-// ============================================================================
-
-class SvStreamInput : public Input
-{
-public:
- explicit SvStreamInput( SvStream& rStrm );
- virtual ~SvStreamInput();
-
- virtual sal_Size GetSize() const;
- virtual sal_Size Tell() const;
- virtual void Seek( sal_Size nPos );
- virtual void SeekRel( sal_sSize nRelPos );
- virtual sal_Size Read( void* pBuffer, sal_Size nSize );
- virtual void ReadLine( String& rLine, rtl_TextEncoding eEnc );
-
- virtual SvStreamInput& operator>>( sal_Int8& rnData );
- virtual SvStreamInput& operator>>( sal_uInt8& rnData );
- virtual SvStreamInput& operator>>( sal_Int16& rnData );
- virtual SvStreamInput& operator>>( sal_uInt16& rnData );
- virtual SvStreamInput& operator>>( sal_Int32& rnData );
- virtual SvStreamInput& operator>>( sal_uInt32& rnData );
- virtual SvStreamInput& operator>>( float& rfData );
- virtual SvStreamInput& operator>>( double& rfData );
-
-private:
- SvStream& mrStrm;
-};
-
-// ============================================================================
-// ============================================================================
-
-class Output : public Base
-{
-public:
- explicit Output( SvStream& rStrm );
-
- // ------------------------------------------------------------------------
-
- void NewLine();
- void EmptyLine( size_t nCount = 1 );
- inline String& GetLine() { return maLine; }
-
- void SetPrefix( const String& rPrefix );
- inline const String& GetPrefix() const { return maPrefix; }
-
- void IncIndent();
- void DecIndent();
- void ResetIndent();
-
- void StartTable( xub_StrLen nW1 );
- void StartTable( xub_StrLen nW1, xub_StrLen nW2 );
- void StartTable( xub_StrLen nW1, xub_StrLen nW2, xub_StrLen nW3 );
- void StartTable( xub_StrLen nW1, xub_StrLen nW2, xub_StrLen nW3, xub_StrLen nW4 );
- void StartTable( size_t nColCount, const xub_StrLen* pnColWidths );
- void Tab();
- void Tab( size_t nCol );
- void EndTable();
-
- void ResetItemIndex( sal_Int64 nIdx = 0 );
- void StartItem( const sal_Char* pcName = 0 );
- void ContItem();
- void EndItem();
- inline const String& GetLastItemValue() const { return maLastItem; }
-
- void StartMultiItems();
- void EndMultiItems();
-
- // ------------------------------------------------------------------------
-
- void WriteChar( sal_Unicode cChar, xub_StrLen nCount = 1 );
- void WriteAscii( const sal_Char* pcStr );
- void WriteString( const String& rStr );
- void WriteArray( const sal_uInt8* pnData, sal_Size nSize, sal_Unicode cSep = ',' );
- void WriteBool( bool bData );
- void WriteColor( const Color& rColor );
- void WriteDateTime( const DateTime& rDateTime );
-
-
- template< typename Type >
- inline void WriteDec( Type nData, xub_StrLen nWidth = 0, sal_Unicode cFill = ' ' )
- { StringHelper::AppendDec( maLine, nData, nWidth, cFill ); }
- template< typename Type >
- inline void WriteHex( Type nData, bool bPrefix = true )
- { StringHelper::AppendHex( maLine, nData, bPrefix ); }
- template< typename Type >
- inline void WriteBin( Type nData, bool bDots = true )
- { StringHelper::AppendBin( maLine, nData, bDots ); }
- template< typename Type >
- inline void WriteFix( Type nData, xub_StrLen nWidth = 0 )
- { StringHelper::AppendFix( maLine, nData, nWidth ); }
- template< typename Type >
- inline void WriteValue( Type nData, FormatType eFmtType )
- { StringHelper::AppendValue( maLine, nData, eFmtType ); }
- template< typename Type >
- inline void WriteName( const Config& rCfg, Type nData, const NameListWrapper& rListWrp )
- { WriteString( rCfg.GetName( rListWrp, nData ) ); }
-
- // ------------------------------------------------------------------------
-protected:
- virtual bool ImplIsValid() const;
-
-private:
- void WriteItemName( const sal_Char* pcName );
-
-private:
- typedef ::std::vector< xub_StrLen > StringLenVec;
-
- SvStream& mrStrm;
- String maPrefix;
- ByteString maPrefixUtf8;
- ByteString maIndent;
- String maLine;
- String maLastItem;
- StringLenVec maColPos;
- size_t mnCol;
- size_t mnItemLevel;
- size_t mnMultiLevel;
- sal_Int64 mnItemIdx;
- xub_StrLen mnLastItem;
-};
-
-typedef ScfRef< Output > OutputRef;
-
-// ============================================================================
-
-class PrefixGuard : private ScfNoCopy
-{
-public:
- inline explicit PrefixGuard( Output& rOut, const String& rPrefix ) :
- mrOut( rOut ), maOldPrefix( rOut.GetPrefix() ) { mrOut.SetPrefix( rPrefix ); }
- inline ~PrefixGuard() { mrOut.SetPrefix( maOldPrefix ); }
-private:
- Output& mrOut;
- String maOldPrefix;
-};
-
-// ----------------------------------------------------------------------------
-
-class IndentGuard : private ScfNoCopy
-{
-public:
- inline explicit IndentGuard( Output& rOut ) : mrOut( rOut ) { mrOut.IncIndent(); }
- inline ~IndentGuard() { mrOut.DecIndent(); }
-private:
- Output& mrOut;
-};
-
-// ----------------------------------------------------------------------------
-
-class TableGuard : private ScfNoCopy
-{
-public:
- inline explicit TableGuard( Output& rOut, xub_StrLen nW1 ) :
- mrOut( rOut ) { mrOut.StartTable( nW1 ); }
- inline explicit TableGuard( Output& rOut, xub_StrLen nW1, xub_StrLen nW2 ) :
- mrOut( rOut ) { mrOut.StartTable( nW1, nW2 ); }
- inline explicit TableGuard( Output& rOut, xub_StrLen nW1, xub_StrLen nW2, xub_StrLen nW3 ) :
- mrOut( rOut ) { mrOut.StartTable( nW1, nW2, nW3 ); }
- inline explicit TableGuard( Output& rOut, xub_StrLen nW1, xub_StrLen nW2, xub_StrLen nW3, xub_StrLen nW4 ) :
- mrOut( rOut ) { mrOut.StartTable( nW1, nW2, nW3, nW4 ); }
- inline explicit TableGuard( Output& rOut, size_t nColCount,
- const xub_StrLen* pnColWidths ) :
- mrOut( rOut ) { mrOut.StartTable( nColCount, pnColWidths ); }
- inline ~TableGuard() { mrOut.EndTable(); }
- inline void Tab() { mrOut.Tab(); }
- inline void Tab( size_t nCol ) { mrOut.Tab( nCol ); }
-private:
- Output& mrOut;
-};
-
-// ----------------------------------------------------------------------------
-
-class ItemGuard : private ScfNoCopy
-{
-public:
- inline explicit ItemGuard( Output& rOut, const sal_Char* pcName = 0 ) :
- mrOut( rOut ) { mrOut.StartItem( pcName ); }
- inline ~ItemGuard() { mrOut.EndItem(); }
- inline void Cont() { mrOut.ContItem(); }
-private:
- Output& mrOut;
-};
-
-// ----------------------------------------------------------------------------
-
-class MultiItemsGuard : private ScfNoCopy
-{
-public:
- inline explicit MultiItemsGuard( Output& rOut ) : mrOut( rOut ) { mrOut.StartMultiItems(); }
- inline ~MultiItemsGuard() { mrOut.EndMultiItems(); }
-private:
- Output& mrOut;
-};
-
-// ============================================================================
-// ============================================================================
-
-class ObjectBase : public Base
-{
-public:
- virtual ~ObjectBase();
-
- SfxMedium& GetCoreMedium() const;
- SvStream& GetCoreStream() const;
-
- void Dump();
-
- // ------------------------------------------------------------------------
-protected:
- inline explicit ObjectBase() {}
- void Construct( ConfigRef xConfig, CoreDataRef xCore, OutputRef xOut );
- void Construct( const ObjectBase& rParent );
-
- virtual bool ImplIsValid() const;
- virtual ConfigRef ImplReconstructConfig();
- virtual OutputRef ImplReconstructOutput();
- virtual void ImplDumpHeader();
- virtual void ImplDumpBody();
- virtual void ImplDumpFooter();
-
- // ------------------------------------------------------------------------
-
- void ReconstructConfig();
- void ReconstructOutput();
-
- inline Config& Cfg() const { return *mxConfig; }
- inline CoreData& Core() const { return *mxCore; }
- inline Output& Out() const { return *mxOut; }
-
- // ------------------------------------------------------------------------
-
- void WriteEmptyItem( const sal_Char* pcName );
- void WriteInfoItem( const sal_Char* pcName, const StringWrapper& rData );
- void WriteStringItem( const sal_Char* pcName, const String& rData );
- void WriteArrayItem( const sal_Char* pcName, const sal_uInt8* pnData, sal_Size nSize, sal_Unicode cSep = ',' );
- void WriteBoolItem( const sal_Char* pcName, bool bData );
- void WriteColorItem( const sal_Char* pcName, const Color& rColor );
- void WriteDateTimeItem( const sal_Char* pcName, const DateTime& rDateTime );
- void WriteGuidItem( const sal_Char* pcName, const String& rGuid );
-
- template< typename Type >
- void AddNameToItem( Type nData, const NameListWrapper& rListWrp );
-
- template< typename Type >
- void WriteNameItem( const sal_Char* pcName, Type nData, const NameListWrapper& rListWrp );
- template< typename Type >
- void WriteDecItem( const sal_Char* pcName, Type nData, const NameListWrapper& rListWrp = NO_LIST );
- template< typename Type >
- void WriteHexItem( const sal_Char* pcName, Type nData, const NameListWrapper& rListWrp = NO_LIST );
- template< typename Type >
- void WriteBinItem( const sal_Char* pcName, Type nData, const NameListWrapper& rListWrp = NO_LIST );
- template< typename Type >
- void WriteFixItem( const sal_Char* pcName, Type nData, const NameListWrapper& rListWrp = NO_LIST );
- template< typename Type >
- void WriteDecBoolItem( const sal_Char* pcName, Type nData, const NameListWrapper& rListWrp = NO_LIST );
- template< typename Type >
- void WriteValueItem( const sal_Char* pcName, Type nData, FormatType eFmtType, const NameListWrapper& rListWrp = NO_LIST );
-
- template< typename Type >
- void WriteValueItem( const ItemFormat& rItemFmt, Type nData );
-
-private:
- ConfigRef mxConfig;
- CoreDataRef mxCore;
- OutputRef mxOut;
-};
-
-typedef ScfRef< ObjectBase > ObjectRef;
-
-// ----------------------------------------------------------------------------
-
-template< typename Type >
-void ObjectBase::AddNameToItem( Type nData, const NameListWrapper& rListWrp )
-{
- if( !rListWrp.Empty() )
- {
- mxOut->ContItem();
- mxOut->WriteName( *mxConfig, nData, rListWrp );
- }
-}
-
-template< typename Type >
-void ObjectBase::WriteNameItem( const sal_Char* pcName, Type nData, const NameListWrapper& rListWrp )
-{
- ItemGuard aItem( *mxOut, pcName );
- mxOut->WriteName( *mxConfig, nData, rListWrp );
-}
-
-template< typename Type >
-void ObjectBase::WriteDecItem( const sal_Char* pcName, Type nData, const NameListWrapper& rListWrp )
-{
- ItemGuard aItem( *mxOut, pcName );
- mxOut->WriteDec( nData );
- AddNameToItem( nData, rListWrp );
-}
-
-template< typename Type >
-void ObjectBase::WriteHexItem( const sal_Char* pcName, Type nData, const NameListWrapper& rListWrp )
-{
- ItemGuard aItem( *mxOut, pcName );
- mxOut->WriteHex( nData );
- AddNameToItem( nData, rListWrp );
-}
-
-template< typename Type >
-void ObjectBase::WriteBinItem( const sal_Char* pcName, Type nData, const NameListWrapper& rListWrp )
-{
- ItemGuard aItem( *mxOut, pcName );
- mxOut->WriteBin( nData );
- AddNameToItem( nData, rListWrp );
-}
-
-template< typename Type >
-void ObjectBase::WriteFixItem( const sal_Char* pcName, Type nData, const NameListWrapper& rListWrp )
-{
- ItemGuard aItem( *mxOut, pcName );
- mxOut->WriteFix( nData );
- AddNameToItem( nData, rListWrp );
-}
-
-template< typename Type >
-void ObjectBase::WriteDecBoolItem( const sal_Char* pcName, Type nData, const NameListWrapper& rListWrp )
-{
- ItemGuard aItem( *mxOut, pcName );
- mxOut->WriteDec( nData );
- aItem.Cont();
- mxOut->WriteBool( nData != 0 );
- AddNameToItem( nData, rListWrp );
-}
-
-template< typename Type >
-void ObjectBase::WriteValueItem( const sal_Char* pcName, Type nData, FormatType eFmtType, const NameListWrapper& rListWrp )
-{
- if( eFmtType == FORMATTYPE_BOOL )
- WriteDecBoolItem( pcName, nData, rListWrp );
- else
- {
- ItemGuard aItem( *mxOut, pcName );
- mxOut->WriteValue( nData, eFmtType );
- AddNameToItem( nData, rListWrp );
- }
-}
-
-template< typename Type >
-void ObjectBase::WriteValueItem( const ItemFormat& rItemFmt, Type nData )
-{
- WriteValueItem( rItemFmt.maItemNameUtf8.GetBuffer(),
- nData, rItemFmt.meFmtType, rItemFmt.maListName );
-}
-
-// ============================================================================
-
-class InputObjectBase : public ObjectBase
-{
-public:
- virtual ~InputObjectBase();
-
- // ------------------------------------------------------------------------
-protected:
- inline explicit InputObjectBase() {}
- void Construct( const ObjectBase& rParent, InputRef xIn );
- void Construct( const InputObjectBase& rParent );
-
- virtual bool ImplIsValid() const;
- virtual InputRef ImplReconstructInput();
- virtual void ImplDumpBody();
-
- // ------------------------------------------------------------------------
-
- void ReconstructInput();
-
- inline Input& In() const { return *mxIn; }
-
- // ------------------------------------------------------------------------
-
- void SkipBlock( sal_Size nSize, bool bShowSize = true );
- void DumpRawBinary( sal_Size nSize, bool bShowOffset = true, bool bStream = false );
-
- void DumpBinary( const sal_Char* pcName, sal_Size nSize, bool bShowOffset = true );
- void DumpArray( const sal_Char* pcName, sal_Size nSize, sal_Unicode cSep = ',' );
- void DumpRemaining( sal_Size nSize );
- inline void DumpUnused( sal_Size nSize ) { DumpArray( SCF_DUMP_UNUSED, nSize ); }
- inline void DumpUnknown( sal_Size nSize ) { DumpArray( SCF_DUMP_UNKNOWN, nSize ); }
-
- void DumpBinaryStream( bool bShowOffset = true );
- void DumpTextStream( rtl_TextEncoding eEnc, bool bShowLines = true );
-
- String DumpGuid( const sal_Char* pcName );
- void DumpItem( const ItemFormat& rItemFmt );
-
- template< typename Type >
- Type DumpName( const sal_Char* pcName, const NameListWrapper& rListWrp );
- template< typename Type >
- Type DumpDec( const sal_Char* pcName, const NameListWrapper& rListWrp = NO_LIST );
- template< typename Type >
- Type DumpHex( const sal_Char* pcName, const NameListWrapper& rListWrp = NO_LIST );
- template< typename Type >
- Type DumpBin( const sal_Char* pcName, const NameListWrapper& rListWrp = NO_LIST );
- template< typename Type >
- Type DumpFix( const sal_Char* pcName, const NameListWrapper& rListWrp = NO_LIST );
- template< typename Type >
- Type DumpBool( const sal_Char* pcName, const NameListWrapper& rListWrp = NO_LIST );
- template< typename Type >
- Type DumpValue( const ItemFormat& rItemFmt );
-
- template< typename Type1, typename Type2 >
- Type1 DumpName( bool bType1, const sal_Char* pcName, const NameListWrapper& rListWrp = NO_LIST );
- template< typename Type1, typename Type2 >
- Type1 DumpDec( bool bType1, const sal_Char* pcName, const NameListWrapper& rListWrp = NO_LIST );
- template< typename Type1, typename Type2 >
- Type1 DumpHex( bool bType1, const sal_Char* pcName, const NameListWrapper& rListWrp = NO_LIST );
- template< typename Type1, typename Type2 >
- Type1 DumpBin( bool bType1, const sal_Char* pcName, const NameListWrapper& rListWrp = NO_LIST );
- template< typename Type1, typename Type2 >
- Type1 DumpFix( bool bType1, const sal_Char* pcName, const NameListWrapper& rListWrp = NO_LIST );
- template< typename Type1, typename Type2 >
- Type1 DumpBool( bool bType1, const sal_Char* pcName, const NameListWrapper& rListWrp = NO_LIST );
- template< typename Type1, typename Type2 >
- Type1 DumpValue( bool bType1, const ItemFormat& rItemFmt );
-
- // ------------------------------------------------------------------------
-
- using ObjectBase::Construct;
-
-private:
- InputRef mxIn;
-};
-
-typedef ScfRef< InputObjectBase > InputObjectRef;
-
-// ----------------------------------------------------------------------------
-
-template< typename Type >
-Type InputObjectBase::DumpName( const sal_Char* pcName, const NameListWrapper& rListWrp )
-{
- Type nData;
- *mxIn >> nData;
- WriteNameItem( pcName, nData, rListWrp );
- return nData;
-}
-
-template< typename Type >
-Type InputObjectBase::DumpDec( const sal_Char* pcName, const NameListWrapper& rListWrp )
-{
- Type nData;
- *mxIn >> nData;
- WriteDecItem( pcName, nData, rListWrp );
- return nData;
-}
-
-template< typename Type >
-Type InputObjectBase::DumpHex( const sal_Char* pcName, const NameListWrapper& rListWrp )
-{
- Type nData;
- *mxIn >> nData;
- WriteHexItem( pcName, nData, rListWrp );
- return nData;
-}
-
-template< typename Type >
-Type InputObjectBase::DumpBin( const sal_Char* pcName, const NameListWrapper& rListWrp )
-{
- Type nData;
- *mxIn >> nData;
- WriteBinItem( pcName, nData, rListWrp );
- return nData;
-}
-
-template< typename Type >
-Type InputObjectBase::DumpFix( const sal_Char* pcName, const NameListWrapper& rListWrp )
-{
- Type nData;
- *mxIn >> nData;
- WriteFixItem( pcName, nData, rListWrp );
- return nData;
-}
-
-template< typename Type >
-Type InputObjectBase::DumpBool( const sal_Char* pcName, const NameListWrapper& rListWrp )
-{
- Type nData;
- *mxIn >> nData;
- WriteDecBoolItem( pcName, nData, rListWrp );
- return nData;
-}
-
-template< typename Type >
-Type InputObjectBase::DumpValue( const ItemFormat& rItemFmt )
-{
- Type nData;
- *mxIn >> nData;
- WriteValueItem( rItemFmt, nData );
- return nData;
-}
-
-template< typename Type1, typename Type2 >
-Type1 InputObjectBase::DumpName( bool bType1, const sal_Char* pcName, const NameListWrapper& rListWrp )
-{
- return bType1 ? DumpName< Type1 >( pcName, rListWrp ) : static_cast< Type1 >( DumpName< Type2 >( pcName, rListWrp ) );
-}
-
-template< typename Type1, typename Type2 >
-Type1 InputObjectBase::DumpDec( bool bType1, const sal_Char* pcName, const NameListWrapper& rListWrp )
-{
- return bType1 ? DumpDec< Type1 >( pcName, rListWrp ) : static_cast< Type1 >( DumpDec< Type2 >( pcName, rListWrp ) );
-}
-
-template< typename Type1, typename Type2 >
-Type1 InputObjectBase::DumpHex( bool bType1, const sal_Char* pcName, const NameListWrapper& rListWrp )
-{
- return bType1 ? DumpHex< Type1 >( pcName, rListWrp ) : static_cast< Type1 >( DumpHex< Type2 >( pcName, rListWrp ) );
-}
-
-template< typename Type1, typename Type2 >
-Type1 InputObjectBase::DumpBin( bool bType1, const sal_Char* pcName, const NameListWrapper& rListWrp )
-{
- return bType1 ? DumpBin< Type1 >( pcName, rListWrp ) : static_cast< Type1 >( DumpBin< Type2 >( pcName, rListWrp ) );
-}
-
-template< typename Type1, typename Type2 >
-Type1 InputObjectBase::DumpFix( bool bType1, const sal_Char* pcName, const NameListWrapper& rListWrp )
-{
- return bType1 ? DumpFix< Type1 >( pcName, rListWrp ) : static_cast< Type1 >( DumpFix< Type2 >( pcName, rListWrp ) );
-}
-
-template< typename Type1, typename Type2 >
-Type1 InputObjectBase::DumpBool( bool bType1, const sal_Char* pcName, const NameListWrapper& rListWrp )
-{
- return bType1 ? DumpBool< Type1 >( pcName, rListWrp ) : static_cast< Type1 >( DumpBool< Type2 >( pcName, rListWrp ) );
-}
-
-template< typename Type1, typename Type2 >
-Type1 InputObjectBase::DumpValue( bool bType1, const ItemFormat& rItemFmt )
-{
- return bType1 ? DumpValue< Type1 >( rItemFmt ) : static_cast< Type1 >( DumpValue< Type2 >( rItemFmt ) );
-}
-
-// ============================================================================
-// ============================================================================
-
-class StreamObjectBase : public InputObjectBase
-{
-public:
- virtual ~StreamObjectBase();
-
- inline SvStream& GetStream() { return *mpStrm; }
- inline const String& GetStreamName() const { return maName; }
- inline const String& GetStreamPath() const { return maPath; }
- String GetFullName() const;
- sal_Size GetStreamSize() const;
-
-protected:
- inline explicit StreamObjectBase() : mpStrm( 0 ) {}
- void Construct( const ObjectBase& rParent, SvStream& rStrm,
- const String& rPath, const String& rStrmName, InputRef xIn );
- void Construct( const ObjectBase& rParent, SvStream& rStrm,
- const String& rPath, const String& rStrmName );
- void Construct( const ObjectBase& rParent, SvStream& rStrm );
-
- virtual bool ImplIsValid() const;
- virtual void ImplDumpHeader();
- virtual void ImplDumpFooter();
- virtual void ImplDumpExtendedHeader();
-
- using InputObjectBase::Construct;
-
-private:
- void DumpStreamInfo( bool bExtended );
-
-private:
- SvStream* mpStrm;
- String maPath;
- String maName;
-};
-
-typedef ScfRef< StreamObjectBase > StreamObjectRef;
-
-// ============================================================================
-
-class SvStreamObject : public StreamObjectBase
-{
-public:
- explicit SvStreamObject( const ObjectBase& rParent, SvStream& rStrm );
- virtual ~SvStreamObject();
-
-protected:
- inline explicit SvStreamObject() {}
- void Construct( const ObjectBase& rParent, SvStream& rStrm );
-
- using StreamObjectBase::Construct;
-};
-
-typedef ScfRef< SvStreamObject > SvStreamObjectRef;
-
-// ============================================================================
-
-class WrappedStreamObject : public StreamObjectBase
-{
-public:
- explicit WrappedStreamObject( const ObjectBase& rParent, StreamObjectRef xStrmObj );
- virtual ~WrappedStreamObject();
-
-protected:
- inline explicit WrappedStreamObject() {}
- void Construct( const ObjectBase& rParent, StreamObjectRef xStrmObj );
-
- virtual bool ImplIsValid() const;
-
- using StreamObjectBase::Construct;
-
-private:
- StreamObjectRef mxStrmObj;
-};
-
-// ============================================================================
-// ============================================================================
-
-struct RecordHeaderConfigInfo
-{
- const sal_Char* mpcRecNames;
- const sal_Char* mpcShowRecPos;
- const sal_Char* mpcShowRecSize;
- const sal_Char* mpcShowRecId;
- const sal_Char* mpcShowRecName;
- const sal_Char* mpcShowRecBody;
-};
-
-// ----------------------------------------------------------------------------
-
-class RecordHeaderBase : public InputObjectBase
-{
-public:
- virtual ~RecordHeaderBase();
-
- inline NameListRef GetRecNames() const { return mxRecNames; }
- inline bool IsShowRecPos() const { return mbShowRecPos; }
- inline bool IsShowRecSize() const { return mbShowRecSize; }
- inline bool IsShowRecId() const { return mbShowRecId; }
- inline bool IsShowRecName() const { return mbShowRecName; }
- inline bool IsShowRecBody() const { return mbShowRecBody; }
-
-protected:
- inline explicit RecordHeaderBase() {}
- void Construct( const InputObjectBase& rParent, const RecordHeaderConfigInfo& rCfgInfo );
-
- virtual bool ImplIsValid() const;
-
- using InputObjectBase::Construct;
-
-private:
- NameListRef mxRecNames;
- bool mbShowRecPos;
- bool mbShowRecSize;
- bool mbShowRecId;
- bool mbShowRecName;
- bool mbShowRecBody;
-};
-
-// ============================================================================
-// ============================================================================
-
-class DumperBase : public ObjectBase
-{
-public:
- virtual ~DumperBase();
-
- bool IsImportEnabled() const;
-
-protected:
- inline explicit DumperBase() {}
- void Construct( ConfigRef xConfig, CoreDataRef xCore );
- void Construct( ConfigRef xConfig, SfxMedium& rMedium, SfxObjectShell* pDocShell );
-
- using ObjectBase::Construct;
-
-private:
- typedef ScfRef< SvStream > SvStreamRef;
- SvStreamRef mxOutStrm;
-};
-
-// ============================================================================
-// ============================================================================
-
-} // namespace dump
-} // namespace scf
-
-#endif
-#endif
-
diff --git a/sc/source/filter/inc/fdumperole.hxx b/sc/source/filter/inc/fdumperole.hxx
deleted file mode 100644
index ad6d1b0dedd9..000000000000
--- a/sc/source/filter/inc/fdumperole.hxx
+++ /dev/null
@@ -1,186 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: fdumperole.hxx,v $
- * $Revision: 1.7 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SC_FDUMPEROLE_HXX
-#define SC_FDUMPEROLE_HXX
-
-#include <sot/storage.hxx>
-#include <sot/storinfo.hxx>
-#include "fdumper.hxx"
-
-#if SCF_INCL_DUMPER
-
-namespace scf {
-namespace dump {
-
-// ============================================================================
-// ============================================================================
-
-class OleStorageObject : public ObjectBase
-{
-public:
- explicit OleStorageObject( const OleStorageObject& rParentStrg, const String& rStrgName );
- explicit OleStorageObject( const ObjectBase& rParent, SotStorageRef xRootStrg );
- explicit OleStorageObject( const ObjectBase& rParent, SvStream& rRootStrm );
- explicit OleStorageObject( const ObjectBase& rParent );
- virtual ~OleStorageObject();
-
- inline SotStorageRef GetStorage() const { return mxStrg; }
- inline const String& GetStoragePath() const { return maPath; }
- inline const String& GetStorageName() const { return maName; }
- String GetFullName() const;
-
- void ExtractStorageToFileSystem();
-
-protected:
- inline explicit OleStorageObject() {}
- void Construct( const ObjectBase& rParent, SotStorageRef xStrg, const String& rPath );
- void Construct( const OleStorageObject& rParentStrg, const String& rStrgName );
- void Construct( const ObjectBase& rParent, SvStream& rRootStrm );
- void Construct( const ObjectBase& rParent );
-
- virtual bool ImplIsValid() const;
- virtual void ImplDumpHeader();
- virtual void ImplDumpFooter();
-
- using ObjectBase::Construct;
-
-private:
- void DumpStorageInfo( bool bExtended );
-
-private:
- SotStorageRef mxStrg;
- String maPath;
- String maName;
-};
-
-typedef ScfRef< OleStorageObject > OleStorageObjectRef;
-
-// ============================================================================
-
-class OleStorageIterator : public Base
-{
-public:
- explicit OleStorageIterator( const OleStorageObject& rStrg );
- explicit OleStorageIterator( SotStorageRef xStrg );
- ~OleStorageIterator();
-
- ULONG GetSize() const;
-
- OleStorageIterator& operator++();
- const SvStorageInfo* operator->() const;
-
-protected:
- void Construct( SotStorageRef xStrg );
-
-private:
- virtual bool ImplIsValid() const;
-
-private:
- typedef ScfRef< SvStorageInfoList > SvStorageInfoListRef;
- SvStorageInfoListRef mxInfoList;
- ULONG mnIndex;
-};
-
-// ============================================================================
-// ============================================================================
-
-class OleStreamObject : public StreamObjectBase
-{
-public:
- explicit OleStreamObject( const OleStorageObject& rParentStrg, const String& rStrmName );
- virtual ~OleStreamObject();
-
-protected:
- inline explicit OleStreamObject() {}
- void Construct( const OleStorageObject& rParentStrg, const String& rStrmName );
-
- virtual bool ImplIsValid() const;
-
- using StreamObjectBase::Construct;
-
-private:
- SotStorageStreamRef mxStrm;
-};
-
-typedef ScfRef< OleStreamObject > OleStreamObjectRef;
-
-// ============================================================================
-
-class OlePropertyStreamObject : public OleStreamObject
-{
-public:
- explicit OlePropertyStreamObject( const OleStorageObject& rParentStrg, const String& rStrmName );
-
-protected:
- inline explicit OlePropertyStreamObject() {}
- void Construct( const OleStorageObject& rParentStrg, const String& rStrmName );
-
- virtual void ImplDumpBody();
-
- using OleStreamObject::Construct;
-
-private:
- void DumpSection( const String& rGuid, sal_uInt32 nStartPos );
-
- void DumpProperty( sal_Int32 nPropId, sal_uInt32 nStartPos );
- void DumpCodePageProperty( sal_uInt32 nStartPos );
- void DumpDictionaryProperty( sal_uInt32 nStartPos );
-
- void DumpPropertyContents( sal_Int32 nPropId );
- void DumpPropertyValue( sal_Int32 nPropId, sal_Int32 nBaseType );
-
- sal_Int32 DumpPropertyType();
- void DumpBlob( const sal_Char* pcName );
- String DumpString8( const sal_Char* pcName );
- String DumpCharArray8( const sal_Char* pcName, sal_Int32 nCharCount );
- String DumpString16( const sal_Char* pcName );
- String DumpCharArray16( const sal_Char* pcName, sal_Int32 nCharCount );
- DateTime DumpFileTime( const sal_Char* pcName );
-
- bool StartElement( sal_uInt32 nStartPos );
- void WriteSectionHeader( const String& rGuid, sal_uInt32 nStartPos );
- void WritePropertyHeader( sal_Int32 nPropId, sal_uInt32 nStartPos );
-
-private:
- NameListRef mxPropIds;
- rtl_TextEncoding meTextEnc;
- bool mbIsUnicode;
-};
-
-// ============================================================================
-// ============================================================================
-
-} // namespace dump
-} // namespace scf
-
-#endif
-#endif
-
diff --git a/sc/source/filter/inc/imp_op.hxx b/sc/source/filter/inc/imp_op.hxx
index f8dad9a45c48..ab5513ead1ed 100644
--- a/sc/source/filter/inc/imp_op.hxx
+++ b/sc/source/filter/inc/imp_op.hxx
@@ -119,6 +119,8 @@ protected:
// Abschneiden von Zellen fuehrt
// Record-Funktionen
+ void ReadFileSharing();
+
sal_uInt16 ReadXFIndex( bool bBiff2 );
void ReadDimensions();
diff --git a/sc/source/filter/inc/xestream.hxx b/sc/source/filter/inc/xestream.hxx
index 676b0d550875..44e02d075317 100644
--- a/sc/source/filter/inc/xestream.hxx
+++ b/sc/source/filter/inc/xestream.hxx
@@ -211,9 +211,6 @@ private:
bool mbInRec; /// true = currently writing inside of a record.
};
-// ----------------------------------------------------------------------------
-
-
// ============================================================================
class XclExpBiff8Encrypter
diff --git a/sc/source/filter/inc/xiroot.hxx b/sc/source/filter/inc/xiroot.hxx
index 915f9610a1f3..f331683988ab 100644
--- a/sc/source/filter/inc/xiroot.hxx
+++ b/sc/source/filter/inc/xiroot.hxx
@@ -117,9 +117,6 @@ struct XclImpRootData : public XclRootData
XclImpTabProtectRef mxTabProtect; /// Sheet protection options for current sheet.
XclImpDocProtectRef mxDocProtect; /// Document protection options.
- String maPassw; /// Entered password for stream decryption.
- bool mbPassQueried; /// true = Password already querried.
-
bool mbHasCodePage; /// true = CODEPAGE record exists.
explicit XclImpRootData( XclBiff eBiff, SfxMedium& rMedium,
@@ -205,9 +202,6 @@ public:
/** Returns the Calc add-in function name for an Excel function name. */
String GetScAddInName( const String& rXclName ) const;
- /** Queries a password from the user and returns it (empty string -> input cancelled). */
- const String& QueryPassword() const;
-
private:
mutable XclImpRootData& mrImpData; /// Reference to the global import data struct.
};
diff --git a/sc/source/filter/inc/xistream.hxx b/sc/source/filter/inc/xistream.hxx
index ccaaccdc0357..3ee461f163fe 100644
--- a/sc/source/filter/inc/xistream.hxx
+++ b/sc/source/filter/inc/xistream.hxx
@@ -31,6 +31,7 @@
#ifndef SC_XISTREAM_HXX
#define SC_XISTREAM_HXX
+#include <comphelper/docpasswordhelper.hxx>
#include <svx/mscodec.hxx>
#include "xlstream.hxx"
#include "xlconst.hxx"
@@ -52,7 +53,7 @@ class XclImpDecrypter;
typedef ScfRef< XclImpDecrypter > XclImpDecrypterRef;
/** Base class for BIFF stream decryption. */
-class XclImpDecrypter
+class XclImpDecrypter : public ::comphelper::IDocPasswordVerifier
{
public:
explicit XclImpDecrypter();
@@ -60,40 +61,39 @@ public:
/** Returns the current error code of the decrypter. */
inline ErrCode GetError() const { return mnError; }
- /** Returns true, if the decrypter has been constructed successfully.
- This means especially that construction happened with a valid password. */
+ /** Returns true, if the decoder has been initialized correctly. */
inline bool IsValid() const { return mnError == ERRCODE_NONE; }
/** Creates a (ref-counted) copy of this decrypter object. */
XclImpDecrypterRef Clone() const;
+ /** Implementation of the ::comphelper::IDocPasswordVerifier interface,
+ calls the new virtual function implVerify(). */
+ virtual ::comphelper::DocPasswordVerifierResult
+ verifyPassword( const ::rtl::OUString& rPassword );
+
/** Updates the decrypter on start of a new record or after seeking stream. */
void Update( SvStream& rStrm, sal_uInt16 nRecSize );
/** Reads and decrypts nBytes bytes and stores data into the existing(!) buffer pData.
@return Count of bytes really read. */
sal_uInt16 Read( SvStream& rStrm, void* pData, sal_uInt16 nBytes );
- const String GetPassword() const;
-
protected:
/** Protected copy c'tor for OnClone(). */
explicit XclImpDecrypter( const XclImpDecrypter& rSrc );
- /** Sets the decrypter to a state showing whether the password was correct. */
- void SetHasValidPassword( bool bValid );
-
- void SetPassword( const String& rPass );
-
private:
/** Implementation of cloning this object. */
virtual XclImpDecrypter* OnClone() const = 0;
+ /** Derived classes implement password verification and initialization of
+ the decoder. */
+ virtual bool OnVerify( const ::rtl::OUString& rPassword ) = 0;
/** Implementation of updating the decrypter. */
virtual void OnUpdate( sal_Size nOldStrmPos, sal_Size nNewStrmPos, sal_uInt16 nRecSize ) = 0;
/** Implementation of the decryption. */
virtual sal_uInt16 OnRead( SvStream& rStrm, sal_uInt8* pnData, sal_uInt16 nBytes ) = 0;
private:
- String maPass; /// Stored password (needed for export)
ErrCode mnError; /// Decrypter error code.
sal_Size mnOldPos; /// Last known stream position.
sal_uInt16 mnRecSize; /// Current record size.
@@ -105,12 +105,7 @@ private:
class XclImpBiff5Decrypter : public XclImpDecrypter
{
public:
- /** Constructs the decrypter.
- @descr Checks if the passed key and hash specify workbook protection.
- Asks for a password otherwise.
- @param nKey Password key from FILEPASS record to verify password.
- @param nHash Password hash value from FILEPASS record to verify password. */
- explicit XclImpBiff5Decrypter( const XclImpRoot& rRoot, sal_uInt16 nKey, sal_uInt16 nHash );
+ explicit XclImpBiff5Decrypter( sal_uInt16 nKey, sal_uInt16 nHash );
private:
/** Private copy c'tor for OnClone(). */
@@ -118,18 +113,18 @@ private:
/** Implementation of cloning this object. */
virtual XclImpBiff5Decrypter* OnClone() const;
+ /** Implements password verification and initialization of the decoder. */
+ virtual bool OnVerify( const ::rtl::OUString& rPassword );
/** Implementation of updating the decrypter. */
virtual void OnUpdate( sal_Size nOldStrmPos, sal_Size nNewStrmPos, sal_uInt16 nRecSize );
/** Implementation of the decryption. */
virtual sal_uInt16 OnRead( SvStream& rStrm, sal_uInt8* pnData, sal_uInt16 nBytes );
- /** Initializes the members.
- @postcond Internal status is set and can be querried with IsValid(). */
- void Init( const ByteString& rPass, sal_uInt16 nKey, sal_uInt16 nHash );
-
private:
::svx::MSCodec_XorXLS95 maCodec; /// Crypto algorithm implementation.
- sal_uInt8 mpnPassw[ 16 ]; /// Cached password data for copy construction.
+ ::std::vector< sal_uInt8 > maPassword;
+ sal_uInt16 mnKey;
+ sal_uInt16 mnHash;
};
// ----------------------------------------------------------------------------
@@ -138,14 +133,8 @@ private:
class XclImpBiff8Decrypter : public XclImpDecrypter
{
public:
- /** Constructs the decrypter.
- @descr Checks if the passed salt data specifies workbook protection.
- Asks for a password otherwise.
- @param pnDocId Unique document identifier from FILEPASS record.
- @param pnSaltData Salt data from FILEPASS record.
- @param pnSaltHash Salt hash value from FILEPASS record. */
- explicit XclImpBiff8Decrypter( const XclImpRoot& rRoot, sal_uInt8 pnDocId[ 16 ],
- sal_uInt8 pnSaltData[ 16 ], sal_uInt8 pnSaltHash[ 16 ] );
+ explicit XclImpBiff8Decrypter( sal_uInt8 pnSalt[ 16 ],
+ sal_uInt8 pnVerifier[ 16 ], sal_uInt8 pnVerifierHash[ 16 ] );
private:
/** Private copy c'tor for OnClone(). */
@@ -153,16 +142,13 @@ private:
/** Implementation of cloning this object. */
virtual XclImpBiff8Decrypter* OnClone() const;
+ /** Implements password verification and initialization of the decoder. */
+ virtual bool OnVerify( const ::rtl::OUString& rPassword );
/** Implementation of updating the decrypter. */
virtual void OnUpdate( sal_Size nOldStrmPos, sal_Size nNewStrmPos, sal_uInt16 nRecSize );
/** Implementation of the decryption. */
virtual sal_uInt16 OnRead( SvStream& rStrm, sal_uInt8* pnData, sal_uInt16 nBytes );
- /** Initializes the internal codec.
- @postcond Internal status is set and can be querried with IsValid(). */
- void Init( const String& rPass, sal_uInt8 pnDocId[ 16 ],
- sal_uInt8 pnSaltData[ 16 ], sal_uInt8 pnSaltHash[ 16 ] );
-
/** Returns the block number corresponding to the passed stream position. */
sal_uInt32 GetBlock( sal_Size nStrmPos ) const;
/** Returns the block offset corresponding to the passed stream position. */
@@ -170,8 +156,10 @@ private:
private:
::svx::MSCodec_Std97 maCodec; /// Crypto algorithm implementation.
- sal_uInt16 mpnPassw[ 16 ]; /// Cached password data for copy construction.
- sal_uInt8 mpnDocId[ 16 ]; /// Cached document ID for copy construction.
+ ::std::vector< sal_uInt16 > maPassword;
+ ::std::vector< sal_uInt8 > maSalt;
+ ::std::vector< sal_uInt8 > maVerifier;
+ ::std::vector< sal_uInt8 > maVerifierHash;
};
// ============================================================================
diff --git a/sc/source/filter/inc/xlcontent.hxx b/sc/source/filter/inc/xlcontent.hxx
index 32803987f5c4..6c86e0be68b7 100644
--- a/sc/source/filter/inc/xlcontent.hxx
+++ b/sc/source/filter/inc/xlcontent.hxx
@@ -35,6 +35,10 @@
// Constants ==================================================================
+// (0x005B) FILESHARING -------------------------------------------------------
+
+const sal_uInt16 EXC_ID_FILESHARING = 0x005B;
+
// (0x00E5) MERGEDCELLS -------------------------------------------------------
const sal_uInt16 EXC_ID_MERGEDCELLS = 0x00E5;
diff --git a/sc/source/filter/inc/xldumper.hxx b/sc/source/filter/inc/xldumper.hxx
deleted file mode 100644
index b35482955f71..000000000000
--- a/sc/source/filter/inc/xldumper.hxx
+++ /dev/null
@@ -1,683 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: xldumper.hxx,v $
- * $Revision: 1.12 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef SC_XLDUMPER_HXX
-#define SC_XLDUMPER_HXX
-
-#include "fdumper.hxx"
-
-#include <stack>
-#include "fdumperdff.hxx"
-#include "fdumperole.hxx"
-#include "xlconst.hxx"
-#include "xlstring.hxx"
-#include "xlstyle.hxx"
-
-#if SCF_INCL_DUMPER
-
-class SfxMedium;
-class SfxObjectShell;
-class ScDocument;
-struct XclImpRootData;
-class XclImpRoot;
-class XclImpStream;
-class XclFunctionProvider;
-
-namespace scf {
-namespace dump {
-namespace xls {
-
-// ============================================================================
-// ============================================================================
-
-struct Address
-{
- sal_Int32 mnCol;
- sal_Int32 mnRow;
- inline explicit Address() : mnCol( 0 ), mnRow( 0 ) {}
- void Read( XclImpStream& rStrm, bool bCol16Bit = true, bool bRow32Bit = false );
-};
-
-// ----------------------------------------------------------------------------
-
-struct Range
-{
- Address maFirst;
- Address maLast;
- inline explicit Range() {}
- void Read( XclImpStream& rStrm, bool bCol16Bit = true, bool bRow32Bit = false );
-};
-
-// ----------------------------------------------------------------------------
-
-struct RangeList : public ::std::vector< Range >
-{
- inline explicit RangeList() {}
- void Read( XclImpStream& rStrm, bool bCol16Bit = true, bool bRow32Bit = false );
-};
-
-// ============================================================================
-
-struct FormulaAddress : public Address
-{
- bool mbRelCol;
- bool mbRelRow;
- inline explicit FormulaAddress() : mbRelCol( false ), mbRelRow( false ) {}
-};
-
-// ----------------------------------------------------------------------------
-
-struct FormulaRange
-{
- FormulaAddress maFirst;
- FormulaAddress maLast;
- inline explicit FormulaRange() {}
-};
-
-// ============================================================================
-
-class StringHelper : public ::scf::dump::StringHelper
-{
-public:
- static void AppendAddrCol( String& rStr, sal_Int32 nCol, bool bRel );
- static void AppendAddrRow( String& rStr, sal_Int32 nRow, bool bRel );
- static void AppendAddrName( String& rStr, sal_Unicode cPrefix, sal_Int32 nColRow, bool bRel );
-
- static void AppendAddress( String& rStr, const Address& rPos );
- static void AppendRange( String& rStr, const Range& rRange );
- static void AppendRangeList( String& rStr, const RangeList& rRanges );
-
- static void AppendAddress( String& rStr, const FormulaAddress& rPos, bool bNameMode );
- static void AppendRange( String& rStr, const FormulaRange& rRange, bool bNameMode );
-};
-
-// ============================================================================
-// ============================================================================
-
-class RecordHeaderObject : public RecordHeaderBase
-{
-public:
- explicit RecordHeaderObject( const InputObjectBase& rParent );
-
- inline bool IsMergeContRec() const { return mbMergeContRec; }
- inline bool HasRecName( sal_uInt16 nRecId ) const { return GetRecNames()->HasName( nRecId ); }
-
- void DumpRecordHeader( XclImpStream& rStrm );
-
-protected:
- virtual bool ImplIsValid() const;
-
-private:
- bool mbMergeContRec;
-};
-
-typedef ScfRef< RecordHeaderObject > RecHeaderObjectRef;
-
-// ============================================================================
-// ============================================================================
-
-class BiffConfig : public Config
-{
-public:
- explicit BiffConfig( const Config& rParent, XclBiff eBiff );
-
-protected:
- virtual bool ImplIsValid() const;
- virtual NameListRef ImplGetNameList( const String& rKey ) const;
-
-private:
- XclBiff meBiff;
-};
-
-typedef ScfRef< BiffConfig > BiffConfigRef;
-
-// ============================================================================
-
-class RootData : public Base
-{
-public:
- explicit RootData( SfxMedium& rMedium, XclBiff eBiff );
- virtual ~RootData();
-
- inline const XclImpRoot& GetRoot() const { return *mxRoot; }
-
- rtl_TextEncoding GetTextEncoding() const;
- void SetTextEncoding( rtl_TextEncoding eTextEnc );
-
-protected:
- virtual bool ImplIsValid() const;
-
-private:
- typedef ScfRef< ScDocument > ScDocumentRef;
- typedef ScfRef< XclImpRootData > XclImpRootDataRef;
- typedef ScfRef< XclImpRoot > XclImpRootRef;
-
- ScDocumentRef mxDoc;
- XclImpRootDataRef mxRootData;
- XclImpRootRef mxRoot;
-};
-
-typedef ScfRef< RootData > RootDataRef;
-
-// ============================================================================
-
-class RootObjectBase : public WrappedStreamObject
-{
-public:
- virtual ~RootObjectBase();
-
- inline RootData& Root() const { return *mxRootData; }
- inline const XclImpRoot& GetXclRoot() const { return mxRootData->GetRoot(); }
- inline XclImpStream& GetXclStream() const { return *mxStrm; }
- inline XclBiff GetBiff() const { return meBiff; }
-
-protected:
- explicit RootObjectBase();
- void Construct( const ObjectBase& rParent, SvStream& rStrm, XclBiff eBiff );
- void Construct( const OleStorageObject& rParentStrg, const String& rStrmName, XclBiff eBiff );
- void Construct( const RootObjectBase& rParent );
-
- virtual bool ImplIsValid() const;
- virtual void ImplDumpExtendedHeader();
- virtual ConfigRef ImplReconstructConfig();
- virtual InputRef ImplReconstructInput();
-
- String GetErrorName( sal_uInt8 nErrCode ) const;
-
- // ------------------------------------------------------------------------
-
- double WriteRkItem( const sal_Char* pcName, sal_Int32 nRk );
- void WriteBooleanItem( const sal_Char* pcName, sal_uInt8 nBool );
- void WriteErrorCodeItem( const sal_Char* pcName, sal_uInt8 nErrCode );
-
- void WriteColIndexItem( const sal_Char* pcName, sal_Int32 nCol );
- void WriteColRangeItem( const sal_Char* pcName, sal_Int32 nCol1, sal_Int32 nCol2 );
- void WriteRowIndexItem( const sal_Char* pcName, sal_Int32 nRow );
- void WriteRowRangeItem( const sal_Char* pcName, sal_Int32 nRow1, sal_Int32 nRow2 );
-
- void WriteAddressItem( const sal_Char* pcName, const Address& rPos );
- void WriteRangeItem( const sal_Char* pcName, const Range& rRange );
- void WriteRangeListItem( const sal_Char* pcName, const RangeList& rRanges );
-
- template< typename Type >
- void WriteRectItem( const sal_Char* pcName,
- Type nLeft, Type nTop, Type nWidth, Type nHeight,
- const NameListWrapper& rListWrp = NO_LIST,
- FormatType eFmtType = FORMATTYPE_DEC );
-
- // ------------------------------------------------------------------------
-
- String DumpString( const sal_Char* pcName = 0, XclStrFlags nFlags = EXC_STR_DEFAULT );
- double DumpRk( const sal_Char* pcName = 0 );
- sal_uInt8 DumpBoolean( const sal_Char* pcName = 0 );
- sal_uInt8 DumpErrorCode( const sal_Char* pcName = 0 );
-
- Color DumpRgbColor( const sal_Char* pcName = 0 );
- rtl_TextEncoding DumpCodePage( const sal_Char* pcName = 0 );
- void DumpFormulaResult( const sal_Char* pcName = 0 );
-
- sal_Int32 DumpColIndex( const sal_Char* pcName = 0, bool bCol16Bit = true );
- sal_Int32 DumpColRange( const sal_Char* pcName = 0, bool bCol16Bit = true );
- sal_Int32 DumpRowIndex( const sal_Char* pcName = 0, bool bRow32Bit = false );
- sal_Int32 DumpRowRange( const sal_Char* pcName = 0, bool bRow32Bit = false );
-
- Address DumpAddress( const sal_Char* pcName = 0, bool bCol16Bit = true, bool bRow32Bit = false );
- Range DumpRange( const sal_Char* pcName = 0, bool bCol16Bit = true, bool bRow32Bit = false );
- void DumpRangeList( const sal_Char* pcName = 0, bool bCol16Bit = true, bool bRow32Bit = false );
-
- void DumpConstArrayHeader( sal_uInt32& rnCols, sal_uInt32& rnRows );
- String DumpConstValue();
-
- template< typename Type >
- void DumpRect( const sal_Char* pcName,
- const NameListWrapper& rListWrp = NO_LIST,
- FormatType eFmtType = FORMATTYPE_DEC );
-
- // ------------------------------------------------------------------------
-
- using WrappedStreamObject::Construct;
-
-private:
- void ConstructRootObjBase( XclBiff eBiff );
-
-private:
- typedef ScfRef< XclImpStream > XclImpStreamRef;
-
- RootDataRef mxRootData;
- BiffConfigRef mxBiffCfg;
- XclImpStreamRef mxStrm;
- XclBiff meBiff;
- NameListRef mxBoolean;
- NameListRef mxErrCodes;
- NameListRef mxConstType;
- NameListRef mxResultType;
-};
-
-// ----------------------------------------------------------------------------
-
-template< typename Type >
-void RootObjectBase::WriteRectItem( const sal_Char* pcName,
- Type nLeft, Type nTop, Type nWidth, Type nHeight,
- const NameListWrapper& rListWrp, FormatType eFmtType )
-{
- MultiItemsGuard aMultiGuard( Out() );
- WriteEmptyItem( pcName );
- WriteValueItem( "x-pos", nLeft, eFmtType, rListWrp );
- WriteValueItem( "y-pos", nTop, eFmtType, rListWrp );
- WriteValueItem( "x-size", nWidth, eFmtType, rListWrp );
- WriteValueItem( "y-size", nHeight, eFmtType, rListWrp );
-}
-
-template< typename Type >
-void RootObjectBase::DumpRect( const sal_Char* pcName,
- const NameListWrapper& rListWrp, FormatType eFmtType )
-{
- Type nLeft, nTop, nWidth, nHeight;
- *mxStrm >> nLeft >> nTop >> nWidth >> nHeight;
- WriteRectItem( pcName, nLeft, nTop, nWidth, nHeight, rListWrp, eFmtType );
-}
-
-// ============================================================================
-// ============================================================================
-
-class SimpleObjectBase : public RootObjectBase
-{
-public:
- virtual ~SimpleObjectBase();
-
-protected:
- inline explicit SimpleObjectBase() {}
- void Construct( const RootObjectBase& rParent );
-
- virtual void ImplDumpHeader();
- virtual void ImplDumpFooter();
-
- using RootObjectBase::Construct;
-};
-
-// ============================================================================
-// ============================================================================
-
-/** Stack to create a human readable formula string from a UPN token array. */
-class FormulaStack
-{
-public:
- explicit FormulaStack();
-
- inline const String& GetFormulaString() const { return GetString( maFmlaStack ); }
- inline const String& GetClassesString() const { return GetString( maClassStack ); }
-
- void PushOperand( const StringWrapper& rOp, const String& rTokClass );
- void PushOperand( const StringWrapper& rOp );
- void PushUnaryOp( const StringWrapper& rLOp, const StringWrapper& rROp );
- void PushBinaryOp( const StringWrapper& rOp );
- void PushFuncOp( const StringWrapper& rFunc, const String& rTokClass, sal_uInt8 nParamCount );
-
- inline void SetError() { mbError = true; }
- void ReplaceOnTop( const String& rOld, const String& rNew );
-
-private:
- typedef ::std::stack< String > StringStack;
-
- inline bool Check( bool bCond ) { return (mbError |= !bCond) == false; }
-
- const String& GetString( const StringStack& rStack ) const;
- void PushUnaryOp( StringStack& rStack, const String& rLOp, const String& rROp );
- void PushBinaryOp( StringStack& rStack, const String& rOp );
- void PushFuncOp( StringStack& rStack, const String& rOp, sal_uInt8 nParamCount );
-
-private:
- StringStack maFmlaStack;
- StringStack maClassStack;
- bool mbError;
-};
-
-// ============================================================================
-
-class FormulaObject : public SimpleObjectBase
-{
-public:
- explicit FormulaObject( const RootObjectBase& rParent );
- virtual ~FormulaObject();
-
- sal_uInt16 ReadFormulaSize();
- sal_uInt16 DumpFormulaSize( const sal_Char* pcName = 0 );
-
- void DumpCellFormula( const sal_Char* pcName, sal_uInt16 nSize );
- void DumpCellFormula( const sal_Char* pcName = 0 );
- void DumpNameFormula( const sal_Char* pcName, sal_uInt16 nSize );
- void DumpNameFormula( const sal_Char* pcName = 0 );
-
-protected:
- virtual void ImplDumpHeader();
- virtual void ImplDumpBody();
-
-private:
- void ConstructFmlaObj();
-
- void DumpFormula( const sal_Char* pcName, sal_uInt16 nSize, bool bNameMode );
- void DumpFormula( const sal_Char* pcName, bool bNameMode );
-
- FormulaAddress CreateTokenAddress( sal_uInt16 nCol, sal_uInt16 nRow, bool bRelC, bool bRelR, bool bNameMode ) const;
- String CreateFunc( sal_uInt16 nFuncIdx ) const;
- String CreateRef( const String& rData ) const;
- String CreateName( sal_uInt16 nNameIdx ) const;
- String CreatePlaceHolder( size_t nIdx ) const;
- String CreatePlaceHolder() const;
-
- void WriteTokenAddressItem( const sal_Char* pcName, const FormulaAddress& rPos, bool bNameMode );
- void WriteTokenAddress3dItem( const sal_Char* pcName, const String& rRef, const FormulaAddress& rPos, bool bNameMode );
- void WriteTokenRangeItem( const sal_Char* pcName, const FormulaRange& rRange, bool bNameMode );
- void WriteTokenRange3dItem( const sal_Char* pcName, const String& rRef, const FormulaRange& rRange, bool bNameMode );
-
- sal_uInt16 DumpTokenFuncIdx();
- sal_uInt16 DumpTokenCol( const sal_Char* pcName, bool& rbRelC, bool& rbRelR );
- sal_uInt16 DumpTokenRow( const sal_Char* pcName, bool& rbRelC, bool& rbRelR );
- FormulaAddress DumpTokenAddress( bool bNameMode );
- FormulaRange DumpTokenRange( bool bNameMode );
- String DumpTokenRefIdx();
- void DumpTokenRefTabIdxs();
-
- void DumpIntToken();
- void DumpDoubleToken();
- void DumpStringToken();
- void DumpBoolToken();
- void DumpErrorToken();
- void DumpMissArgToken();
-
- void DumpArrayToken( const String& rTokClass );
- void DumpNameToken( const String& rTokClass );
- void DumpNameXToken( const String& rTokClass );
- void DumpRefToken( const String& rTokClass, bool bNameMode );
- void DumpAreaToken( const String& rTokClass, bool bNameMode );
- void DumpRefErrToken( const String& rTokClass, bool bArea );
- void DumpRef3dToken( const String& rTokClass, bool bNameMode );
- void DumpArea3dToken( const String& rTokClass, bool bNameMode );
- void DumpRefErr3dToken( const String& rTokClass, bool bArea );
- void DumpMemFuncToken( const String& rTokClass );
- void DumpMemAreaToken( const String& rTokClass, bool bAddData );
-
- void DumpExpToken( const StringWrapper& rName );
- void DumpUnaryOpToken( const StringWrapper& rLOp, const StringWrapper& rROp );
- void DumpBinaryOpToken( const StringWrapper& rOp );
- void DumpFuncToken( const String& rTokClass );
- void DumpFuncVarToken( const String& rTokClass );
- void DumpCmdToken( const String& rTokClass );
-
- void DumpSheetToken();
- void DumpEndSheetToken();
- bool DumpAttrToken();
-
- bool DumpNlrToken();
- void DumpNlrErrToken();
- void DumpNlrColRowToken( const String& rTokClass, bool bAddData );
- void DumpNlrRangeToken( const String& rTokClass, bool bAddData );
- void DumpNlrRangeErrToken();
-
- void DumpAddTokenData();
- void DumpAddDataNlr( size_t nIdx );
- void DumpAddDataArray( size_t nIdx );
- void DumpAddDataMemArea( size_t nIdx );
-
-private:
- enum AddDataType { ADDDATA_NLR, ADDDATA_ARRAY, ADDDATA_MEMAREA };
-
- typedef ScfRef< FormulaStack > FormulaStackRef;
- typedef ScfRef< XclFunctionProvider > XclFuncProvRef;
- typedef ::std::vector< AddDataType > AddDataTypeVec;
-
- NameListRef mxTokens;
- NameListRef mxClasses;
- NameListRef mxFuncNames;
- NameListRef mxParamCnt;
- NameListRef mxRelFlags;
- NameListRef mxNlrTypes;
- NameListRef mxAttrTypes;
- NameListRef mxSpTypes;
-
- FormulaStackRef mxStack;
- XclFuncProvRef mxFuncProv;
- AddDataTypeVec maAddData;
- String maRefPrefix;
- const sal_Char* mpcName;
- sal_uInt16 mnSize;
- bool mbNameMode;
-};
-
-typedef ScfRef< FormulaObject > FormulaObjectRef;
-
-// ============================================================================
-// ============================================================================
-
-class RecordStreamObject : public RootObjectBase
-{
-public:
- explicit RecordStreamObject( const ObjectBase& rParent, SvStream& rStrm, XclBiff eBiff = EXC_BIFF_UNKNOWN );
- explicit RecordStreamObject( const OleStorageObject& rParentStrg, const String& rStrmName, XclBiff eBiff = EXC_BIFF_UNKNOWN );
- virtual ~RecordStreamObject();
-
-protected:
- inline explicit RecordStreamObject() {}
- void Construct( const ObjectBase& rParent, SvStream& rStrm, XclBiff eBiff );
- void Construct( const OleStorageObject& rParentStrg, const String& rStrmName, XclBiff eBiff );
-
- virtual bool ImplIsValid() const;
- virtual void ImplDumpBody();
-
- virtual void ImplPreProcessRecord();
- virtual void ImplDumpRecord();
- virtual void ImplPostProcessRecord();
-
- inline RecordHeaderObject& GetRecordHeader() const { return *mxHdrObj; }
- inline FormulaObject& GetFormulaDumper() const { return *mxFmlaObj; }
- inline DffDumpObject& GetDffDumper() const { return *mxDffObj; }
-
- void DumpRepeatedRecordId();
-
- using RootObjectBase::Construct;
-
-private:
- void ConstructRecStrmObj();
-
- void DumpRecordBody();
- void DumpSimpleRecord( const String& rRecData );
-
-private:
- String maProgressName;
- RecHeaderObjectRef mxHdrObj;
- FormulaObjectRef mxFmlaObj;
- DffDumpObjectRef mxDffObj;
- NameListRef mxSimpleRecs;
-};
-
-// ============================================================================
-
-class WorkbookStreamObject : public RecordStreamObject
-{
-public:
- explicit WorkbookStreamObject( const ObjectBase& rParent, SvStream& rStrm );
- explicit WorkbookStreamObject( const OleStorageObject& rParentStrg, const String& rStrmName );
- virtual ~WorkbookStreamObject();
-
-protected:
- virtual void ImplPreProcessRecord();
- virtual void ImplDumpRecord();
- virtual void ImplPostProcessRecord();
-
-private:
- void ConstructWbStrmObj();
-
- const XclFontData* GetFontData( sal_uInt16 nFontIdx ) const;
- sal_uInt16 GetXfData( sal_uInt16 nXfIdx ) const;
- rtl_TextEncoding GetFontEncoding( sal_uInt16 nXfIdx ) const;
- String CreateFontName( const XclFontData& rFontData ) const;
-
- template< typename Type >
- Type DumpPatternIdx( const sal_Char* pcName = 0 );
- template< typename Type >
- Type DumpColorIdx( const sal_Char* pcName = 0 );
-
- sal_uInt16 DumpFontIdx( const sal_Char* pcName = 0 );
- sal_uInt16 DumpFormatIdx( const sal_Char* pcName = 0 );
- sal_uInt16 DumpXfIdx( const sal_Char* pcName = 0, bool bBiff2Style = false );
-
- sal_uInt16 DumpCellHeader( bool bBiff2Style = false );
- void DumpBoolErr();
-
- void DumpFontRec();
- void DumpFormatRec();
- void DumpXfRec();
-
- void DumpObjRec();
- void DumpObjRec5();
- void DumpObjRec8();
-
-private:
- typedef ::std::vector< XclFontData > XclFontDataVec;
-
- NameListRef mxColors;
- NameListRef mxBorderStyles;
- NameListRef mxFillPatterns;
- NameListRef mxFontNames;
- NameListRef mxFormats;
- XclFontDataVec maFontDatas;
- ScfUInt16Vec maXfDatas;
- sal_uInt16 mnFormatIdx;
- sal_uInt16 mnPTRowFields;
- sal_uInt16 mnPTColFields;
- sal_uInt16 mnPTSxliIdx;
- bool mbHasCodePage;
-};
-
-// ----------------------------------------------------------------------------
-
-template< typename Type >
-Type WorkbookStreamObject::DumpPatternIdx( const sal_Char* pcName )
-{
- return DumpDec< Type >( pcName ? pcName : "fill-pattern", mxFillPatterns );
-}
-
-template< typename Type >
-Type WorkbookStreamObject::DumpColorIdx( const sal_Char* pcName )
-{
- return DumpDec< Type >( pcName ? pcName : "color-idx", mxColors );
-}
-
-// ============================================================================
-
-class PivotCacheStreamObject : public RecordStreamObject
-{
-public:
- explicit PivotCacheStreamObject( const ObjectBase& rParent, SvStream& rStrm );
- explicit PivotCacheStreamObject( const OleStorageObject& rParentStrg, const String& rStrmName );
- virtual ~PivotCacheStreamObject();
-
-protected:
- virtual void ImplDumpRecord();
-};
-
-// ============================================================================
-
-class VbaProjectStreamObject : public OleStreamObject
-{
-public:
- explicit VbaProjectStreamObject( const OleStorageObject& rParentStrg );
-
-protected:
- virtual void ImplDumpBody();
-};
-
-// ============================================================================
-// ============================================================================
-
-class PivotCacheStorageObject : public OleStorageObject
-{
-public:
- explicit PivotCacheStorageObject( const OleStorageObject& rParentStrg );
-
-protected:
- virtual void ImplDumpBody();
-};
-
-// ============================================================================
-
-class VbaProjectStorageObject : public OleStorageObject
-{
-public:
- explicit VbaProjectStorageObject( const OleStorageObject& rParentStrg );
-
-protected:
- virtual void ImplDumpBody();
-};
-
-// ============================================================================
-
-class VbaStorageObject : public OleStorageObject
-{
-public:
- explicit VbaStorageObject( const OleStorageObject& rParentStrg );
-
-protected:
- virtual void ImplDumpBody();
-};
-
-// ============================================================================
-
-class RootStorageObject : public OleStorageObject
-{
-public:
- explicit RootStorageObject( const ObjectBase& rParent );
-
-protected:
- virtual void ImplDumpBody();
-};
-
-// ============================================================================
-// ============================================================================
-
-class Dumper : public DumperBase
-{
-public:
- explicit Dumper( SfxMedium& rMedium, SfxObjectShell* pDocShell );
-
-protected:
- virtual void ImplDumpBody();
-};
-
-// ============================================================================
-// ============================================================================
-
-} // namespace xls
-} // namespace dump
-} // namespace scf
-
-#endif
-#endif
-
diff --git a/sc/source/filter/inc/xlroot.hxx b/sc/source/filter/inc/xlroot.hxx
index 36056ead2fe2..8571dafcbc74 100644
--- a/sc/source/filter/inc/xlroot.hxx
+++ b/sc/source/filter/inc/xlroot.hxx
@@ -36,6 +36,8 @@
#include "xlconst.hxx"
#include "xltools.hxx"
+namespace comphelper { class IDocPasswordVerifier; }
+
// Forward declarations of objects in public use ==============================
class DateTime;
@@ -92,6 +94,7 @@ struct XclRootData
ScDocument& mrDoc; /// The source or destination document.
String maDocUrl; /// Document URL of imported/exported file.
String maBasePath; /// Base path of imported/exported file (path of maDocUrl).
+ const String maDefPassword; /// The default password used for stream encryption.
rtl_TextEncoding meTextEnc; /// Text encoding to import/export byte strings.
LanguageType meSysLang; /// System language.
LanguageType meDocLang; /// Document language (import: from file, export: from system).
@@ -183,6 +186,11 @@ public:
/** Returns the base path of the imported/exported file. */
inline const String& GetBasePath() const { return mrData.maBasePath; }
+ /** Returns the default password used for stream encryption. */
+ inline const String& GetDefaultPassword() const { return mrData.maDefPassword; }
+ /** Requests and verifies a password from the medium or the user. */
+ String RequestPassword( ::comphelper::IDocPasswordVerifier& rVerifier ) const;
+
/** Returns the OLE2 root storage of the imported/exported file.
@return Pointer to root storage or 0, if the file is a simple stream. */
inline SotStorageRef GetRootStorage() const { return mrData.mxRootStrg; }
diff --git a/sc/source/filter/inc/xlstream.hxx b/sc/source/filter/inc/xlstream.hxx
index ffdd74d5f218..603a4cfab3fc 100644
--- a/sc/source/filter/inc/xlstream.hxx
+++ b/sc/source/filter/inc/xlstream.hxx
@@ -50,19 +50,6 @@ const sal_uInt16 EXC_ENCR_BLOCKSIZE = 1024;
const sal_uInt16 EXC_ID_UNKNOWN = SAL_MAX_UINT16;
const sal_uInt16 EXC_ID_CONT = 0x003C;
-// Encryption/decryption ======================================================
-
-/** Helper class for BIFF stream en-/decryption. */
-class XclCryptoHelper : ScfNoInstance
-{
-public:
- /** Returns the fixed password for workbook protection. */
- static const ByteString GetBiff5WbProtPassword();
-
- /** Returns the fixed password for workbook protection. */
- static const String GetBiff8WbProtPassword();
-};
-
// ============================================================================
#endif
diff --git a/sc/source/ui/dbgui/fieldwnd.cxx b/sc/source/ui/dbgui/fieldwnd.cxx
index e20542bfedf6..4d3c478d9068 100644
--- a/sc/source/ui/dbgui/fieldwnd.cxx
+++ b/sc/source/ui/dbgui/fieldwnd.cxx
@@ -31,12 +31,11 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sc.hxx"
-
-
#include <vcl/virdev.hxx>
#include <vcl/decoview.hxx>
#include <vcl/svapp.hxx>
-
+#include <vcl/mnemonic.hxx>
+#include <vcl/help.hxx>
#include <tools/debug.hxx>
#include "fieldwnd.hxx"
@@ -44,10 +43,7 @@
#include "pvglob.hxx"
#include "AccessibleDataPilotControl.hxx"
#include "scresid.hxx"
-#ifndef SC_SC_HRC
#include "sc.hrc"
-#endif
-#include <vcl/mnemonic.hxx>
const size_t INVALID_INDEX = static_cast< size_t >( -1 );
@@ -238,27 +234,44 @@ void ScDPFieldWindow::DrawBackground( OutputDevice& rDev )
}
void ScDPFieldWindow::DrawField(
- OutputDevice& rDev, const Rectangle& rRect, const String& rText, bool bFocus )
+ OutputDevice& rDev, const Rectangle& rRect, FieldString& rText, bool bFocus )
{
VirtualDevice aVirDev( rDev );
// #i97623# VirtualDevice is always LTR while other windows derive direction from parent
aVirDev.EnableRTL( IsRTLEnabled() );
+ String aText = rText.first;
Size aDevSize( rRect.GetSize() );
long nWidth = aDevSize.Width();
long nHeight = aDevSize.Height();
- long nLabelWidth = rDev.GetTextWidth( rText );
+ long nLabelWidth = rDev.GetTextWidth( aText );
long nLabelHeight = rDev.GetTextHeight();
- Point aLabelPos(
- ((nWidth > nLabelWidth + 6) ? (nWidth - nLabelWidth) / 2 : 3),
- ((nHeight > nLabelHeight + 6) ? (nHeight - nLabelHeight) / 2 : 3) );
+
+ // #i31600# if text is too long, cut and add ellipsis
+ rText.second = nLabelWidth + 6 <= nWidth;
+ if( !rText.second )
+ {
+ xub_StrLen nMinLen = 0;
+ xub_StrLen nMaxLen = aText.Len();
+ bool bFits = false;
+ do
+ {
+ xub_StrLen nCurrLen = (nMinLen + nMaxLen) / 2;
+ aText = String( rText.first, 0, nCurrLen ).AppendAscii( "..." );
+ nLabelWidth = rDev.GetTextWidth( aText );
+ bFits = nLabelWidth + 6 <= nWidth;
+ (bFits ? nMinLen : nMaxLen) = nCurrLen;
+ }
+ while( !bFits || (nMinLen + 1 < nMaxLen) );
+ }
+ Point aLabelPos( (nWidth - nLabelWidth) / 2, ::std::max< long >( (nHeight - nLabelHeight) / 2, 3 ) );
aVirDev.SetOutputSizePixel( aDevSize );
aVirDev.SetFont( rDev.GetFont() );
DecorationView aDecoView( &aVirDev );
aDecoView.DrawButton( Rectangle( Point( 0, 0 ), aDevSize ), bFocus ? BUTTON_DRAW_DEFAULT : 0 );
aVirDev.SetTextColor( aTextColor );
- aVirDev.DrawText( aLabelPos, rText );
+ aVirDev.DrawText( aLabelPos, aText );
rDev.DrawBitmap( rRect.TopLeft(), aVirDev.GetBitmap( Point( 0, 0 ), aDevSize ) );
}
@@ -292,7 +305,7 @@ void ScDPFieldWindow::Redraw()
if( HasFocus() && (nFieldSelected < aFieldArr.size()) )
{
long nFieldWidth = aFieldRect.GetWidth();
- long nSelectionWidth = Min( GetTextWidth( aFieldArr[ nFieldSelected ] ) + 4, nFieldWidth - 6 );
+ long nSelectionWidth = Min( GetTextWidth( aFieldArr[ nFieldSelected ].first ) + 4, nFieldWidth - 6 );
Rectangle aSelection(
GetFieldPosition( nFieldSelected ) + Point( (nFieldWidth - nSelectionWidth) / 2, 3 ),
Size( nSelectionWidth, aFieldRect.GetHeight() - 6 ) );
@@ -320,6 +333,11 @@ bool ScDPFieldWindow::IsExistingIndex( size_t nIndex ) const
return nIndex < aFieldArr.size();
}
+bool ScDPFieldWindow::IsShortenedText( size_t nIndex ) const
+{
+ return (nIndex < aFieldArr.size()) && !aFieldArr[ nIndex ].second;
+}
+
size_t ScDPFieldWindow::CalcNewFieldIndex( SCsCOL nDX, SCsROW nDY ) const
{
size_t nNewField = nFieldSelected;
@@ -513,6 +531,14 @@ void __EXPORT ScDPFieldWindow::MouseMove( const MouseEvent& rMEvt )
PointerStyle ePtr = pDlg->NotifyMouseMove( OutputToScreenPixel( rMEvt.GetPosPixel() ) );
SetPointer( Pointer( ePtr ) );
}
+ size_t nIndex = 0;
+ if( GetFieldIndex( rMEvt.GetPosPixel(), nIndex ) && IsShortenedText( nIndex ) )
+ {
+ Point aPos = OutputToScreenPixel( rMEvt.GetPosPixel() );
+ Rectangle aRect( aPos, GetSizePixel() );
+ String aHelpText = GetFieldText(nIndex);
+ Help::ShowQuickHelp( this, aRect, aHelpText );
+ }
}
void __EXPORT ScDPFieldWindow::KeyInput( const KeyEvent& rKEvt )
@@ -598,7 +624,7 @@ void ScDPFieldWindow::AddField( const String& rText, size_t nNewIndex )
DBG_ASSERT( nNewIndex == aFieldArr.size(), "ScDPFieldWindow::AddField - invalid index" );
if( IsValidIndex( nNewIndex ) )
{
- aFieldArr.push_back( rText );
+ aFieldArr.push_back( FieldString( rText, true ) );
if (pAccessible)
{
com::sun::star::uno::Reference < com::sun::star::accessibility::XAccessible > xTempAcc = xAccessible;
@@ -646,7 +672,7 @@ void ScDPFieldWindow::SetFieldText( const String& rText, size_t nIndex )
{
if( IsExistingIndex( nIndex ) )
{
- aFieldArr[ nIndex ] = rText;
+ aFieldArr[ nIndex ] = FieldString( rText, true );
Redraw();
if (pAccessible)
@@ -663,7 +689,7 @@ void ScDPFieldWindow::SetFieldText( const String& rText, size_t nIndex )
const String& ScDPFieldWindow::GetFieldText( size_t nIndex ) const
{
if( IsExistingIndex( nIndex ) )
- return aFieldArr[ nIndex ];
+ return aFieldArr[ nIndex ].first;
return EMPTY_STRING;
}
@@ -680,7 +706,7 @@ bool ScDPFieldWindow::AddField( const String& rText, const Point& rPos, size_t&
if( nNewIndex > aFieldArr.size() )
nNewIndex = aFieldArr.size();
- aFieldArr.insert( aFieldArr.begin() + nNewIndex, rText );
+ aFieldArr.insert( aFieldArr.begin() + nNewIndex, FieldString( rText, true ) );
nFieldSelected = nNewIndex;
Redraw();
rnIndex = nNewIndex;
diff --git a/sc/source/ui/inc/fieldwnd.hxx b/sc/source/ui/inc/fieldwnd.hxx
index 5b24b5fea3df..ae2dbf1ffb52 100644
--- a/sc/source/ui/inc/fieldwnd.hxx
+++ b/sc/source/ui/inc/fieldwnd.hxx
@@ -68,12 +68,14 @@ enum ScDPFieldType
class ScDPFieldWindow : public Control
{
private:
+ typedef ::std::pair< String, bool > FieldString; // true = text fits into button
+
String aName; /// name of the control, used in Accessibility
ScDPLayoutDlg* pDlg; /// Parent dialog.
Rectangle aWndRect; /// Area rectangle in pixels.
FixedText* pFtCaption; /// FixedText containing the name of the control.
Point aTextPos; /// Position of the caption text.
- std::vector< String > aFieldArr; /// Pointer to string array of the field names.
+ std::vector< FieldString > aFieldArr; /// String array of the field names and flags, if text fits into button.
ScDPFieldType eType; /// Type of this area.
Color aFaceColor; /// Color for dialog background.
Color aWinColor; /// Color for window background.
@@ -97,13 +99,16 @@ private:
void DrawField(
OutputDevice& rDev,
const Rectangle& rRect,
- const String& rText,
+ FieldString& rText,
bool bFocus );
/** @return TRUE, if the field index is inside of the control area. */
bool IsValidIndex( size_t nIndex ) const;
/** @return TRUE, if the field with the given index exists. */
bool IsExistingIndex( size_t nIndex ) const;
+ /** @return TRUE, if the field with the given index exists and the text is
+ too long for the button control. */
+ bool IsShortenedText( size_t nIndex ) const;
/** @return The new selection index after moving to the given direction. */
size_t CalcNewFieldIndex( SCsCOL nDX, SCsROW nDY ) const;
diff --git a/sc/source/ui/view/output2.cxx b/sc/source/ui/view/output2.cxx
index e41bd4941d9c..dd76058756a1 100644
--- a/sc/source/ui/view/output2.cxx
+++ b/sc/source/ui/view/output2.cxx
@@ -1358,11 +1358,13 @@ void ScOutputData::DrawStrings( BOOL bPixelToLogic )
}
if (bDoCell && !bNeedEdit)
{
- if ( pCell->GetCellType() == CELLTYPE_FORMULA )
+ BOOL bFormulaCell = (pCell->GetCellType() == CELLTYPE_FORMULA );
+ if ( bFormulaCell )
lcl_CreateInterpretProgress( bProgress, pDoc, (ScFormulaCell*)pCell );
if ( aVars.SetText(pCell) )
pOldPattern = NULL;
- bNeedEdit = aVars.HasEditCharacters();
+ bNeedEdit = aVars.HasEditCharacters() ||
+ (bFormulaCell && ((ScFormulaCell*)pCell)->IsMultilineResult());
}
if (bDoCell && !bNeedEdit)
{