summaryrefslogtreecommitdiff
path: root/sw/source/filter/ww8/dump/ww8dout.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/filter/ww8/dump/ww8dout.cxx')
-rw-r--r--sw/source/filter/ww8/dump/ww8dout.cxx422
1 files changed, 422 insertions, 0 deletions
diff --git a/sw/source/filter/ww8/dump/ww8dout.cxx b/sw/source/filter/ww8/dump/ww8dout.cxx
new file mode 100644
index 000000000000..1f10d9003ff5
--- /dev/null
+++ b/sw/source/filter/ww8/dump/ww8dout.cxx
@@ -0,0 +1,422 @@
+/*************************************************************************
+ *
+ * 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: ww8dout.cxx,v $
+ * $Revision: 1.9 $
+ *
+ * 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_sw.hxx"
+
+#include <stdio.h> // getchar
+
+//#include "defs.hxx"
+#include <tools/solar.h> // BYTE
+//#include "wwscan.hxx" // aWwStor
+#include "ww8dout.hxx"
+#include <tools/stream.hxx>
+
+#include <sot/storage.hxx>
+
+extern SvStorageStreamRef xStrm;
+extern SvStorageStreamRef xTableStream;
+extern SvStorageStreamRef xDataStream; // ist bei Ver6-7 mit xStrm identisch,
+void DumpSprms( BYTE nVersion, SvStream& rSt, short nLen );
+
+ostream* pOut = 0;
+
+#define DumpVer8
+
+//-----------------------------------------
+// Streams
+//-----------------------------------------
+
+
+static int level = 0;
+static long lastpos = -1;
+
+ostream& __cdecl endl1( ostream& s ){
+//ostream& endl1( ostream& s ) {
+ s << endl;
+ return s;
+}
+
+ostream& __cdecl hex2( ostream& s ) {
+ s.width( 2 ); s.fill( (const char)250 );
+ s << hex;
+ return s;
+}
+
+ostream& __cdecl hex4( ostream& s ) {
+ s.width( 4 ); s.fill( (const char)250 );
+ s << hex ;
+ return s;
+}
+
+ostream& __cdecl hex6( ostream& s ) {
+ s.width( 6 ); s.fill( (const char)250 );
+ s << hex ;
+ return s;
+}
+
+ostream& __cdecl hex8( ostream& s ) {
+ s.width( 8 ); s.fill( (const char)250 );
+ s << hex ;
+ return s;
+}
+
+ostream& __cdecl dec2( ostream& s ) {
+ s << dec;
+ s.width( 0 ); s.fill( 0 );
+ return s;
+}
+
+ostream& __cdecl filepos( ostream& s, SvStream& rSt ) {
+ long pos = rSt.Tell();
+
+ if ( pos != lastpos ){
+#ifndef DumpVer8
+ if( &rSt == &xStrm )
+ s << "D";
+ else
+ s << "T";
+#endif
+ s.width( 6 );
+ s.fill( (const char)250 );
+ s << hex << pos << dec << ' ';
+ s.width( 0 ); s.fill( 0 );
+ lastpos = pos;
+ }else{
+#ifndef DumpVer8
+ s << " ";
+#else
+ s << " ";
+#endif
+ }
+ return s;
+}
+
+ostream& __cdecl indent( ostream& s, SvStream& rSt ) {
+ filepos( s, rSt );
+ for( int i = 0; i < level; i++ ) s << " ";
+ return s;
+}
+
+ostream& __cdecl indent1( ostream& s ) {
+ for( int i = 0; i < level; i++ ) s << " ";
+ return s;
+}
+
+ostream& __cdecl indent2( ostream& s ) {
+#ifndef DumpVer8
+ s << " " << indent1;
+#else
+ s << " " << indent1;
+#endif
+ return s;
+}
+
+ostream& __cdecl begin( ostream& s, SvStream& rSt ) { indent( s, rSt ) << "BEGIN "; level++; return s; }
+
+// begin1 ohne indent
+ostream& __cdecl begin1( ostream& s ) { s << "BEGIN "; level++; return s; }
+
+// begin2 ohne Nummer
+ostream& __cdecl begin2( ostream& s ) { s << indent2 << "BEGIN "; level++; return s; }
+
+ostream& __cdecl end( ostream& s, SvStream& rSt ) { level--; return indent( s, rSt ) << "END "; }
+
+// end1 ohne filepos
+ostream& __cdecl end1( ostream& s ) { level--; return s << indent1 << "END "; }
+
+// end2 ohne Nummer
+ostream& __cdecl end2( ostream& s ) { level--; return s << indent2 << "END "; }
+
+//-----------------------------------------
+// Ausgabe-Funktionen
+//-----------------------------------------
+
+void OutBool( SvStream& rSt, short )
+{
+ BYTE nPara;
+
+ rSt.Read( &nPara, sizeof( nPara ) );
+ switch( nPara ){
+ case 0: *pOut << "F"; break;
+ case 1: *pOut << "T"; break;
+ default: *pOut << "ERROR:" << (USHORT)nPara; break;
+ }
+}
+
+void OutBool4( SvStream& rSt, short )
+{
+ BYTE nPara;
+
+ rSt.Read( &nPara, sizeof( nPara ) );
+ switch( nPara ){
+ case 0: *pOut << "F"; break;
+ case 1: *pOut << "T"; break;
+ case 128: *pOut << "==Style"; break;
+ case 129: *pOut << "!=Style"; break;
+ default: *pOut << "ERROR:" << (USHORT)nPara; break;
+ }
+}
+
+void OutByte( SvStream& rSt, short )
+{
+ BYTE nPara;
+
+ rSt.Read( &nPara, sizeof( nPara ) );
+ *pOut << (USHORT)nPara;
+}
+
+void OutShort( SvStream& rSt, short )
+{
+ short nPara;
+
+ rSt.Read( &nPara, sizeof( nPara ) );
+ *pOut << nPara;
+}
+
+void OutShorts( SvStream& rSt, short nLen )
+{
+ INT16 nPara;
+
+ for( short i = 0; i < nLen / 2; i++ ){
+ rSt.Read( &nPara, sizeof( nPara ) );
+ *pOut << nPara << ' ';
+ }
+}
+
+void OutWord( SvStream& rSt, short )
+{
+ USHORT nPara;
+
+ rSt.Read( &nPara, sizeof( nPara ) );
+ *pOut << nPara;
+}
+
+void OutWords( SvStream& rSt, short nLen )
+{
+ USHORT nPara;
+
+ for( short i = 0; i < nLen / 2; i++ ){
+ rSt.Read( &nPara, sizeof( nPara ) );
+ *pOut << nPara;
+ }
+}
+
+void OutWordHex( SvStream& rSt, short )
+{
+ USHORT nPara;
+
+ rSt.Read( &nPara, sizeof( nPara ) );
+ *pOut << "0x" << hex4 << nPara << dec;
+}
+
+void OutWordsHex( SvStream& rSt, short nLen )
+{
+ USHORT nPara;
+ nLen /= sizeof( nPara );
+ for( short i = 0; i < nLen; i++ ){
+ rSt.Read( &nPara, sizeof( nPara ) );
+ *pOut << "0x" << hex4 << nPara << dec;
+ if( i < nLen - 1 )
+ *pOut << ' ';
+ }
+}
+
+void OutLongsHex( SvStream& rSt, short nLen )
+{
+ long nPara;
+ nLen /= sizeof( nPara );
+ for( short i = 0; i < nLen; i++ )
+ {
+ rSt.Read( &nPara, sizeof( nPara ) );
+ *pOut << "0x" << hex8 << nPara << dec;
+ if( i < nLen - 1 )
+ *pOut << ' ';
+ }
+}
+
+void OutLongHex( SvStream& rSt, short )
+{
+ ULONG nPara;
+
+ rSt.Read( &nPara, sizeof( nPara ) );
+ *pOut << "0x" << hex8 << nPara << dec;
+}
+
+void OutTab68( SvStream& rSt, short )
+{
+ ULONG nPara;
+
+ rSt.Read( &nPara, sizeof( nPara ) );
+ if( nPara == 0 )
+ *pOut << "None";
+ else
+ *pOut << "0x" << hex8 << nPara << dec;
+}
+
+
+void OutTab( SvStream& rSt, short )
+{
+ BYTE nDel, nIns, nType;
+ short nPos, i;
+
+ rSt.Read( &nDel, sizeof( nDel ) );
+ *pOut << "Del " << (USHORT)nDel;
+ if ( nDel ) *pOut << ": ";
+ else *pOut << ", ";
+
+ for( i=1; i<=nDel; i++){
+ rSt.Read( &nPos, sizeof( nPos ) );
+ *pOut << nPos;
+ if( i<nDel ) *pOut << ',';
+ else *pOut << ' ';
+ }
+ rSt.Read( &nIns, sizeof( nIns ) );
+ *pOut << "Ins " << (USHORT)nIns;
+ if ( nIns ) *pOut << ": ";
+
+ for( i=1; i<=nIns; i++){
+ rSt.Read( &nPos, sizeof( nPos ) );
+ *pOut << nPos;
+ if( i<nIns ) *pOut << ',';
+ else *pOut << ' ';
+ }
+ if ( nIns ) *pOut << "Typ: ";
+
+ for( i=1; i<=nIns; i++){
+ rSt.Read( &nType, sizeof( nType ) );
+ *pOut << (USHORT)nType;
+ if( i<nIns ) *pOut << ',';
+ else *pOut << ' ';
+ }
+
+// nSiz = 1 + 2 * nDel + 1 + nIns * 3; // genaue Laenge,
+// stimmt auch bei Laenge > 256
+// bei diesem Tab-Befehl anscheinend nicht noetig
+}
+
+void OutTab190( SvStream& rSt, short nLen )
+{
+ BYTE nCols;
+ rSt.Read( &nCols, sizeof( nCols ) );
+ *pOut << (USHORT)nCols << " Cols: ";
+
+ short nPos, i;
+ for( i = 0; i <= nCols; i++ ){
+ rSt.Read( &nPos, sizeof( nPos ) );
+ *pOut << nPos;
+ if( i < nCols )
+ *pOut << ", ";
+ }
+ *pOut << dec << "; ";
+ for( i = 0; i < nCols; i++ ){
+ *pOut << "Col " << i << " TC: ";
+ OutWordsHex( rSt, 10 );
+ if( i < nCols - 1 )
+ *pOut << "; ";
+ }
+}
+
+void OutTab191( SvStream& rSt, short nLen )
+{
+ BYTE nCols;
+ rSt.Read( &nCols, sizeof( nCols ) );
+ *pOut << (USHORT)nCols << " Cols, SHDs: ";
+ OutWordsHex( rSt, ( nCols + 1 ) * 2 );
+}
+
+void OutTab192( SvStream& rSt, short )
+{
+ OutWord( rSt, 0 );
+ OutWordHex( rSt, 0 );
+}
+
+void OutHugeHex( SvStream& rSt, short nLen )
+{
+ long nPos;
+ rSt.Read( &nPos, sizeof( nPos ) );
+
+ long nCurr = xDataStream->Tell();
+ xDataStream->Seek( nPos );
+
+ xDataStream->Read( &nLen, sizeof( nLen ) );
+
+// *pOut << ", Len max: " << nLen << ", ID:" << nIStd << endl1;
+ *pOut << endl1;
+ DumpSprms( 8, *xDataStream, nLen );
+
+ xDataStream->Seek( nCurr );
+}
+
+void OutTabD608( SvStream& rSt, short nLen )
+{
+ BYTE nHi, nCols;
+ rSt.Read( &nHi, sizeof( nHi ) );
+// nLen += ((short)nHi) << 8;
+
+ rSt.Read( &nCols, sizeof( nCols ) );
+ *pOut << " Cols: " << (short)nCols << ' ' << endl1 << indent2;
+
+ short nPos, i;
+ for( i = 0; i <= nCols; ++i )
+ {
+ rSt.Read( &nPos, sizeof( nPos ) );
+ *pOut << nPos;
+ if( i < nCols )
+ *pOut << ", ";
+ }
+ nLen -= ( nCols + 1 ) * 2;
+ nLen /= 20;
+
+ for( i = 0; i < nLen; ++i )
+ {
+ *pOut << endl1 << indent2 << "Col " << i << " TC: ";
+ OutLongsHex( rSt, 20 );
+ if( i < nLen - 1 )
+ *pOut << "; ";
+ }
+}
+
+void OutTabD609( SvStream& rSt, short nLen )
+{
+ *pOut << " Brush(FBS): ";
+ for( short i = 0; i < nLen / 2; ++i )
+ {
+ UINT16 nVal;
+ rSt.Read( &nVal, sizeof( nVal ) );
+ *pOut << (nVal & 0x1f);
+ *pOut << "|" << ((nVal >> 5) & 0x1f);
+ *pOut << "|" << ((nVal >> 10) & 0x3f);
+ if( i < nLen )
+ *pOut << ", ";
+ }
+}
+
+