2000-09-18 15:33:13 +00:00
|
|
|
|
/*************************************************************************
|
|
|
|
|
*
|
2008-04-11 08:41:36 +00:00
|
|
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
2000-09-18 15:33:13 +00:00
|
|
|
|
*
|
2010-02-12 15:01:35 +01:00
|
|
|
|
* Copyright 2000, 2010 Oracle and/or its affiliates.
|
2000-09-18 15:33:13 +00:00
|
|
|
|
*
|
2008-04-11 08:41:36 +00:00
|
|
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
2000-09-18 15:33:13 +00:00
|
|
|
|
*
|
2008-04-11 08:41:36 +00:00
|
|
|
|
* This file is part of OpenOffice.org.
|
2000-09-18 15:33:13 +00:00
|
|
|
|
*
|
2008-04-11 08:41:36 +00:00
|
|
|
|
* 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.
|
2000-09-18 15:33:13 +00:00
|
|
|
|
*
|
2008-04-11 08:41:36 +00:00
|
|
|
|
* 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).
|
2000-09-18 15:33:13 +00:00
|
|
|
|
*
|
2008-04-11 08:41:36 +00:00
|
|
|
|
* 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.
|
2000-09-18 15:33:13 +00:00
|
|
|
|
*
|
|
|
|
|
************************************************************************/
|
|
|
|
|
|
2006-09-16 11:49:14 +00:00
|
|
|
|
// MARKER(update_precomp.py): autogen include statement, do not remove
|
|
|
|
|
#include "precompiled_idl.hxx"
|
|
|
|
|
|
2000-09-18 15:33:13 +00:00
|
|
|
|
#include <ctype.h>
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
#include <tools/fsys.hxx>
|
|
|
|
|
#include <tools/debug.hxx>
|
|
|
|
|
#include <database.hxx>
|
|
|
|
|
#include <globals.hxx>
|
|
|
|
|
|
|
|
|
|
/****************** SvIdlDataBase ****************************************/
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|* SvIdlDataBase::SvIdlDataBase()
|
|
|
|
|
|*
|
|
|
|
|
|* Beschreibung
|
|
|
|
|
*************************************************************************/
|
|
|
|
|
/*
|
|
|
|
|
void PrimeNumber(){
|
2010-11-03 15:49:08 +01:00
|
|
|
|
sal_uInt16 i, n;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
for( i = 5001; i < 5500; i += 2 ){
|
|
|
|
|
for( n = 2; n < i && ((i % n) != 0); n++ );
|
|
|
|
|
if( n == i ){
|
|
|
|
|
printf( "\nPrimzahl: %d\n", i );
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
*/
|
|
|
|
|
|
CWS-TOOLING: integrate CWS buildverbosity
2009-10-13 15:51:48 +0200 fs r276867 : allow building with 'nodep'==''
2009-10-11 22:39:56 +0200 fs r276820 : silence a compiler warning in a file only used when VERBOSE!=""
2009-10-09 14:37:43 +0200 fs r276807 : let not override the non-presence of $VERBOSE the given command line arguments
2009-10-09 14:36:25 +0200 fs r276806 : also deliver spirit/home/classic/debug/impl
2009-10-08 13:38:07 +0200 fs r276789 : not that many line feeds in --show mode
2009-10-08 13:13:01 +0200 fs r276788 : minor adjustments requested by hjs:
- replaced space/tab mixes at beginning of lines with mere tab
- made "nothing to update" message for the ZIPALLTARGET target more prominent
- removed useless "echo > /dev/nul" statements
2009-10-07 13:32:12 +0200 fs r276753 : #i105585#
2009-10-07 11:31:59 +0200 fs r276742 : #i10000# missing dependency between stoc/security and stoc/util
2009-10-06 22:59:59 +0200 fs r276729 : CWS-TOOLING: rebase CWS buildverbosity to trunk@276699 (milestone: DEV300:m61)
2009-09-29 12:04:58 +0200 fs r276518 : #i10000#
2009-09-29 12:04:25 +0200 fs r276517 : oops
2009-09-29 12:01:07 +0200 fs r276516 : #i84497# removed some more (non-diagnostic) 'echo ------' directives
2009-09-29 11:59:29 +0200 fs r276515 : #i84497# removed some more (non-diagnostic) 'echo ------' directives
2009-09-29 11:52:32 +0200 fs r276514 : #i84497# removed the various 'echo ------------' directives from verbose mode, as per hjs' request
2009-09-29 11:44:16 +0200 fs r276513 : do not duplicate IDLC call commands with different verbosity switches
2009-09-28 21:43:50 +0200 thb r276502 : #i84497# fixed potential recursive macro def + extra ls
* solenv/inc/settings.mk: now setting via VERBOSE!:=, removes warning
and my spurious "recursive macro definition" error
* solenv/inc/tg_app.mk: one extra ls silenced for app target (and
quiet mode, that goes without saying)
2009-09-23 08:57:01 +0200 fs r276366 : use ULFEX_VERBOSITY instead of duplicating the ULFEX call
2009-09-21 11:42:26 +0200 fs r276320 : ignore output paths
2009-09-21 11:04:27 +0200 fs r276318 : silence another compiler warning, which only hits us when actually using this (debug) file, which is the case only when slideshow is compiled with a env variable VERBOSE, thus came up in CWS buildverbosity
2009-09-21 10:30:14 +0200 fs r276313 : make some output depend on VERBOSE==TRUE, not COMMAND_ECHO=""
While both are equivalent at the moment, COMMAND_ECHO finally is an implementation
default of the VERBOSE flag only, so better rely on VERBOSE as the primary verbosity flag
2009-09-21 09:56:57 +0200 fs r276311 : forgot to re-generate from tg_zip before committing
2009-09-21 09:52:11 +0200 fs r276310 : #i84497# even less verbosity
2009-09-17 11:02:47 +0200 fs r276232 : #i84497# verbose implies VERBOSE nowadays, and VERBOSE==FALSE should not lead to -DVERBOSE
2009-09-15 22:59:37 +0200 fs r276189 : #i105022# copy fix for this P1 into this CWS
2009-09-15 11:56:35 +0200 fs r276165 : CWS-TOOLING: rebase CWS buildverbosity to trunk@276043 (milestone: DEV300:m58)
2009-09-14 17:45:10 +0200 fs r276137 : #i84497# don't duplicate zip lines w/ and w/o -q switch, use a variable instead (maintenance)
2009-09-14 15:01:33 +0200 fs r276124 : #i10000#
2009-09-11 23:58:46 +0200 thb r276083 : #i84497#: More quiet-build fine tuning
- silenced rsc for real (properly filtering options for
cpp, and a pretty brutal amputation of the tool blurp,
which would have needed cmd opt parser duplication)
- silenced deliver.pl
- silenced checkdll.sh
- silenced zip via -q (in quiet mode)
- silenced various idl, resource, transex whatever tool,
passing appropriate options down to them '-QQ' sometimes
- silenced dmake, pointless blurb that something does *not*
need update removed
- silenced the old starview idl compiler, to not output
tool's name & progress chars in quiet mode
2009-09-11 21:13:59 +0200 thb r276081 : #i84497#: More bits on the quiet mode of the build.
The bulk of the changes is disabling those annoying
"echo ------------------" lines for the quiet build,
which has the stretch goal of outputting *exactly*
one line per file compiled/linked/processed.
Apart from that, silenced a few especialy annoying
module-specific makefiles (basically adding
$(COMMAND_ECHO) in front of a gazillion rules).
Additionally, slightly tweaked what idlc regards
verbose, normal, and quiet mode; this was to have it
echo exactly one line per idl file processed (the
fact that quiet mode did not echo *anything* for idl
files was a bit too much for my taste)
2009-09-04 09:14:35 +0200 fs r275777 : don't emit the link parameters if VERBOSE!=TRUE
2009-09-02 10:31:15 +0200 fs r275700 : #i10000#
2009-09-02 08:44:14 +0200 fs r275697 : update svn:ignore to ignore the output paths
2009-09-02 08:40:54 +0200 fs r275695 : #i84497# less verbose output during build, unless a dedicated '-verbose' switch is given
2009-09-02 08:40:28 +0200 fs r275694 : GRAPHITE is missing in the BUILD_TYPE
2009-09-02 08:40:05 +0200 fs r275693 : #i84497# less verbose output during build, unless a dedicated '-verbose' switch is given
2009-09-02 08:39:25 +0200 fs r275692 : #i84497# less verbose output during build, unless a dedicated '-verbose' switch is given
2009-09-02 08:39:02 +0200 fs r275691 : #i84497# less verbose output during build, unless a dedicated '-verbose' switch is given
2009-09-02 08:38:09 +0200 fs r275690 : #i84497# less verbose output during build
2009-09-02 08:37:06 +0200 fs r275689 : #i84497# don't emit that much noise, unless a '-verbose' switch is given
2009-10-21 10:43:22 +00:00
|
|
|
|
SvIdlDataBase::SvIdlDataBase( const SvCommand& rCmd )
|
2010-11-03 15:49:08 +01:00
|
|
|
|
: bExport( sal_False )
|
2006-06-19 09:43:13 +00:00
|
|
|
|
, nUniqueId( 0 )
|
CWS-TOOLING: integrate CWS buildverbosity
2009-10-13 15:51:48 +0200 fs r276867 : allow building with 'nodep'==''
2009-10-11 22:39:56 +0200 fs r276820 : silence a compiler warning in a file only used when VERBOSE!=""
2009-10-09 14:37:43 +0200 fs r276807 : let not override the non-presence of $VERBOSE the given command line arguments
2009-10-09 14:36:25 +0200 fs r276806 : also deliver spirit/home/classic/debug/impl
2009-10-08 13:38:07 +0200 fs r276789 : not that many line feeds in --show mode
2009-10-08 13:13:01 +0200 fs r276788 : minor adjustments requested by hjs:
- replaced space/tab mixes at beginning of lines with mere tab
- made "nothing to update" message for the ZIPALLTARGET target more prominent
- removed useless "echo > /dev/nul" statements
2009-10-07 13:32:12 +0200 fs r276753 : #i105585#
2009-10-07 11:31:59 +0200 fs r276742 : #i10000# missing dependency between stoc/security and stoc/util
2009-10-06 22:59:59 +0200 fs r276729 : CWS-TOOLING: rebase CWS buildverbosity to trunk@276699 (milestone: DEV300:m61)
2009-09-29 12:04:58 +0200 fs r276518 : #i10000#
2009-09-29 12:04:25 +0200 fs r276517 : oops
2009-09-29 12:01:07 +0200 fs r276516 : #i84497# removed some more (non-diagnostic) 'echo ------' directives
2009-09-29 11:59:29 +0200 fs r276515 : #i84497# removed some more (non-diagnostic) 'echo ------' directives
2009-09-29 11:52:32 +0200 fs r276514 : #i84497# removed the various 'echo ------------' directives from verbose mode, as per hjs' request
2009-09-29 11:44:16 +0200 fs r276513 : do not duplicate IDLC call commands with different verbosity switches
2009-09-28 21:43:50 +0200 thb r276502 : #i84497# fixed potential recursive macro def + extra ls
* solenv/inc/settings.mk: now setting via VERBOSE!:=, removes warning
and my spurious "recursive macro definition" error
* solenv/inc/tg_app.mk: one extra ls silenced for app target (and
quiet mode, that goes without saying)
2009-09-23 08:57:01 +0200 fs r276366 : use ULFEX_VERBOSITY instead of duplicating the ULFEX call
2009-09-21 11:42:26 +0200 fs r276320 : ignore output paths
2009-09-21 11:04:27 +0200 fs r276318 : silence another compiler warning, which only hits us when actually using this (debug) file, which is the case only when slideshow is compiled with a env variable VERBOSE, thus came up in CWS buildverbosity
2009-09-21 10:30:14 +0200 fs r276313 : make some output depend on VERBOSE==TRUE, not COMMAND_ECHO=""
While both are equivalent at the moment, COMMAND_ECHO finally is an implementation
default of the VERBOSE flag only, so better rely on VERBOSE as the primary verbosity flag
2009-09-21 09:56:57 +0200 fs r276311 : forgot to re-generate from tg_zip before committing
2009-09-21 09:52:11 +0200 fs r276310 : #i84497# even less verbosity
2009-09-17 11:02:47 +0200 fs r276232 : #i84497# verbose implies VERBOSE nowadays, and VERBOSE==FALSE should not lead to -DVERBOSE
2009-09-15 22:59:37 +0200 fs r276189 : #i105022# copy fix for this P1 into this CWS
2009-09-15 11:56:35 +0200 fs r276165 : CWS-TOOLING: rebase CWS buildverbosity to trunk@276043 (milestone: DEV300:m58)
2009-09-14 17:45:10 +0200 fs r276137 : #i84497# don't duplicate zip lines w/ and w/o -q switch, use a variable instead (maintenance)
2009-09-14 15:01:33 +0200 fs r276124 : #i10000#
2009-09-11 23:58:46 +0200 thb r276083 : #i84497#: More quiet-build fine tuning
- silenced rsc for real (properly filtering options for
cpp, and a pretty brutal amputation of the tool blurp,
which would have needed cmd opt parser duplication)
- silenced deliver.pl
- silenced checkdll.sh
- silenced zip via -q (in quiet mode)
- silenced various idl, resource, transex whatever tool,
passing appropriate options down to them '-QQ' sometimes
- silenced dmake, pointless blurb that something does *not*
need update removed
- silenced the old starview idl compiler, to not output
tool's name & progress chars in quiet mode
2009-09-11 21:13:59 +0200 thb r276081 : #i84497#: More bits on the quiet mode of the build.
The bulk of the changes is disabling those annoying
"echo ------------------" lines for the quiet build,
which has the stretch goal of outputting *exactly*
one line per file compiled/linked/processed.
Apart from that, silenced a few especialy annoying
module-specific makefiles (basically adding
$(COMMAND_ECHO) in front of a gazillion rules).
Additionally, slightly tweaked what idlc regards
verbose, normal, and quiet mode; this was to have it
echo exactly one line per idl file processed (the
fact that quiet mode did not echo *anything* for idl
files was a bit too much for my taste)
2009-09-04 09:14:35 +0200 fs r275777 : don't emit the link parameters if VERBOSE!=TRUE
2009-09-02 10:31:15 +0200 fs r275700 : #i10000#
2009-09-02 08:44:14 +0200 fs r275697 : update svn:ignore to ignore the output paths
2009-09-02 08:40:54 +0200 fs r275695 : #i84497# less verbose output during build, unless a dedicated '-verbose' switch is given
2009-09-02 08:40:28 +0200 fs r275694 : GRAPHITE is missing in the BUILD_TYPE
2009-09-02 08:40:05 +0200 fs r275693 : #i84497# less verbose output during build, unless a dedicated '-verbose' switch is given
2009-09-02 08:39:25 +0200 fs r275692 : #i84497# less verbose output during build, unless a dedicated '-verbose' switch is given
2009-09-02 08:39:02 +0200 fs r275691 : #i84497# less verbose output during build, unless a dedicated '-verbose' switch is given
2009-09-02 08:38:09 +0200 fs r275690 : #i84497# less verbose output during build
2009-09-02 08:37:06 +0200 fs r275689 : #i84497# don't emit that much noise, unless a '-verbose' switch is given
2009-10-21 10:43:22 +00:00
|
|
|
|
, nVerbosity( rCmd.nVerbosity )
|
2010-11-03 15:49:08 +01:00
|
|
|
|
, bIsModified( sal_False )
|
2000-09-18 15:33:13 +00:00
|
|
|
|
, aPersStream( *IDLAPP->pClassMgr, NULL )
|
|
|
|
|
, pIdTable( NULL )
|
|
|
|
|
{
|
|
|
|
|
//PrimeNumber();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|* SvIdlDataBase::~SvIdlDataBase()
|
|
|
|
|
|*
|
|
|
|
|
|* Beschreibung
|
|
|
|
|
*************************************************************************/
|
|
|
|
|
SvIdlDataBase::~SvIdlDataBase()
|
|
|
|
|
{
|
|
|
|
|
String * pStr = aIdFileList.First();
|
|
|
|
|
while( pStr )
|
|
|
|
|
{
|
|
|
|
|
delete pStr;
|
|
|
|
|
pStr = aIdFileList.Next();
|
|
|
|
|
}
|
|
|
|
|
delete pIdTable;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|* SvIdlDataBase::GetTypeList()
|
|
|
|
|
|*
|
|
|
|
|
|* Beschreibung
|
|
|
|
|
*************************************************************************/
|
|
|
|
|
#define ADD_TYPE( Name, OdlName, ParserChar, CName, BasName, BasPost ) \
|
|
|
|
|
aTypeList.Append( new SvMetaType( SvHash_##Name()->GetName(), \
|
|
|
|
|
BasName, OdlName, ParserChar, CName, BasName, BasPost ) );
|
|
|
|
|
|
|
|
|
|
SvMetaTypeMemberList & SvIdlDataBase::GetTypeList()
|
|
|
|
|
{
|
|
|
|
|
if( aTypeList.Count() == 0 )
|
|
|
|
|
{ // Initial fuellen
|
|
|
|
|
aTypeList.Append( new SvMetaTypeString() );
|
|
|
|
|
aTypeList.Append( new SvMetaTypevoid() );
|
|
|
|
|
|
|
|
|
|
// MI: IDispatch::Invoke kann keine unsigned
|
|
|
|
|
ADD_TYPE( UINT16, "long", 'h', "unsigned short", "Long", "&" );
|
|
|
|
|
ADD_TYPE( INT16, "short", 'h', "short", "Integer", "%" );
|
|
|
|
|
ADD_TYPE( UINT32, "long", 'l', "unsigned long", "Long", "&" );
|
|
|
|
|
ADD_TYPE( INT32, "long", 'l', "long", "Long", "&" );
|
|
|
|
|
ADD_TYPE( int, "int", 'i', "int", "Integer", "%" );
|
|
|
|
|
ADD_TYPE( BOOL, "boolean", 'b', "unsigned char", "Boolean", "" );
|
|
|
|
|
ADD_TYPE( char, "char", 'c', "char", "Integer", "%" );
|
|
|
|
|
ADD_TYPE( BYTE, "char", 'c', "unsigned char", "Integer", "%" );
|
|
|
|
|
ADD_TYPE( float, "float", 'f', "float", "Single", "!" );
|
|
|
|
|
ADD_TYPE( double, "double", 'F', "double", "Double", "#" );
|
|
|
|
|
ADD_TYPE( SbxObject, "VARIANT", 'o', "C_Object", "Object", "" );
|
|
|
|
|
|
2010-11-03 15:49:08 +01:00
|
|
|
|
|
2000-09-18 15:33:13 +00:00
|
|
|
|
// A c h t u n g !!!, bei hinzufuegen von Typen werden alle
|
|
|
|
|
// bin<69>ren Datenbasen inkompatibel
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
// So tun als ob die Init-Daten auf einem Stream gelesen wurden
|
|
|
|
|
SvMemoryStream aStm;
|
|
|
|
|
aPersStream.SetStream( &aStm );
|
|
|
|
|
// Alle Init-Daten Streamen
|
|
|
|
|
aPersStream << aTypeList;
|
|
|
|
|
// Nur die Id-Zuordnung merken
|
|
|
|
|
aPersStream.SetStream( NULL );
|
|
|
|
|
*/
|
|
|
|
|
}
|
|
|
|
|
return aTypeList;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|*
|
|
|
|
|
|* SvIdlDataBase::GetModuleInfo()
|
|
|
|
|
|*
|
|
|
|
|
|* Beschreibung
|
|
|
|
|
|* Ersterstellung MM 13.12.94
|
|
|
|
|
|* Letzte Aenderung MM 13.12.94
|
|
|
|
|
|*
|
|
|
|
|
*************************************************************************/
|
|
|
|
|
SvMetaModule * SvIdlDataBase::GetModule( const ByteString & rName )
|
|
|
|
|
{
|
2010-11-03 15:49:08 +01:00
|
|
|
|
for( sal_uIntPtr n = 0; n < aModuleList.Count(); n++ )
|
2000-09-18 15:33:13 +00:00
|
|
|
|
if( aModuleList.GetObject( n )->GetName() == rName )
|
|
|
|
|
return aModuleList.GetObject( n );
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|*
|
|
|
|
|
|* SvIdlDataBase::IsBinaryFormat()
|
|
|
|
|
|*
|
|
|
|
|
|* Beschreibung
|
|
|
|
|
|*
|
|
|
|
|
*************************************************************************/
|
2010-11-03 15:49:08 +01:00
|
|
|
|
#define DATABASE_SIGNATURE (sal_uInt32)0x13B799F2
|
2000-09-18 15:33:13 +00:00
|
|
|
|
#define DATABASE_VER 0x0006
|
2010-11-03 15:49:08 +01:00
|
|
|
|
sal_Bool SvIdlDataBase::IsBinaryFormat( SvStream & rStm )
|
2000-09-18 15:33:13 +00:00
|
|
|
|
{
|
2010-11-03 15:49:08 +01:00
|
|
|
|
sal_uInt32 nSig = 0;
|
|
|
|
|
sal_uIntPtr nPos = rStm.Tell();
|
2000-09-18 15:33:13 +00:00
|
|
|
|
rStm >> nSig;
|
|
|
|
|
rStm.Seek( nPos );
|
|
|
|
|
|
|
|
|
|
return nSig == DATABASE_SIGNATURE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|*
|
|
|
|
|
|* SvIdlDataBase::Load()
|
|
|
|
|
|*
|
|
|
|
|
|* Beschreibung
|
|
|
|
|
|*
|
|
|
|
|
*************************************************************************/
|
|
|
|
|
void SvIdlDataBase::Load( SvStream & rStm )
|
|
|
|
|
{
|
2008-11-10 15:06:12 +00:00
|
|
|
|
DBG_ASSERT( aTypeList.Count() == 0, "type list already initialized" );
|
2000-09-18 15:33:13 +00:00
|
|
|
|
SvPersistStream aPStm( *IDLAPP->pClassMgr, &rStm );
|
|
|
|
|
|
2010-11-03 15:49:08 +01:00
|
|
|
|
sal_uInt16 nVersion = 0;
|
|
|
|
|
sal_uInt32 nSig = 0;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
|
|
|
|
|
aPStm >> nSig;
|
|
|
|
|
aPStm >> nVersion;
|
|
|
|
|
if( nSig != DATABASE_SIGNATURE )
|
|
|
|
|
{
|
|
|
|
|
aPStm.SetError( SVSTREAM_FILEFORMAT_ERROR );
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if( nVersion != DATABASE_VER )
|
|
|
|
|
{
|
|
|
|
|
aPStm.SetError( SVSTREAM_WRONGVERSION );
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
aPStm >> aClassList;
|
|
|
|
|
aPStm >> aTypeList;
|
|
|
|
|
aPStm >> aAttrList;
|
|
|
|
|
aPStm >> aModuleList;
|
|
|
|
|
aPStm >> nUniqueId;
|
|
|
|
|
|
|
|
|
|
if( aPStm.IsEof() )
|
|
|
|
|
aPStm.SetError( SVSTREAM_GENERALERROR );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|* SvIdlDataBase::Save()
|
|
|
|
|
|*
|
|
|
|
|
|* Beschreibung
|
|
|
|
|
*************************************************************************/
|
2010-11-03 15:49:08 +01:00
|
|
|
|
void SvIdlDataBase::Save( SvStream & rStm, sal_uInt32 nFlags )
|
2000-09-18 15:33:13 +00:00
|
|
|
|
{
|
|
|
|
|
SvPersistStream aPStm( *IDLAPP->pClassMgr, &rStm );
|
|
|
|
|
aPStm.SetContextFlags( nFlags );
|
|
|
|
|
|
2010-11-03 15:49:08 +01:00
|
|
|
|
aPStm << (sal_uInt32)DATABASE_SIGNATURE;
|
|
|
|
|
aPStm << (sal_uInt16)DATABASE_VER;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
|
2010-11-03 15:49:08 +01:00
|
|
|
|
sal_Bool bOnlyStreamedObjs = sal_False;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
if( nFlags & IDL_WRITE_CALLING )
|
2010-11-03 15:49:08 +01:00
|
|
|
|
bOnlyStreamedObjs = sal_True;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
|
|
|
|
|
if( bOnlyStreamedObjs )
|
|
|
|
|
{
|
|
|
|
|
SvMetaClassMemberList aList;
|
2010-11-03 15:49:08 +01:00
|
|
|
|
for( sal_uIntPtr n = 0; n < GetModuleList().Count(); n++ )
|
2000-09-18 15:33:13 +00:00
|
|
|
|
{
|
|
|
|
|
SvMetaModule * pModule = GetModuleList().GetObject( n );
|
|
|
|
|
if( !pModule->IsImported() )
|
|
|
|
|
aList.Append( pModule->GetClassList() );
|
|
|
|
|
}
|
|
|
|
|
aPStm << aList;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
aPStm << aClassList;
|
|
|
|
|
|
|
|
|
|
//aClassList.WriteObjects( aPStm, bOnlyStreamedObjs );
|
|
|
|
|
aTypeList.WriteObjects( aPStm, bOnlyStreamedObjs );
|
|
|
|
|
aAttrList.WriteObjects( aPStm, bOnlyStreamedObjs );
|
|
|
|
|
aModuleList.WriteObjects( aPStm, bOnlyStreamedObjs );
|
|
|
|
|
aPStm << nUniqueId;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|* SvIdlDataBase::SetError()
|
|
|
|
|
|*
|
|
|
|
|
|* Beschreibung
|
|
|
|
|
*************************************************************************/
|
|
|
|
|
void SvIdlDataBase::SetError( const ByteString & rError, SvToken * pTok )
|
|
|
|
|
{
|
|
|
|
|
if( pTok->GetLine() > 10000 )
|
|
|
|
|
aError.SetText( "hgchcg" );
|
|
|
|
|
|
|
|
|
|
if( aError.nLine < pTok->GetLine()
|
2009-06-04 15:47:31 +00:00
|
|
|
|
|| (aError.nLine == pTok->GetLine() && aError.nColumn < pTok->GetColumn()) )
|
2000-09-18 15:33:13 +00:00
|
|
|
|
{
|
|
|
|
|
aError = SvIdlError( pTok->GetLine(), pTok->GetColumn() );
|
|
|
|
|
aError.SetText( rError );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|* SvIdlDataBase::Push()
|
|
|
|
|
|*
|
|
|
|
|
|* Beschreibung
|
|
|
|
|
*************************************************************************/
|
|
|
|
|
void SvIdlDataBase::Push( SvMetaObject * pObj )
|
|
|
|
|
{
|
|
|
|
|
GetStack().Push( pObj );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#ifdef IDL_COMPILER
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|*
|
|
|
|
|
|* SvIdlDataBase::FindId()
|
|
|
|
|
|*
|
|
|
|
|
|* Beschreibung
|
|
|
|
|
|*
|
|
|
|
|
*************************************************************************/
|
2010-11-03 15:49:08 +01:00
|
|
|
|
sal_Bool SvIdlDataBase::FindId( const ByteString & rIdName, sal_uIntPtr * pVal )
|
2000-09-18 15:33:13 +00:00
|
|
|
|
{
|
|
|
|
|
if( pIdTable )
|
|
|
|
|
{
|
2010-11-03 15:49:08 +01:00
|
|
|
|
sal_uInt32 nHash;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
if( pIdTable->Test( rIdName, &nHash ) )
|
|
|
|
|
{
|
|
|
|
|
*pVal = pIdTable->Get( nHash )->GetValue();
|
2010-11-03 15:49:08 +01:00
|
|
|
|
return sal_True;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2010-11-03 15:49:08 +01:00
|
|
|
|
return sal_False;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|*
|
|
|
|
|
|* SvIdlDataBase::InsertId()
|
|
|
|
|
|*
|
|
|
|
|
|* Beschreibung
|
|
|
|
|
|*
|
|
|
|
|
*************************************************************************/
|
2010-11-03 15:49:08 +01:00
|
|
|
|
sal_Bool SvIdlDataBase::InsertId( const ByteString & rIdName, sal_uIntPtr nVal )
|
2000-09-18 15:33:13 +00:00
|
|
|
|
{
|
|
|
|
|
if( !pIdTable )
|
|
|
|
|
pIdTable = new SvStringHashTable( 20003 );
|
|
|
|
|
|
2010-11-03 15:49:08 +01:00
|
|
|
|
sal_uInt32 nHash;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
if( pIdTable->Insert( rIdName, &nHash ) )
|
|
|
|
|
{
|
|
|
|
|
pIdTable->Get( nHash )->SetValue( nVal );
|
2010-11-03 15:49:08 +01:00
|
|
|
|
return sal_True;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
}
|
2010-11-03 15:49:08 +01:00
|
|
|
|
return sal_False;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|* SvIdlDataBase::ReadIdFile()
|
|
|
|
|
|*
|
|
|
|
|
|* Beschreibung
|
|
|
|
|
*************************************************************************/
|
2010-11-03 15:49:08 +01:00
|
|
|
|
sal_Bool SvIdlDataBase::ReadIdFile( const String & rFileName )
|
2000-09-18 15:33:13 +00:00
|
|
|
|
{
|
|
|
|
|
DirEntry aFullName( rFileName );
|
|
|
|
|
aFullName.Find( GetPath() );
|
|
|
|
|
|
|
|
|
|
String * pIdFile = aIdFileList.First();
|
|
|
|
|
while( pIdFile )
|
|
|
|
|
{
|
|
|
|
|
if( *pIdFile == rFileName )
|
2010-11-03 15:49:08 +01:00
|
|
|
|
return sal_True; // schon eingelesen
|
2000-09-18 15:33:13 +00:00
|
|
|
|
pIdFile = aIdFileList.Next();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
aIdFileList.Insert( new String( rFileName ), LIST_APPEND );
|
|
|
|
|
|
|
|
|
|
SvTokenStream aTokStm( aFullName.GetFull() );
|
|
|
|
|
if( aTokStm.GetStream().GetError() == SVSTREAM_OK )
|
|
|
|
|
{
|
|
|
|
|
SvToken * pTok = aTokStm.GetToken_Next();
|
|
|
|
|
|
|
|
|
|
while( !pTok->IsEof() )
|
|
|
|
|
{
|
|
|
|
|
if( pTok->IsChar() && pTok->GetChar() == '#' )
|
|
|
|
|
{
|
|
|
|
|
pTok = aTokStm.GetToken_Next();
|
|
|
|
|
if( pTok->Is( SvHash_define() ) )
|
|
|
|
|
{
|
|
|
|
|
pTok = aTokStm.GetToken_Next();
|
|
|
|
|
ByteString aDefName;
|
|
|
|
|
if( pTok->IsIdentifier() )
|
|
|
|
|
aDefName = pTok->GetString();
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ByteString aStr( "unexpected token after define" );
|
|
|
|
|
// Fehler setzen
|
|
|
|
|
SetError( aStr, pTok );
|
|
|
|
|
WriteError( aTokStm );
|
2010-11-03 15:49:08 +01:00
|
|
|
|
return sal_False;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
}
|
|
|
|
|
|
2010-11-03 15:49:08 +01:00
|
|
|
|
sal_uIntPtr nVal = 0;
|
|
|
|
|
sal_Bool bOk = sal_True;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
while( bOk )
|
|
|
|
|
{
|
|
|
|
|
pTok = aTokStm.GetToken_Next();
|
|
|
|
|
if( pTok->IsIdentifier() )
|
|
|
|
|
{
|
2010-11-03 15:49:08 +01:00
|
|
|
|
sal_uIntPtr n;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
if( FindId( pTok->GetString(), &n ) )
|
|
|
|
|
nVal += n;
|
|
|
|
|
else
|
2010-11-03 15:49:08 +01:00
|
|
|
|
bOk = sal_False;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
}
|
|
|
|
|
else if( pTok->IsChar() )
|
|
|
|
|
{
|
|
|
|
|
if( pTok->GetChar() == '-'
|
|
|
|
|
|| pTok->GetChar() == '/'
|
|
|
|
|
|| pTok->GetChar() == '*'
|
|
|
|
|
|| pTok->GetChar() == '&'
|
|
|
|
|
|| pTok->GetChar() == '|'
|
|
|
|
|
|| pTok->GetChar() == '^'
|
|
|
|
|
|| pTok->GetChar() == '~' )
|
|
|
|
|
{
|
|
|
|
|
ByteString aStr( "unknown operator '" );
|
|
|
|
|
aStr += pTok->GetChar();
|
|
|
|
|
aStr += "'in define";
|
|
|
|
|
// Fehler setzen
|
|
|
|
|
SetError( aStr, pTok );
|
|
|
|
|
WriteError( aTokStm );
|
2010-11-03 15:49:08 +01:00
|
|
|
|
return sal_False;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
}
|
|
|
|
|
if( pTok->GetChar() != '+'
|
|
|
|
|
&& pTok->GetChar() != '('
|
|
|
|
|
&& pTok->GetChar() != ')' )
|
|
|
|
|
// nur + erlaubt, Klammern spielen kein Rolle,
|
|
|
|
|
// da + komutativ ist
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
else if( pTok->IsInteger() )
|
|
|
|
|
{
|
|
|
|
|
nVal += pTok->GetNumber();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
if( bOk )
|
|
|
|
|
{
|
|
|
|
|
if( !InsertId( aDefName, nVal ) )
|
|
|
|
|
{
|
|
|
|
|
ByteString aStr = "hash table overflow: ";
|
|
|
|
|
SetError( aStr, pTok );
|
|
|
|
|
WriteError( aTokStm );
|
2010-11-03 15:49:08 +01:00
|
|
|
|
return sal_False;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if( pTok->Is( SvHash_include() ) )
|
|
|
|
|
{
|
|
|
|
|
pTok = aTokStm.GetToken_Next();
|
|
|
|
|
ByteString aName;
|
|
|
|
|
if( pTok->IsString() )
|
|
|
|
|
aName = pTok->GetString();
|
|
|
|
|
else if( pTok->IsChar() && pTok->GetChar() == '<' )
|
|
|
|
|
{
|
|
|
|
|
pTok = aTokStm.GetToken_Next();
|
|
|
|
|
while( !pTok->IsEof()
|
|
|
|
|
&& !(pTok->IsChar() && pTok->GetChar() == '>') )
|
|
|
|
|
{
|
|
|
|
|
aName += pTok->GetTokenAsString();
|
|
|
|
|
pTok = aTokStm.GetToken_Next();
|
|
|
|
|
}
|
|
|
|
|
if( pTok->IsEof() )
|
|
|
|
|
{
|
|
|
|
|
ByteString aStr( "unexpected eof in #include" );
|
|
|
|
|
// Fehler setzen
|
|
|
|
|
SetError( aStr, pTok );
|
|
|
|
|
WriteError( aTokStm );
|
2010-11-03 15:49:08 +01:00
|
|
|
|
return sal_False;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if( !ReadIdFile( String::CreateFromAscii(aName.GetBuffer()) ) )
|
|
|
|
|
{
|
|
|
|
|
ByteString aStr = "cannot read file: ";
|
|
|
|
|
aStr += aName;
|
|
|
|
|
SetError( aStr, pTok );
|
|
|
|
|
WriteError( aTokStm );
|
2010-11-03 15:49:08 +01:00
|
|
|
|
return sal_False;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
pTok = aTokStm.GetToken_Next();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
2010-11-03 15:49:08 +01:00
|
|
|
|
return sal_False;
|
|
|
|
|
return sal_True;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|* SvIdlDataBase::FindType()
|
|
|
|
|
|*
|
|
|
|
|
|* Beschreibung
|
|
|
|
|
*************************************************************************/
|
|
|
|
|
SvMetaType * SvIdlDataBase::FindType( const SvMetaType * pPType,
|
|
|
|
|
SvMetaTypeMemberList & rList )
|
|
|
|
|
{
|
|
|
|
|
SvMetaType * pType = rList.First();
|
|
|
|
|
while( pType && pPType != pType )
|
|
|
|
|
pType = rList.Next();
|
|
|
|
|
return pType;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SvMetaType * SvIdlDataBase::FindType( const ByteString & rName )
|
|
|
|
|
{
|
|
|
|
|
SvMetaType * pType = aTypeList.First();
|
|
|
|
|
while( pType && rName != pType->GetName() )
|
|
|
|
|
pType = aTypeList.Next();
|
|
|
|
|
return pType;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|* SvIdlDataBase::ReadKnownType()
|
|
|
|
|
|*
|
|
|
|
|
|* Beschreibung
|
|
|
|
|
*************************************************************************/
|
|
|
|
|
SvMetaType * SvIdlDataBase::ReadKnownType( SvTokenStream & rInStm )
|
|
|
|
|
{
|
2010-11-03 15:49:08 +01:00
|
|
|
|
sal_Bool bIn = sal_False;
|
|
|
|
|
sal_Bool bOut = sal_False;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
int nCall0 = CALL_VALUE;
|
|
|
|
|
int nCall1 = CALL_VALUE;
|
2010-11-03 15:49:08 +01:00
|
|
|
|
sal_Bool bSet = sal_False; //irgent ein Attribut gesetzt
|
2000-09-18 15:33:13 +00:00
|
|
|
|
|
2010-11-03 15:49:08 +01:00
|
|
|
|
sal_uInt32 nTokPos = rInStm.Tell();
|
2000-09-18 15:33:13 +00:00
|
|
|
|
SvToken * pTok = rInStm.GetToken_Next();
|
|
|
|
|
|
|
|
|
|
if( pTok->HasHash() )
|
|
|
|
|
{
|
2010-11-03 15:49:08 +01:00
|
|
|
|
sal_uInt32 nBeginPos = 0; // kann mit Tell nicht vorkommen
|
2000-09-18 15:33:13 +00:00
|
|
|
|
while( nBeginPos != rInStm.Tell() )
|
|
|
|
|
{
|
|
|
|
|
nBeginPos = rInStm.Tell();
|
|
|
|
|
if( pTok->Is( SvHash_in() ) )
|
|
|
|
|
{
|
2010-11-03 15:49:08 +01:00
|
|
|
|
bIn = sal_True;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
pTok = rInStm.GetToken_Next();
|
2010-11-03 15:49:08 +01:00
|
|
|
|
bSet = sal_True;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
}
|
|
|
|
|
if( pTok->Is( SvHash_out() ) )
|
|
|
|
|
{
|
2010-11-03 15:49:08 +01:00
|
|
|
|
bOut = sal_True;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
pTok = rInStm.GetToken_Next();
|
2010-11-03 15:49:08 +01:00
|
|
|
|
bSet = sal_True;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
}
|
|
|
|
|
if( pTok->Is( SvHash_inout() ) )
|
|
|
|
|
{
|
2010-11-03 15:49:08 +01:00
|
|
|
|
bIn = sal_True;
|
|
|
|
|
bOut = sal_True;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
pTok = rInStm.GetToken_Next();
|
2010-11-03 15:49:08 +01:00
|
|
|
|
bSet = sal_True;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/*
|
|
|
|
|
SvMetaTypeList aTmpTypeList;
|
|
|
|
|
if( FillTypeList( aTmpTypeList, pTok ) )
|
|
|
|
|
*/
|
|
|
|
|
if( pTok->IsIdentifier() )
|
|
|
|
|
{
|
|
|
|
|
ByteString aName = pTok->GetString();
|
|
|
|
|
SvMetaTypeMemberList & rList = GetTypeList();
|
|
|
|
|
SvMetaType * pType = rList.First();
|
|
|
|
|
while( pType )
|
|
|
|
|
{
|
|
|
|
|
if( pType->GetName() == aName )
|
|
|
|
|
break;
|
|
|
|
|
pType = rList.Next();
|
|
|
|
|
}
|
|
|
|
|
if( pType )
|
|
|
|
|
{
|
|
|
|
|
pTok = rInStm.GetToken();
|
|
|
|
|
if( pTok->IsChar() )
|
|
|
|
|
{
|
|
|
|
|
if( pTok->GetChar() == '&' || pTok->GetChar() == '*' )
|
|
|
|
|
{
|
|
|
|
|
nCall0 = (pTok->GetChar() == '&') ? CALL_REFERENCE :
|
|
|
|
|
CALL_POINTER;
|
|
|
|
|
rInStm.GetToken_Next();
|
|
|
|
|
pTok = rInStm.GetToken();
|
|
|
|
|
if( pTok->GetChar() == '&' || pTok->GetChar() == '*' )
|
|
|
|
|
{
|
|
|
|
|
nCall1 = (pTok->GetChar() == '&') ? CALL_REFERENCE :
|
|
|
|
|
CALL_POINTER;
|
|
|
|
|
rInStm.GetToken_Next();
|
|
|
|
|
}
|
2010-11-03 15:49:08 +01:00
|
|
|
|
bSet = sal_True;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/*
|
|
|
|
|
SvMetaType * pMetaType = aTmpTypeList.First();
|
|
|
|
|
while( pMetaType )
|
|
|
|
|
{
|
|
|
|
|
if( pMetaType->GetIn() == bIn
|
|
|
|
|
&& pMetaType->GetOut() == bOut
|
|
|
|
|
&& pMetaType->GetCall0() == nCall0
|
|
|
|
|
&& pMetaType->GetCall1() == nCall1 )
|
|
|
|
|
{
|
|
|
|
|
return pMetaType;
|
|
|
|
|
}
|
|
|
|
|
pMetaType = aTmpTypeList.Next();
|
|
|
|
|
}
|
|
|
|
|
*/
|
|
|
|
|
//SvMetaType * pType = aTmpTypeList.First();
|
|
|
|
|
if( !bSet )
|
|
|
|
|
// Ist genau dieser Typ
|
|
|
|
|
return pType;
|
|
|
|
|
|
2008-11-10 15:06:12 +00:00
|
|
|
|
DBG_ASSERT( aTmpTypeList.First(), "mindestens ein Element" );
|
2000-09-18 15:33:13 +00:00
|
|
|
|
SvMetaTypeRef xType = new SvMetaType( pType->GetName(), 'h', "dummy" );
|
|
|
|
|
xType->SetRef( pType );
|
|
|
|
|
xType->SetIn( bIn );
|
|
|
|
|
xType->SetOut( bOut );
|
|
|
|
|
xType->SetCall0( nCall0 );
|
|
|
|
|
xType->SetCall1( nCall1 );
|
|
|
|
|
|
|
|
|
|
aTmpTypeList.Append( xType );
|
|
|
|
|
return xType;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
rInStm.Seek( nTokPos );
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|*
|
|
|
|
|
|* SvIdlDataBase::ReadKnownAttr()
|
|
|
|
|
|*
|
|
|
|
|
|* Beschreibung
|
|
|
|
|
|*
|
|
|
|
|
*************************************************************************/
|
|
|
|
|
SvMetaAttribute * SvIdlDataBase::ReadKnownAttr
|
|
|
|
|
(
|
|
|
|
|
SvTokenStream & rInStm,
|
|
|
|
|
SvMetaType * pType /* Wenn der pType == NULL, dann muss der Typ
|
|
|
|
|
noch gelesen werden. */
|
|
|
|
|
)
|
|
|
|
|
{
|
2010-11-03 15:49:08 +01:00
|
|
|
|
sal_uInt32 nTokPos = rInStm.Tell();
|
2000-09-18 15:33:13 +00:00
|
|
|
|
|
|
|
|
|
if( !pType )
|
|
|
|
|
pType = ReadKnownType( rInStm );
|
|
|
|
|
|
|
|
|
|
if( pType )
|
|
|
|
|
{
|
|
|
|
|
// Wenn wir Slots auf die Wiese stellen, d"urfen wir nicht voraussetzen,
|
|
|
|
|
// da\s jeder Slot einen anderen Namen hat!
|
|
|
|
|
/*
|
|
|
|
|
SvToken * pTok = rInStm.GetToken_Next();
|
|
|
|
|
if( pTok->IsIdentifier() )
|
2010-11-03 15:49:08 +01:00
|
|
|
|
for( sal_uIntPtr n = 0; n < aAttrList.Count(); n++ )
|
2000-09-18 15:33:13 +00:00
|
|
|
|
{
|
|
|
|
|
SvMetaAttribute * pAttr = aAttrList.GetObject( n );
|
|
|
|
|
if( pAttr->GetName() == pTok->GetString() )
|
|
|
|
|
return pAttr;
|
|
|
|
|
}
|
|
|
|
|
*/
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
// sonst SlotId?
|
|
|
|
|
SvToken * pTok = rInStm.GetToken_Next();
|
|
|
|
|
if( pTok->IsIdentifier() )
|
|
|
|
|
{
|
2010-11-03 15:49:08 +01:00
|
|
|
|
sal_uIntPtr n;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
if( FindId( pTok->GetString(), &n ) )
|
|
|
|
|
{
|
2010-11-03 15:49:08 +01:00
|
|
|
|
for( sal_uIntPtr i = 0; i < aAttrList.Count(); i++ )
|
2000-09-18 15:33:13 +00:00
|
|
|
|
{
|
2006-06-19 09:43:13 +00:00
|
|
|
|
SvMetaAttribute * pAttr = aAttrList.GetObject( i );
|
2000-09-18 15:33:13 +00:00
|
|
|
|
if( pAttr->GetSlotId() == pTok->GetString() )
|
|
|
|
|
return pAttr;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ByteString aStr( "Nicht gefunden : " );
|
|
|
|
|
aStr += pTok->GetString();
|
|
|
|
|
DBG_ERROR( aStr.GetBuffer() );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
rInStm.Seek( nTokPos );
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SvMetaAttribute* SvIdlDataBase::SearchKnownAttr
|
|
|
|
|
(
|
|
|
|
|
const SvNumberIdentifier& rId
|
|
|
|
|
)
|
|
|
|
|
{
|
2010-11-03 15:49:08 +01:00
|
|
|
|
sal_uIntPtr n;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
if( FindId( rId, &n ) )
|
|
|
|
|
{
|
2010-11-03 15:49:08 +01:00
|
|
|
|
for( sal_uIntPtr i = 0; i < aAttrList.Count(); i++ )
|
2000-09-18 15:33:13 +00:00
|
|
|
|
{
|
2006-06-19 09:43:13 +00:00
|
|
|
|
SvMetaAttribute * pAttr = aAttrList.GetObject( i );
|
2000-09-18 15:33:13 +00:00
|
|
|
|
if( pAttr->GetSlotId() == rId )
|
|
|
|
|
return pAttr;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|* SvIdlDataBase::ReadKnownClass()
|
|
|
|
|
|*
|
|
|
|
|
|* Beschreibung
|
|
|
|
|
*************************************************************************/
|
|
|
|
|
SvMetaClass * SvIdlDataBase::ReadKnownClass( SvTokenStream & rInStm )
|
|
|
|
|
{
|
2010-11-03 15:49:08 +01:00
|
|
|
|
sal_uInt32 nTokPos = rInStm.Tell();
|
2000-09-18 15:33:13 +00:00
|
|
|
|
SvToken * pTok = rInStm.GetToken_Next();
|
|
|
|
|
|
|
|
|
|
if( pTok->IsIdentifier() )
|
2010-11-03 15:49:08 +01:00
|
|
|
|
for( sal_uIntPtr n = 0; n < aClassList.Count(); n++ )
|
2000-09-18 15:33:13 +00:00
|
|
|
|
{
|
|
|
|
|
SvMetaClass * pClass = aClassList.GetObject( n );
|
|
|
|
|
if( pClass->GetName() == pTok->GetString() )
|
|
|
|
|
return pClass;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
rInStm.Seek( nTokPos );
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|* SvIdlDataBase::Write()
|
|
|
|
|
|*
|
|
|
|
|
|* Beschreibung
|
|
|
|
|
*************************************************************************/
|
|
|
|
|
void SvIdlDataBase::Write( const ByteString & rText )
|
|
|
|
|
{
|
CWS-TOOLING: integrate CWS buildverbosity
2009-10-13 15:51:48 +0200 fs r276867 : allow building with 'nodep'==''
2009-10-11 22:39:56 +0200 fs r276820 : silence a compiler warning in a file only used when VERBOSE!=""
2009-10-09 14:37:43 +0200 fs r276807 : let not override the non-presence of $VERBOSE the given command line arguments
2009-10-09 14:36:25 +0200 fs r276806 : also deliver spirit/home/classic/debug/impl
2009-10-08 13:38:07 +0200 fs r276789 : not that many line feeds in --show mode
2009-10-08 13:13:01 +0200 fs r276788 : minor adjustments requested by hjs:
- replaced space/tab mixes at beginning of lines with mere tab
- made "nothing to update" message for the ZIPALLTARGET target more prominent
- removed useless "echo > /dev/nul" statements
2009-10-07 13:32:12 +0200 fs r276753 : #i105585#
2009-10-07 11:31:59 +0200 fs r276742 : #i10000# missing dependency between stoc/security and stoc/util
2009-10-06 22:59:59 +0200 fs r276729 : CWS-TOOLING: rebase CWS buildverbosity to trunk@276699 (milestone: DEV300:m61)
2009-09-29 12:04:58 +0200 fs r276518 : #i10000#
2009-09-29 12:04:25 +0200 fs r276517 : oops
2009-09-29 12:01:07 +0200 fs r276516 : #i84497# removed some more (non-diagnostic) 'echo ------' directives
2009-09-29 11:59:29 +0200 fs r276515 : #i84497# removed some more (non-diagnostic) 'echo ------' directives
2009-09-29 11:52:32 +0200 fs r276514 : #i84497# removed the various 'echo ------------' directives from verbose mode, as per hjs' request
2009-09-29 11:44:16 +0200 fs r276513 : do not duplicate IDLC call commands with different verbosity switches
2009-09-28 21:43:50 +0200 thb r276502 : #i84497# fixed potential recursive macro def + extra ls
* solenv/inc/settings.mk: now setting via VERBOSE!:=, removes warning
and my spurious "recursive macro definition" error
* solenv/inc/tg_app.mk: one extra ls silenced for app target (and
quiet mode, that goes without saying)
2009-09-23 08:57:01 +0200 fs r276366 : use ULFEX_VERBOSITY instead of duplicating the ULFEX call
2009-09-21 11:42:26 +0200 fs r276320 : ignore output paths
2009-09-21 11:04:27 +0200 fs r276318 : silence another compiler warning, which only hits us when actually using this (debug) file, which is the case only when slideshow is compiled with a env variable VERBOSE, thus came up in CWS buildverbosity
2009-09-21 10:30:14 +0200 fs r276313 : make some output depend on VERBOSE==TRUE, not COMMAND_ECHO=""
While both are equivalent at the moment, COMMAND_ECHO finally is an implementation
default of the VERBOSE flag only, so better rely on VERBOSE as the primary verbosity flag
2009-09-21 09:56:57 +0200 fs r276311 : forgot to re-generate from tg_zip before committing
2009-09-21 09:52:11 +0200 fs r276310 : #i84497# even less verbosity
2009-09-17 11:02:47 +0200 fs r276232 : #i84497# verbose implies VERBOSE nowadays, and VERBOSE==FALSE should not lead to -DVERBOSE
2009-09-15 22:59:37 +0200 fs r276189 : #i105022# copy fix for this P1 into this CWS
2009-09-15 11:56:35 +0200 fs r276165 : CWS-TOOLING: rebase CWS buildverbosity to trunk@276043 (milestone: DEV300:m58)
2009-09-14 17:45:10 +0200 fs r276137 : #i84497# don't duplicate zip lines w/ and w/o -q switch, use a variable instead (maintenance)
2009-09-14 15:01:33 +0200 fs r276124 : #i10000#
2009-09-11 23:58:46 +0200 thb r276083 : #i84497#: More quiet-build fine tuning
- silenced rsc for real (properly filtering options for
cpp, and a pretty brutal amputation of the tool blurp,
which would have needed cmd opt parser duplication)
- silenced deliver.pl
- silenced checkdll.sh
- silenced zip via -q (in quiet mode)
- silenced various idl, resource, transex whatever tool,
passing appropriate options down to them '-QQ' sometimes
- silenced dmake, pointless blurb that something does *not*
need update removed
- silenced the old starview idl compiler, to not output
tool's name & progress chars in quiet mode
2009-09-11 21:13:59 +0200 thb r276081 : #i84497#: More bits on the quiet mode of the build.
The bulk of the changes is disabling those annoying
"echo ------------------" lines for the quiet build,
which has the stretch goal of outputting *exactly*
one line per file compiled/linked/processed.
Apart from that, silenced a few especialy annoying
module-specific makefiles (basically adding
$(COMMAND_ECHO) in front of a gazillion rules).
Additionally, slightly tweaked what idlc regards
verbose, normal, and quiet mode; this was to have it
echo exactly one line per idl file processed (the
fact that quiet mode did not echo *anything* for idl
files was a bit too much for my taste)
2009-09-04 09:14:35 +0200 fs r275777 : don't emit the link parameters if VERBOSE!=TRUE
2009-09-02 10:31:15 +0200 fs r275700 : #i10000#
2009-09-02 08:44:14 +0200 fs r275697 : update svn:ignore to ignore the output paths
2009-09-02 08:40:54 +0200 fs r275695 : #i84497# less verbose output during build, unless a dedicated '-verbose' switch is given
2009-09-02 08:40:28 +0200 fs r275694 : GRAPHITE is missing in the BUILD_TYPE
2009-09-02 08:40:05 +0200 fs r275693 : #i84497# less verbose output during build, unless a dedicated '-verbose' switch is given
2009-09-02 08:39:25 +0200 fs r275692 : #i84497# less verbose output during build, unless a dedicated '-verbose' switch is given
2009-09-02 08:39:02 +0200 fs r275691 : #i84497# less verbose output during build, unless a dedicated '-verbose' switch is given
2009-09-02 08:38:09 +0200 fs r275690 : #i84497# less verbose output during build
2009-09-02 08:37:06 +0200 fs r275689 : #i84497# don't emit that much noise, unless a '-verbose' switch is given
2009-10-21 10:43:22 +00:00
|
|
|
|
if( nVerbosity != 0 )
|
2000-09-18 15:33:13 +00:00
|
|
|
|
fprintf( stdout, "%s", rText.GetBuffer() );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|* SvIdlDataBase::WriteError()
|
|
|
|
|
|*
|
|
|
|
|
|* Beschreibung
|
|
|
|
|
*************************************************************************/
|
|
|
|
|
void SvIdlDataBase::WriteError( const ByteString & rErrWrn,
|
|
|
|
|
const ByteString & rFileName,
|
|
|
|
|
const ByteString & rErrorText,
|
2010-11-03 15:49:08 +01:00
|
|
|
|
sal_uIntPtr nRow, sal_uIntPtr nColumn ) const
|
2000-09-18 15:33:13 +00:00
|
|
|
|
{
|
|
|
|
|
//Fehlerbehandlung
|
|
|
|
|
fprintf( stderr, "\n%s --- %s: ( %ld, %ld )\n",
|
|
|
|
|
rFileName.GetBuffer(), rErrWrn.GetBuffer(), nRow, nColumn );
|
|
|
|
|
|
|
|
|
|
if( rErrorText.Len() )
|
|
|
|
|
{ // Fehler gesetzt
|
|
|
|
|
fprintf( stderr, "\t%s\n", rErrorText.GetBuffer() );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|* SvIdlDataBase::WriteError()
|
|
|
|
|
|*
|
|
|
|
|
|* Beschreibung
|
|
|
|
|
*************************************************************************/
|
|
|
|
|
void SvIdlDataBase::WriteError( SvTokenStream & rInStm )
|
|
|
|
|
{
|
|
|
|
|
//Fehlerbehandlung
|
|
|
|
|
String aFileName( rInStm.GetFileName() );
|
|
|
|
|
ByteString aErrorText;
|
2010-11-03 15:49:08 +01:00
|
|
|
|
sal_uIntPtr nRow = 0, nColumn = 0;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
|
|
|
|
|
rInStm.SeekEnd();
|
|
|
|
|
SvToken *pTok = rInStm.GetToken();
|
|
|
|
|
|
|
|
|
|
// Fehlerposition
|
|
|
|
|
nRow = pTok->GetLine();
|
|
|
|
|
nColumn = pTok->GetColumn();
|
|
|
|
|
|
|
|
|
|
if( aError.IsError() )
|
|
|
|
|
{ // Fehler gesetzt
|
|
|
|
|
// Fehler Token suchen
|
|
|
|
|
// Fehlertext
|
|
|
|
|
if( aError.GetText().Len() )
|
|
|
|
|
{
|
|
|
|
|
aErrorText = "may be <";
|
|
|
|
|
aErrorText += aError.GetText();
|
|
|
|
|
}
|
|
|
|
|
SvToken * pPrevTok = NULL;
|
|
|
|
|
while( pTok != pPrevTok )
|
|
|
|
|
{
|
|
|
|
|
pPrevTok = pTok;
|
|
|
|
|
if( pTok->GetLine() == aError.nLine
|
|
|
|
|
&& pTok->GetColumn() == aError.nColumn )
|
|
|
|
|
break;
|
|
|
|
|
pTok = rInStm.GetToken_PrevAll();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Fehlerposition
|
|
|
|
|
aErrorText += "> at ( ";
|
2004-02-26 12:47:51 +00:00
|
|
|
|
aErrorText += ByteString::CreateFromInt64(aError.nLine);
|
2000-09-18 15:33:13 +00:00
|
|
|
|
aErrorText += ", ";
|
2004-02-26 12:47:51 +00:00
|
|
|
|
aErrorText += ByteString::CreateFromInt64(aError.nColumn);
|
2000-09-18 15:33:13 +00:00
|
|
|
|
aErrorText += " )";
|
|
|
|
|
|
|
|
|
|
// Fehler zuruecksetzen
|
|
|
|
|
aError = SvIdlError();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
WriteError( "error", ByteString( aFileName, RTL_TEXTENCODING_UTF8 ), aErrorText, nRow, nColumn );
|
|
|
|
|
|
2008-11-10 15:06:12 +00:00
|
|
|
|
DBG_ASSERT( pTok, "token must be found" );
|
2000-09-18 15:33:13 +00:00
|
|
|
|
if( !pTok )
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
// Identifier in der Naehe suchen
|
|
|
|
|
if( !pTok->IsIdentifier() )
|
|
|
|
|
{
|
|
|
|
|
rInStm.GetToken_PrevAll();
|
|
|
|
|
pTok = rInStm.GetToken();
|
|
|
|
|
}
|
|
|
|
|
if( pTok && pTok->IsIdentifier() )
|
|
|
|
|
{
|
|
|
|
|
ByteString aN = IDLAPP->pHashTable->GetNearString( pTok->GetString() );
|
|
|
|
|
if( aN.Len() )
|
|
|
|
|
fprintf( stderr, "%s versus %s\n", pTok->GetString().GetBuffer(), aN.GetBuffer() );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/****************** SvIdlWorkingBase ****************************************/
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|* SvIdlWorkingBase::SvIdlWorkingBase()
|
|
|
|
|
|*
|
|
|
|
|
|* Beschreibung
|
|
|
|
|
*************************************************************************/
|
CWS-TOOLING: integrate CWS buildverbosity
2009-10-13 15:51:48 +0200 fs r276867 : allow building with 'nodep'==''
2009-10-11 22:39:56 +0200 fs r276820 : silence a compiler warning in a file only used when VERBOSE!=""
2009-10-09 14:37:43 +0200 fs r276807 : let not override the non-presence of $VERBOSE the given command line arguments
2009-10-09 14:36:25 +0200 fs r276806 : also deliver spirit/home/classic/debug/impl
2009-10-08 13:38:07 +0200 fs r276789 : not that many line feeds in --show mode
2009-10-08 13:13:01 +0200 fs r276788 : minor adjustments requested by hjs:
- replaced space/tab mixes at beginning of lines with mere tab
- made "nothing to update" message for the ZIPALLTARGET target more prominent
- removed useless "echo > /dev/nul" statements
2009-10-07 13:32:12 +0200 fs r276753 : #i105585#
2009-10-07 11:31:59 +0200 fs r276742 : #i10000# missing dependency between stoc/security and stoc/util
2009-10-06 22:59:59 +0200 fs r276729 : CWS-TOOLING: rebase CWS buildverbosity to trunk@276699 (milestone: DEV300:m61)
2009-09-29 12:04:58 +0200 fs r276518 : #i10000#
2009-09-29 12:04:25 +0200 fs r276517 : oops
2009-09-29 12:01:07 +0200 fs r276516 : #i84497# removed some more (non-diagnostic) 'echo ------' directives
2009-09-29 11:59:29 +0200 fs r276515 : #i84497# removed some more (non-diagnostic) 'echo ------' directives
2009-09-29 11:52:32 +0200 fs r276514 : #i84497# removed the various 'echo ------------' directives from verbose mode, as per hjs' request
2009-09-29 11:44:16 +0200 fs r276513 : do not duplicate IDLC call commands with different verbosity switches
2009-09-28 21:43:50 +0200 thb r276502 : #i84497# fixed potential recursive macro def + extra ls
* solenv/inc/settings.mk: now setting via VERBOSE!:=, removes warning
and my spurious "recursive macro definition" error
* solenv/inc/tg_app.mk: one extra ls silenced for app target (and
quiet mode, that goes without saying)
2009-09-23 08:57:01 +0200 fs r276366 : use ULFEX_VERBOSITY instead of duplicating the ULFEX call
2009-09-21 11:42:26 +0200 fs r276320 : ignore output paths
2009-09-21 11:04:27 +0200 fs r276318 : silence another compiler warning, which only hits us when actually using this (debug) file, which is the case only when slideshow is compiled with a env variable VERBOSE, thus came up in CWS buildverbosity
2009-09-21 10:30:14 +0200 fs r276313 : make some output depend on VERBOSE==TRUE, not COMMAND_ECHO=""
While both are equivalent at the moment, COMMAND_ECHO finally is an implementation
default of the VERBOSE flag only, so better rely on VERBOSE as the primary verbosity flag
2009-09-21 09:56:57 +0200 fs r276311 : forgot to re-generate from tg_zip before committing
2009-09-21 09:52:11 +0200 fs r276310 : #i84497# even less verbosity
2009-09-17 11:02:47 +0200 fs r276232 : #i84497# verbose implies VERBOSE nowadays, and VERBOSE==FALSE should not lead to -DVERBOSE
2009-09-15 22:59:37 +0200 fs r276189 : #i105022# copy fix for this P1 into this CWS
2009-09-15 11:56:35 +0200 fs r276165 : CWS-TOOLING: rebase CWS buildverbosity to trunk@276043 (milestone: DEV300:m58)
2009-09-14 17:45:10 +0200 fs r276137 : #i84497# don't duplicate zip lines w/ and w/o -q switch, use a variable instead (maintenance)
2009-09-14 15:01:33 +0200 fs r276124 : #i10000#
2009-09-11 23:58:46 +0200 thb r276083 : #i84497#: More quiet-build fine tuning
- silenced rsc for real (properly filtering options for
cpp, and a pretty brutal amputation of the tool blurp,
which would have needed cmd opt parser duplication)
- silenced deliver.pl
- silenced checkdll.sh
- silenced zip via -q (in quiet mode)
- silenced various idl, resource, transex whatever tool,
passing appropriate options down to them '-QQ' sometimes
- silenced dmake, pointless blurb that something does *not*
need update removed
- silenced the old starview idl compiler, to not output
tool's name & progress chars in quiet mode
2009-09-11 21:13:59 +0200 thb r276081 : #i84497#: More bits on the quiet mode of the build.
The bulk of the changes is disabling those annoying
"echo ------------------" lines for the quiet build,
which has the stretch goal of outputting *exactly*
one line per file compiled/linked/processed.
Apart from that, silenced a few especialy annoying
module-specific makefiles (basically adding
$(COMMAND_ECHO) in front of a gazillion rules).
Additionally, slightly tweaked what idlc regards
verbose, normal, and quiet mode; this was to have it
echo exactly one line per idl file processed (the
fact that quiet mode did not echo *anything* for idl
files was a bit too much for my taste)
2009-09-04 09:14:35 +0200 fs r275777 : don't emit the link parameters if VERBOSE!=TRUE
2009-09-02 10:31:15 +0200 fs r275700 : #i10000#
2009-09-02 08:44:14 +0200 fs r275697 : update svn:ignore to ignore the output paths
2009-09-02 08:40:54 +0200 fs r275695 : #i84497# less verbose output during build, unless a dedicated '-verbose' switch is given
2009-09-02 08:40:28 +0200 fs r275694 : GRAPHITE is missing in the BUILD_TYPE
2009-09-02 08:40:05 +0200 fs r275693 : #i84497# less verbose output during build, unless a dedicated '-verbose' switch is given
2009-09-02 08:39:25 +0200 fs r275692 : #i84497# less verbose output during build, unless a dedicated '-verbose' switch is given
2009-09-02 08:39:02 +0200 fs r275691 : #i84497# less verbose output during build, unless a dedicated '-verbose' switch is given
2009-09-02 08:38:09 +0200 fs r275690 : #i84497# less verbose output during build
2009-09-02 08:37:06 +0200 fs r275689 : #i84497# don't emit that much noise, unless a '-verbose' switch is given
2009-10-21 10:43:22 +00:00
|
|
|
|
SvIdlWorkingBase::SvIdlWorkingBase(const SvCommand& rCmd) : SvIdlDataBase(rCmd)
|
2000-09-18 15:33:13 +00:00
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|* SvIdlWorkingBase::ReadSvIdl()
|
|
|
|
|
|*
|
|
|
|
|
|* Beschreibung
|
|
|
|
|
*************************************************************************/
|
2010-11-03 15:49:08 +01:00
|
|
|
|
sal_Bool SvIdlWorkingBase::ReadSvIdl( SvTokenStream & rInStm, sal_Bool bImported, const String & rPath )
|
2000-09-18 15:33:13 +00:00
|
|
|
|
{
|
|
|
|
|
aPath = rPath; // nur fuer den durchlauf gueltig
|
|
|
|
|
SvToken * pTok;
|
2010-11-03 15:49:08 +01:00
|
|
|
|
sal_Bool bOk = sal_True;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
pTok = rInStm.GetToken();
|
|
|
|
|
// nur ein import ganz am Anfang
|
|
|
|
|
if( pTok->Is( SvHash_import() ) )
|
|
|
|
|
{
|
|
|
|
|
rInStm.GetToken_Next();
|
|
|
|
|
rInStm.Read( '(' ); // optional
|
|
|
|
|
pTok = rInStm.GetToken_Next();
|
|
|
|
|
if( pTok->IsString() )
|
|
|
|
|
{
|
|
|
|
|
DirEntry aFullName( String::CreateFromAscii( pTok->GetString().GetBuffer() ) );
|
|
|
|
|
if( aFullName.Find( rPath ) )
|
|
|
|
|
{
|
|
|
|
|
SvFileStream aStm( aFullName.GetFull(),
|
|
|
|
|
STREAM_STD_READ | STREAM_NOCREATE );
|
|
|
|
|
Load( aStm );
|
|
|
|
|
if( aStm.GetError() != SVSTREAM_OK )
|
|
|
|
|
{
|
|
|
|
|
if( aStm.GetError() == SVSTREAM_WRONGVERSION )
|
|
|
|
|
{
|
|
|
|
|
ByteString aStr( "wrong version, file " );
|
|
|
|
|
aStr += ByteString( aFullName.GetFull(), RTL_TEXTENCODING_UTF8 );
|
|
|
|
|
SetError( aStr, pTok );
|
|
|
|
|
WriteError( rInStm );
|
2010-11-03 15:49:08 +01:00
|
|
|
|
bOk = sal_False;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
aStm.Seek( 0 );
|
|
|
|
|
aStm.ResetError();
|
|
|
|
|
SvTokenStream aTokStm( aStm, aFullName.GetFull() );
|
2010-11-03 15:49:08 +01:00
|
|
|
|
bOk = ReadSvIdl( aTokStm, sal_True, rPath );
|
2000-09-18 15:33:13 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
2010-11-03 15:49:08 +01:00
|
|
|
|
bOk = sal_False;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
2010-11-03 15:49:08 +01:00
|
|
|
|
bOk = sal_False;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
}
|
|
|
|
|
|
2010-11-03 15:49:08 +01:00
|
|
|
|
sal_uInt32 nBeginPos = 0xFFFFFFFF; // kann mit Tell nicht vorkommen
|
2000-09-18 15:33:13 +00:00
|
|
|
|
|
|
|
|
|
while( bOk && nBeginPos != rInStm.Tell() )
|
|
|
|
|
{
|
|
|
|
|
nBeginPos = rInStm.Tell();
|
|
|
|
|
pTok = rInStm.GetToken();
|
|
|
|
|
if( pTok->IsEof() )
|
2010-11-03 15:49:08 +01:00
|
|
|
|
return sal_True;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
if( pTok->IsEmpty() )
|
2010-11-03 15:49:08 +01:00
|
|
|
|
bOk = sal_False;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
|
|
|
|
|
// nur ein import ganz am Anfang
|
|
|
|
|
/*else */if( pTok->Is( SvHash_module() ) )
|
|
|
|
|
{
|
|
|
|
|
SvMetaModuleRef aModule = new SvMetaModule( rInStm.GetFileName(), bImported );
|
|
|
|
|
if( aModule->ReadSvIdl( *this, rInStm ) )
|
|
|
|
|
GetModuleList().Append( aModule );
|
|
|
|
|
else
|
2010-11-03 15:49:08 +01:00
|
|
|
|
bOk = sal_False;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
2010-11-03 15:49:08 +01:00
|
|
|
|
bOk = sal_False;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
}
|
|
|
|
|
if( !bOk || !pTok->IsEof() )
|
|
|
|
|
{
|
|
|
|
|
//Fehlerbehandlung
|
|
|
|
|
WriteError( rInStm );
|
2010-11-03 15:49:08 +01:00
|
|
|
|
return sal_False;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
}
|
2010-11-03 15:49:08 +01:00
|
|
|
|
return sal_True;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|* SvIdlWorkingBase::WriteSvIdl()
|
|
|
|
|
|*
|
|
|
|
|
|* Beschreibung
|
|
|
|
|
*************************************************************************/
|
2010-11-03 15:49:08 +01:00
|
|
|
|
sal_Bool SvIdlWorkingBase::WriteSvIdl( SvStream & rOutStm )
|
2000-09-18 15:33:13 +00:00
|
|
|
|
{
|
|
|
|
|
if( rOutStm.GetError() != SVSTREAM_OK )
|
2010-11-03 15:49:08 +01:00
|
|
|
|
return sal_False;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
|
|
|
|
|
SvStringHashList aList;
|
|
|
|
|
if( GetIdTable() )
|
|
|
|
|
{
|
|
|
|
|
GetIdTable()->FillHashList( &aList );
|
|
|
|
|
SvStringHashEntry * pEntry = aList.First();
|
|
|
|
|
while( pEntry )
|
|
|
|
|
{
|
|
|
|
|
rOutStm << "#define " << pEntry->GetName().GetBuffer()
|
2004-02-26 12:47:51 +00:00
|
|
|
|
<< '\t'
|
|
|
|
|
<< ByteString::CreateFromInt64(
|
|
|
|
|
pEntry->GetValue() ).GetBuffer()
|
2000-09-18 15:33:13 +00:00
|
|
|
|
<< endl;
|
|
|
|
|
pEntry = aList.Next();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2010-11-03 15:49:08 +01:00
|
|
|
|
for( sal_uIntPtr n = 0; n < GetModuleList().Count(); n++ )
|
2000-09-18 15:33:13 +00:00
|
|
|
|
{
|
|
|
|
|
SvMetaModule * pModule = GetModuleList().GetObject( n );
|
|
|
|
|
//if( !pModule->IsImported() )
|
|
|
|
|
pModule->WriteSvIdl( *this, rOutStm, 0 );
|
|
|
|
|
}
|
2010-11-03 15:49:08 +01:00
|
|
|
|
return sal_True;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|* SvIdlWorkingBase::WriteSfx()
|
|
|
|
|
|*
|
|
|
|
|
|* Beschreibung
|
|
|
|
|
*************************************************************************/
|
2010-11-03 15:49:08 +01:00
|
|
|
|
sal_Bool SvIdlWorkingBase::WriteSfx( SvStream & rOutStm )
|
2000-09-18 15:33:13 +00:00
|
|
|
|
{
|
|
|
|
|
if( rOutStm.GetError() != SVSTREAM_OK )
|
2010-11-03 15:49:08 +01:00
|
|
|
|
return sal_False;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
|
|
|
|
|
// alle Tmp-Variablen fuer das Schreiben zuruecksetzen
|
|
|
|
|
WriteReset();
|
|
|
|
|
SvMemoryStream aTmpStm( 256000, 256000 );
|
2010-11-03 15:49:08 +01:00
|
|
|
|
sal_uIntPtr n;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
for( n = 0; n < GetModuleList().Count(); n++ )
|
|
|
|
|
{
|
|
|
|
|
SvMetaModule * pModule = GetModuleList().GetObject( n );
|
|
|
|
|
if( !pModule->IsImported() )
|
|
|
|
|
pModule->WriteSfx( *this, aTmpStm );
|
|
|
|
|
aTmpStm.Seek( 0 );
|
|
|
|
|
}
|
|
|
|
|
for( n = 0; n < aUsedTypes.Count(); n++ )
|
|
|
|
|
{
|
|
|
|
|
SvMetaType * pType = aUsedTypes.GetObject( n );
|
|
|
|
|
pType->WriteSfx( *this, rOutStm );
|
|
|
|
|
}
|
|
|
|
|
aUsedTypes.Clear();
|
|
|
|
|
rOutStm << aTmpStm;
|
2010-11-03 15:49:08 +01:00
|
|
|
|
return sal_True;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
}
|
|
|
|
|
|
2010-11-03 15:49:08 +01:00
|
|
|
|
sal_Bool SvIdlWorkingBase::WriteHelpIds( SvStream& rOutStm )
|
2000-09-18 15:33:13 +00:00
|
|
|
|
{
|
|
|
|
|
if( rOutStm.GetError() != SVSTREAM_OK )
|
2010-11-03 15:49:08 +01:00
|
|
|
|
return sal_False;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
|
|
|
|
|
Table aIdTable;
|
2010-11-03 15:49:08 +01:00
|
|
|
|
sal_uIntPtr n;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
for( n = 0; n < GetModuleList().Count(); n++ )
|
|
|
|
|
{
|
|
|
|
|
SvMetaModule * pModule = GetModuleList().GetObject( n );
|
|
|
|
|
//if( !pModule->IsImported() )
|
|
|
|
|
pModule->WriteHelpIds( *this, rOutStm, &aIdTable );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const SvMetaAttributeMemberList & rAttrList = GetAttrList();
|
|
|
|
|
for( n = 0; n < rAttrList.Count(); n++ )
|
|
|
|
|
{
|
|
|
|
|
SvMetaAttribute * pAttr = rAttrList.GetObject( n );
|
|
|
|
|
pAttr->WriteHelpId( *this, rOutStm, &aIdTable );
|
|
|
|
|
}
|
|
|
|
|
|
2010-11-03 15:49:08 +01:00
|
|
|
|
return sal_True;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|* SvIdlWorkingBase::WriteSfxItem()
|
|
|
|
|
|*
|
|
|
|
|
|* Beschreibung
|
|
|
|
|
*************************************************************************/
|
2010-11-03 15:49:08 +01:00
|
|
|
|
sal_Bool SvIdlWorkingBase::WriteSfxItem( SvStream & )
|
2000-09-18 15:33:13 +00:00
|
|
|
|
{
|
2010-11-03 15:49:08 +01:00
|
|
|
|
return sal_False;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SvIdlDataBase::StartNewFile( const String& rName )
|
|
|
|
|
{
|
|
|
|
|
bExport = ( aExportFile.EqualsIgnoreCaseAscii( rName ) );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SvIdlDataBase::AppendAttr( SvMetaAttribute *pAttr )
|
|
|
|
|
{
|
|
|
|
|
aAttrList.Append( pAttr );
|
|
|
|
|
if ( bExport )
|
2010-11-03 15:49:08 +01:00
|
|
|
|
pAttr->SetNewAttribute( sal_True );
|
2000-09-18 15:33:13 +00:00
|
|
|
|
}
|
|
|
|
|
|
2010-11-03 15:49:08 +01:00
|
|
|
|
sal_Bool SvIdlWorkingBase::WriteCSV( SvStream& rStrm )
|
2000-09-18 15:33:13 +00:00
|
|
|
|
{
|
|
|
|
|
SvMetaAttributeMemberList &rList = GetAttrList();
|
2010-11-03 15:49:08 +01:00
|
|
|
|
sal_uIntPtr nCount = rList.Count();
|
|
|
|
|
for ( sal_uIntPtr n=0; n<nCount; n++ )
|
2000-09-18 15:33:13 +00:00
|
|
|
|
{
|
|
|
|
|
if ( rList.GetObject(n)->IsNewAttribute() )
|
|
|
|
|
{
|
|
|
|
|
rList.GetObject(n)->WriteCSV( *this, rStrm );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ( rStrm.GetError() != SVSTREAM_OK )
|
2010-11-03 15:49:08 +01:00
|
|
|
|
return sal_False;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
else
|
2010-11-03 15:49:08 +01:00
|
|
|
|
return sal_True;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
|
|* SvIdlWorkingBase::WriteDocumentation()
|
|
|
|
|
|*
|
|
|
|
|
|* Beschreibung
|
|
|
|
|
*************************************************************************/
|
2010-11-03 15:49:08 +01:00
|
|
|
|
sal_Bool SvIdlWorkingBase::WriteDocumentation( SvStream & rOutStm )
|
2000-09-18 15:33:13 +00:00
|
|
|
|
{
|
|
|
|
|
if( rOutStm.GetError() != SVSTREAM_OK )
|
2010-11-03 15:49:08 +01:00
|
|
|
|
return sal_False;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
|
2010-11-03 15:49:08 +01:00
|
|
|
|
for( sal_uIntPtr n = 0; n < GetModuleList().Count(); n++ )
|
2000-09-18 15:33:13 +00:00
|
|
|
|
{
|
|
|
|
|
SvMetaModule * pModule = GetModuleList().GetObject( n );
|
|
|
|
|
if( !pModule->IsImported() )
|
|
|
|
|
pModule->Write( *this, rOutStm, 0, WRITE_DOCU );
|
|
|
|
|
}
|
2010-11-03 15:49:08 +01:00
|
|
|
|
return sal_True;
|
2000-09-18 15:33:13 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endif // IDL_COMPILER
|
|
|
|
|
|