summaryrefslogtreecommitdiff
path: root/rsc/source/res/rsccont.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'rsc/source/res/rsccont.cxx')
-rw-r--r--rsc/source/res/rsccont.cxx1179
1 files changed, 1179 insertions, 0 deletions
diff --git a/rsc/source/res/rsccont.cxx b/rsc/source/res/rsccont.cxx
new file mode 100644
index 000000000000..072c5feaa31d
--- /dev/null
+++ b/rsc/source/res/rsccont.cxx
@@ -0,0 +1,1179 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * 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_rsc.hxx"
+/****************** I N C L U D E S **************************************/
+
+// C and C++ Includes.
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+// Programmabh�ngige Includes.
+#include <rsccont.hxx>
+
+#include <tools/rcid.h>
+
+/****************** C O D E **********************************************/
+/****************** E N T R Y S T R U C T ********************************/
+/*************************************************************************
+|*
+|* ENTRYSTRUCT::Destroy()
+|*
+|* Beschreibung
+|* Ersterstellung MM 06.08.91
+|* Letzte Aenderung MM 06.08.91
+|*
+*************************************************************************/
+void ENTRY_STRUCT::Destroy()
+{
+ aName.Destroy();
+ if( aInst.IsInst() ){
+ aInst.pClass->Destroy( aInst );
+ rtl_freeMemory( aInst.pData );
+ };
+}
+
+/****************** R s c B a s e C o n t ********************************/
+/*************************************************************************
+|*
+|* RscBaseCont::RscBaseCont()
+|*
+|* Beschreibung
+|* Ersterstellung MM 25.05.91
+|* Letzte Aenderung MM 25.05.91
+|*
+*************************************************************************/
+RscBaseCont::RscBaseCont( Atom nId, sal_uInt32 nTypeId, RscTop * pSuper,
+ BOOL bNoIdent )
+ : RscTop( nId, nTypeId, pSuper ),
+ nSize( 0 )
+{
+ pTypeClass = NULL;
+ pTypeClass1 = NULL;
+ bNoId = bNoIdent;
+ nOffInstData = RscTop::Size();
+ nSize = nOffInstData + ALIGNED_SIZE( sizeof( RscBaseContInst ) );
+}
+
+/*************************************************************************
+|*
+|* RscBaseCont::~RscBaseCont()
+|*
+|* Beschreibung
+|* Ersterstellung MM 25.05.91
+|* Letzte Aenderung MM 25.05.91
+|*
+*************************************************************************/
+RscBaseCont::~RscBaseCont()
+{
+}
+
+/*************************************************************************
+|*
+|* RscBaseCont::GetClassType()
+|*
+|* Beschreibung
+|* Ersterstellung MM 25.05.91
+|* Letzte Aenderung MM 25.05.91
+|*
+*************************************************************************/
+RSCCLASS_TYPE RscBaseCont::GetClassType() const
+{
+ return RSCCLASS_COMPLEX;
+}
+
+/*************************************************************************
+|*
+|* DestroyElements()
+|*
+|* Beschreibung
+|* Ersterstellung MM 26.04.91
+|* Letzte Aenderung MM 26.04.91
+|*
+*************************************************************************/
+void RscBaseCont::DestroyElements( RscBaseContInst * pClassData )
+{
+ sal_uInt32 i = 0;
+
+ if( pClassData->nEntries ){
+ for( i = 0; i < pClassData->nEntries; i++ ){
+ pClassData->pEntries[ i ].Destroy();
+ };
+ rtl_freeMemory( pClassData->pEntries );
+ pClassData->pEntries = NULL;
+ pClassData->nEntries = 0;
+ };
+}
+
+/*************************************************************************
+|*
+|* RscBaseCont::Create()
+|*
+|* Beschreibung
+|* Ersterstellung MM 26.04.91
+|* Letzte Aenderung MM 26.04.91
+|*
+*************************************************************************/
+RSCINST RscBaseCont::Create( RSCINST * pInst, const RSCINST & rDflt,
+ BOOL bOwnClass )
+{
+ sal_uInt32 i = 0;
+ RSCINST aInst;
+ RscBaseContInst * pClassData;
+
+ if( !pInst ){
+ aInst.pClass = this;
+ aInst.pData = (CLASS_DATA) rtl_allocateMemory( Size() );
+ }
+ else
+ aInst = *pInst;
+ if( !bOwnClass && rDflt.IsInst() )
+ bOwnClass = rDflt.pClass->InHierarchy( this );
+
+ RscTop::Create( &aInst, rDflt, bOwnClass );
+
+ pClassData = (RscBaseContInst *)(aInst.pData + nOffInstData);
+ pClassData->nEntries = 0;
+ pClassData->pEntries = NULL;
+ pClassData->bDflt = TRUE;
+
+ if( bOwnClass ){
+ RscBaseContInst * pDfltClassData;
+ RSCINST aDfltI;
+
+ pDfltClassData = (RscBaseContInst *)(rDflt.pData + nOffInstData);
+
+ if( 0 != pDfltClassData->nEntries ){
+ *pClassData = *pDfltClassData;
+ pClassData->pEntries =
+ (ENTRY_STRUCT *)rtl_allocateMemory( sizeof( ENTRY_STRUCT )
+ * pClassData->nEntries );
+ for( i = 0; i < pClassData->nEntries; i++ ){
+ pClassData->pEntries[ i ].Create();
+ pClassData->pEntries[ i ].aName =
+ pDfltClassData->pEntries[ i ].aName;
+ aDfltI = pDfltClassData->pEntries[ i ].aInst;
+ pClassData->pEntries[ i ].aInst =
+ aDfltI.pClass->Create( NULL, aDfltI );
+ };
+ };
+ }
+
+ return( aInst );
+}
+
+/*************************************************************************
+|*
+|* RscBaseCont::Destroy()
+|*
+|* Beschreibung
+|* Ersterstellung MM 25.05.91
+|* Letzte Aenderung MM 25.05.91
+|*
+*************************************************************************/
+void RscBaseCont::Destroy( const RSCINST & rInst ){
+ RscBaseContInst * pClassData;
+
+ RscTop::Destroy( rInst);
+
+ pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
+ DestroyElements( pClassData );
+}
+
+/*************************************************************************
+|*
+|* RscBaseCont::SearchEle()
+|*
+|* Beschreibung
+|* Ersterstellung MM 17.05.91
+|* Letzte Aenderung MM 17.05.91
+|*
+*************************************************************************/
+RSCINST RscBaseCont::SearchElePos( const RSCINST & rInst, const RscId & rEleName,
+ RscTop * pClass, sal_uInt32 nPos )
+{
+ sal_uInt32 i = 0;
+ RscBaseContInst * pClassData;
+
+ pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
+ if( !pClass )
+ pClass = pTypeClass;
+
+ if( rEleName.IsId() ){
+ for( i = nPos; i < pClassData->nEntries; i++ ){
+ if( pClassData->pEntries[ i ].aName == rEleName
+ && pClassData->pEntries[ i ].aInst.pClass == pClass )
+ {
+ return( pClassData->pEntries[ i ].aInst );
+ };
+ };
+ };
+ return RSCINST();
+}
+
+/*************************************************************************
+|*
+|* RscBaseCont::SearchEle()
+|*
+|* Beschreibung
+|* Ersterstellung MM 17.05.91
+|* Letzte Aenderung MM 17.05.91
+|*
+*************************************************************************/
+RSCINST RscBaseCont::SearchEle( const RSCINST & rInst, const RscId & rEleName,
+ RscTop * pClass )
+{
+ return SearchElePos( rInst, rEleName, pClass, 0 );
+}
+
+/*************************************************************************
+|*
+|* RscBaseCont::GetElement()
+|*
+|* Beschreibung
+|* Ersterstellung MM 26.04.91
+|* Letzte Aenderung MM 26.04.91
+|*
+*************************************************************************/
+ERRTYPE RscBaseCont::GetElement( const RSCINST & rInst, const RscId & rEleName,
+ RscTop * pCreateClass,
+ const RSCINST & rCreateInst, RSCINST * pGetInst )
+{
+ RscBaseContInst * pClassData;
+ RSCINST aTmpI;
+ ERRTYPE aError;
+
+ if( !bNoId && !rEleName.IsId() )
+ aError = WRN_CONT_NOID;
+ pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
+
+ if( pCreateClass ){
+ if( !pCreateClass->InHierarchy( pTypeClass ) ){
+ if( pTypeClass1 ){
+ if( !pCreateClass->InHierarchy( pTypeClass1 ) ){
+ // Falscher Typ
+ return ERR_CONT_INVALIDTYPE;
+ }
+ }
+ else{
+ // Falscher Typ
+ return ERR_CONT_INVALIDTYPE;
+ };
+ };
+ }
+ else
+ pCreateClass = pTypeClass;
+
+ pClassData->bDflt = FALSE;
+ if( !bNoId )
+ aTmpI = SearchEle( rInst, rEleName, pCreateClass );
+ // Eintrag gefunden
+ if( aTmpI.IsInst() ){
+ aError = WRN_CONT_DOUBLEID;
+ if( rCreateInst.IsInst() ){
+ aTmpI.pClass->Destroy( aTmpI );
+ aTmpI.pClass->Create( &aTmpI, rCreateInst );
+ };
+ }
+ else {
+ if( pClassData->pEntries ){
+ pClassData->pEntries =
+ (ENTRY_STRUCT *)rtl_reallocateMemory( pClassData->pEntries,
+ sizeof( ENTRY_STRUCT ) * (pClassData->nEntries +1) );
+ }
+ else {
+ pClassData->pEntries =
+ (ENTRY_STRUCT *)rtl_allocateMemory( sizeof( ENTRY_STRUCT )
+ * (pClassData->nEntries +1) );
+ };
+
+ pClassData->pEntries[ pClassData->nEntries ].Create();
+ pClassData->pEntries[ pClassData->nEntries ].aName = rEleName;
+
+ if( rCreateInst.IsInst() ){
+ // Instanz mit CreateInst-Daten initialisieren
+ pClassData->pEntries[ pClassData->nEntries ].aInst =
+ pCreateClass->Create( NULL, rCreateInst );
+ }
+ else {
+ pClassData->pEntries[ pClassData->nEntries ].aInst =
+ pCreateClass->Create( NULL, RSCINST() );
+ };
+
+ pClassData->nEntries++;
+ aTmpI = pClassData->pEntries[ pClassData->nEntries -1 ].aInst;
+ }
+
+ *pGetInst = aTmpI;
+ return aError;
+}
+
+/*************************************************************************
+|*
+|* RscBaseCont::GetCount()
+|*
+|* Beschreibung
+|* Ersterstellung MM 08.05.91
+|* Letzte Aenderung MM 08.05.91
+|*
+*************************************************************************/
+sal_uInt32 RscBaseCont::GetCount( const RSCINST & rInst ){
+ RscBaseContInst * pClassData;
+
+ pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
+ return( pClassData->nEntries );
+}
+
+/*************************************************************************
+|*
+|* RscBaseCont::GetPosEle()
+|*
+|* Beschreibung
+|* Ersterstellung MM 08.05.91
+|* Letzte Aenderung MM 08.05.91
+|*
+*************************************************************************/
+RSCINST RscBaseCont::GetPosEle( const RSCINST & rInst, sal_uInt32 nPos ){
+ RscBaseContInst * pClassData;
+
+ pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
+
+ if( nPos < pClassData->nEntries )
+ return( pClassData->pEntries[ nPos ].aInst );
+ return RSCINST();
+}
+
+/*************************************************************************
+|*
+|* RscBaseCont::MovePosEle()
+|*
+|* Beschreibung
+|* Ersterstellung MM 23.10.91
+|* Letzte Aenderung MM 23.10.91
+|*
+*************************************************************************/
+ERRTYPE RscBaseCont::MovePosEle( const RSCINST & rInst, sal_uInt32 nDestPos,
+ sal_uInt32 nSourcePos )
+{
+ ERRTYPE aError;
+ RscBaseContInst * pClassData;
+
+ pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
+
+ if( (nDestPos < pClassData->nEntries) && (nSourcePos < pClassData->nEntries) ){
+ ENTRY_STRUCT aEntry;
+ int nInc = 1;
+ sal_uInt32 i = 0;
+
+ // Quelle Merken
+ aEntry = pClassData->pEntries[ nSourcePos ];
+ // Richtung der for-Schleife bestimmen
+ if( nDestPos < nSourcePos )
+ nInc = -1;
+
+ for( i = nSourcePos; i != nDestPos; i += nInc )
+ pClassData->pEntries[ i ] = pClassData->pEntries[ i + nInc ];
+
+ // Zuweisung Quelle auf Ziel
+ pClassData->pEntries[ nDestPos ] = aEntry;
+ }
+ else
+ aError = ERR_RSCCONT;
+ return aError;
+}
+
+/*************************************************************************
+|*
+|* RscBaseCont::SetPosRscId()
+|*
+|* Beschreibung
+|* Ersterstellung MM 30.09.91
+|* Letzte Aenderung MM 30.09.91
+|*
+*************************************************************************/
+ERRTYPE RscBaseCont::SetPosRscId( const RSCINST & rInst, sal_uInt32 nPos,
+ const RscId & rId ){
+ RscBaseContInst * pClassData;
+ RSCINST aTmpI;
+ ERRTYPE aError;
+
+ pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
+
+ if( nPos < pClassData->nEntries ){
+ if( ! (rId == pClassData->pEntries[ nPos ].aName) )
+ aTmpI = SearchEle( rInst, rId,
+ pClassData->pEntries[ nPos ].aInst.pClass );
+ if( !aTmpI.IsInst() )
+ pClassData->pEntries[ nPos ].aName = rId;
+ else
+ aError = ERR_RSCCONT;
+ }
+ else
+ aError = ERR_RSCCONT;
+ return( aError );
+}
+
+/*************************************************************************
+|*
+|* RscBaseCont::GetInfoEle()
+|*
+|* Beschreibung
+|* Ersterstellung MM 08.05.91
+|* Letzte Aenderung MM 08.05.91
+|*
+*************************************************************************/
+SUBINFO_STRUCT RscBaseCont::GetInfoEle( const RSCINST & rInst, sal_uInt32 nPos ){
+ RscBaseContInst * pClassData;
+ SUBINFO_STRUCT aInfo;
+
+ pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
+
+ if( nPos < pClassData->nEntries ){
+ aInfo.aId = pClassData->pEntries[ nPos ].aName;
+ aInfo.nPos = nPos;
+ aInfo.pClass = pClassData->pEntries[ nPos ].aInst.pClass;
+ }
+ return( aInfo );
+}
+
+/*************************************************************************
+|*
+|* RscBaseCont::SetString()
+|*
+|* Beschreibung
+|* Ersterstellung MM 29.04.91
+|* Letzte Aenderung MM 29.04.91
+|*
+*************************************************************************/
+ERRTYPE RscBaseCont::SetString( const RSCINST & rInst, const char * pStr )
+{
+ RscBaseContInst * pClassData;
+ RSCINST aTmpI;
+ ERRTYPE aError;
+ char *pTmpStr;
+
+ pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
+
+//?B 040991
+//?W 040991 sonst Endlosrekursion moeglich
+if( RSC_NOTYPE == pTypeClass->GetTypId() ){
+ aError = GetElement( rInst, RscId(), pTypeClass, RSCINST(), &aTmpI );
+ aError = aTmpI.pClass->GetString( aTmpI, &pTmpStr );
+ if( aError.IsOk() )
+ aError = aTmpI.pClass->SetString( aTmpI, pStr );
+ else {
+ aError.Clear();
+ DeletePos( rInst, pClassData->nEntries -1 );
+ aError = GetElement( rInst, RscId(), pTypeClass1, RSCINST(), &aTmpI );
+ aError = aTmpI.pClass->GetString( aTmpI, &pTmpStr );
+ if( aError.IsOk() )
+ aError = aTmpI.pClass->SetString( aTmpI, pStr );
+ }
+ if( aError.IsError() )
+ DeletePos( rInst, pClassData->nEntries -1 );
+}
+else
+ aError = ERR_UNKNOWN_METHOD;
+
+ return( aError );
+}
+
+/*************************************************************************
+|*
+|* RscBaseCont::SetNumber()
+|*
+|* Beschreibung
+|* Ersterstellung MM 12.06.91
+|* Letzte Aenderung MM 12.06.91
+|*
+*************************************************************************/
+ERRTYPE RscBaseCont::SetNumber( const RSCINST & rInst, INT32 lValue ){
+ RscBaseContInst * pClassData;
+ RSCINST aTmpI;
+ ERRTYPE aError;
+ INT32 lNumber;
+
+ pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
+
+//?B 040991
+//?W 040991 sonst Endlosrekursion moeglich
+if( RSC_NOTYPE == pTypeClass->GetTypId() ){
+ aError = GetElement( rInst, RscId(), pTypeClass, RSCINST(), &aTmpI );
+ aError = aTmpI.pClass->GetNumber( aTmpI, &lNumber );
+ if( aError.IsOk() )
+ aError = aTmpI.pClass->SetNumber( aTmpI, lValue );
+ else {
+ aError.Clear();
+ DeletePos( rInst, pClassData->nEntries -1 );
+ aError = GetElement( rInst, RscId(), pTypeClass1, RSCINST(), &aTmpI );
+ aError = aTmpI.pClass->GetNumber( aTmpI, &lNumber );
+ if( aError.IsOk() )
+ aError = aTmpI.pClass->SetNumber( aTmpI, lValue );
+ }
+ if( aError.IsError() )
+ DeletePos( rInst, pClassData->nEntries -1 );
+}
+else
+ aError = ERR_UNKNOWN_METHOD;
+
+ return( aError );
+}
+
+//==================================================================
+ERRTYPE RscBaseCont::SetBool
+(
+ const RSCINST & rInst,
+ BOOL bValue
+)
+{
+ RscBaseContInst * pClassData;
+ RSCINST aTmpI;
+ ERRTYPE aError;
+ BOOL bBool;
+
+ pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
+
+//?B 040991
+//?W 040991 sonst Endlosrekursion moeglich
+if( RSC_NOTYPE == pTypeClass->GetTypId() )
+{
+ aError = GetElement( rInst, RscId(), pTypeClass, RSCINST(), &aTmpI );
+ aError = aTmpI.pClass->GetBool( aTmpI, &bBool );
+ if( aError.IsOk() )
+ aError = aTmpI.pClass->SetBool( aTmpI, bValue );
+ else {
+ aError.Clear();
+ DeletePos( rInst, pClassData->nEntries -1 );
+ aError = GetElement( rInst, RscId(), pTypeClass1, RSCINST(), &aTmpI );
+ aError = aTmpI.pClass->GetBool( aTmpI, &bBool );
+ if( aError.IsOk() )
+ aError = aTmpI.pClass->SetBool( aTmpI, bValue );
+ }
+ if( aError.IsError() )
+ DeletePos( rInst, pClassData->nEntries -1 );
+}
+else
+ aError = ERR_UNKNOWN_METHOD;
+
+ return( aError );
+}
+
+//==================================================================
+ERRTYPE RscBaseCont::SetConst
+(
+ const RSCINST & rInst,
+ Atom nValueId,
+ INT32 lValue
+)
+{
+ RscBaseContInst * pClassData;
+ RSCINST aTmpI;
+ ERRTYPE aError;
+ Atom nConst;
+
+ pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
+
+//?B 040991
+//?W 040991 sonst Endlosrekursion moeglich
+if( RSC_NOTYPE == pTypeClass->GetTypId() ){
+ aError = GetElement( rInst, RscId(), pTypeClass, RSCINST(), &aTmpI );
+ aError = aTmpI.pClass->GetConst( aTmpI, &nConst );
+ if( aError.IsOk() )
+ aError = aTmpI.pClass->SetConst( aTmpI, nValueId, lValue );
+ else {
+ aError.Clear();
+ DeletePos( rInst, pClassData->nEntries -1 );
+ aError = GetElement( rInst, RscId(), pTypeClass1, RSCINST(), &aTmpI );
+ aError = aTmpI.pClass->GetConst( aTmpI, &nConst );
+ if( aError.IsOk() )
+ aError = aTmpI.pClass->SetConst( aTmpI, nValueId, lValue );
+ }
+ if( aError.IsError() )
+ DeletePos( rInst, pClassData->nEntries -1 );
+}
+else
+ aError = ERR_UNKNOWN_METHOD;
+
+ return( aError );
+}
+
+/*************************************************************************
+|*
+|* RscBaseCont::SetRef()
+|*
+|* Beschreibung
+|* Ersterstellung MM 02.12.91
+|* Letzte Aenderung MM 02.12.91
+|*
+*************************************************************************/
+ERRTYPE RscBaseCont::SetRef( const RSCINST & rInst, const RscId & rRefId ){
+ RscBaseContInst * pClassData;
+ RSCINST aTmpI;
+ ERRTYPE aError;
+ RscId aId;
+
+ pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
+
+//?B 040991
+//?W 040991 sonst Endlosrekursion moeglich
+if( RSC_NOTYPE == pTypeClass->GetTypId() ){
+ aError = GetElement( rInst, RscId(), pTypeClass, RSCINST(), &aTmpI );
+ aError = aTmpI.pClass->GetRef( aTmpI, &aId );
+ if( aError.IsOk() )
+ aError = aTmpI.pClass->SetRef( aTmpI, rRefId );
+ else {
+ aError.Clear();
+ DeletePos( rInst, pClassData->nEntries -1 );
+ aError = GetElement( rInst, RscId(), pTypeClass1, RSCINST(), &aTmpI );
+ aError = aTmpI.pClass->GetRef( aTmpI, &aId );
+ if( aError.IsOk() )
+ aError = aTmpI.pClass->SetNumber( aTmpI, rRefId );
+ }
+ if( aError.IsError() )
+ DeletePos( rInst, pClassData->nEntries -1 );
+}
+else
+ aError = ERR_UNKNOWN_METHOD;
+
+ return( aError );
+}
+
+/*************************************************************************
+|*
+|* RscBaseCont::IsConsistent()
+|*
+|* Beschreibung
+|* Ersterstellung MM 23.09.91
+|* Letzte Aenderung MM 23.09.91
+|*
+*************************************************************************/
+BOOL RscBaseCont::IsConsistent( const RSCINST & rInst, RscInconsList * pList ){
+ sal_uInt32 i = 0;
+ RscBaseContInst * pClassData;
+ BOOL bRet;
+
+ bRet = RscTop::IsConsistent( rInst, pList );
+
+ pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
+
+ // auf doppelten Id Testen und Reihenfolge beibehalten
+ // Komplexitaet = n^2 / 2
+ for( i = 0; i < pClassData->nEntries; i++ ){
+ if( !bNoId ){
+ if( (INT32)pClassData->pEntries[ i ].aName > 0x7FFF
+ || (INT32)pClassData->pEntries[ i ].aName < 1 ){
+ bRet = FALSE;
+ if( pList )
+ pList->Insert( new RscInconsistent(
+ pClassData->pEntries[ i ].aName,
+ pClassData->pEntries[ i ].aName ) );
+ }
+ else if( SearchElePos( rInst, pClassData->pEntries[ i ].aName,
+ pClassData->pEntries[ i ].aInst.pClass, i +1 ).IsInst() )
+ {
+ bRet = FALSE;
+ if( pList )
+ pList->Insert( new RscInconsistent(
+ pClassData->pEntries[ i ].aName,
+ pClassData->pEntries[ i +1 ].aName ) );
+ };
+ }
+ if( ! pClassData->pEntries[ i ].aInst.pClass->
+ IsConsistent( pClassData->pEntries[ i ].aInst, pList ) )
+ bRet = FALSE;
+ };
+
+ return( bRet );
+}
+
+/*************************************************************************
+|*
+|* RscBaseCont::SetToDefault()
+|*
+|* Beschreibung
+|* Ersterstellung MM 25.04.91
+|* Letzte Aenderung MM 25.04.91
+|*
+*************************************************************************/
+void RscBaseCont::SetToDefault( const RSCINST & rInst )
+{
+ sal_uInt32 i = 0;
+ RscBaseContInst * pClassData;
+
+ pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
+
+ for( i = 0; i < pClassData->nEntries; i++ )
+ {
+ pClassData->pEntries[ i ].aInst.pClass->
+ SetToDefault( pClassData->pEntries[ i ].aInst );
+ };
+
+ RscTop::SetToDefault( rInst );
+}
+
+/*************************************************************************
+|*
+|* RscBaseCont::IsDefault()
+|*
+|* Beschreibung
+|* Ersterstellung MM 25.04.91
+|* Letzte Aenderung MM 25.04.91
+|*
+*************************************************************************/
+BOOL RscBaseCont::IsDefault( const RSCINST & rInst ){
+ sal_uInt32 i = 0;
+ RscBaseContInst * pClassData;
+
+ pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
+
+ if( !pClassData->bDflt )
+ return FALSE;
+
+ for( i = 0; i < pClassData->nEntries; i++ ){
+ if( ! pClassData->pEntries[ i ].aInst.pClass->
+ IsDefault( pClassData->pEntries[ i ].aInst ) )
+ {
+ return( FALSE );
+ };
+ };
+
+ return( RscTop::IsDefault( rInst ) );
+}
+
+/*************************************************************************
+|*
+|* RscBaseCont::IsValueDefault()
+|*
+|* Beschreibung
+|* Ersterstellung MM 25.04.91
+|* Letzte Aenderung MM 15.01.92
+|*
+*************************************************************************/
+BOOL RscBaseCont::IsValueDefault( const RSCINST & rInst, CLASS_DATA pDef )
+{
+ RscBaseContInst * pClassData;
+
+ if( !RscTop::IsValueDefault( rInst, pDef ) )
+ return FALSE;
+
+ pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
+
+ if( pClassData->nEntries )
+ return FALSE;
+ else
+ return TRUE;
+}
+
+/*************************************************************************
+|*
+|* RscBaseCont::Delete()
+|*
+|* Beschreibung
+|* Ersterstellung MM 12.06.91
+|* Letzte Aenderung MM 12.06.91
+|*
+*************************************************************************/
+void RscBaseCont::Delete( const RSCINST & rInst, RscTop * pClass,
+ const RscId & rId )
+{
+ sal_uInt32 i = 0;
+ RscBaseContInst * pClassData;
+
+ pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
+ if( !pClass )
+ pClass = pTypeClass;
+
+ for( i = 0; i < pClassData->nEntries; i++ ){
+ if( pClassData->pEntries[ i ].aName == rId )
+ if( pClassData->pEntries[ i ].aInst.pClass == pClass || !pClass ){
+ DeletePos( rInst, i );
+ return;
+ };
+ };
+
+}
+
+/*************************************************************************
+|*
+|* RscBaseCont::DeletePos()
+|*
+|* Beschreibung
+|* Ersterstellung MM 12.06.91
+|* Letzte Aenderung MM 12.06.91
+|*
+*************************************************************************/
+void RscBaseCont::DeletePos( const RSCINST & rInst, sal_uInt32 nPos ){
+ RscBaseContInst * pClassData;
+ sal_uInt32 i = 0;
+
+ pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
+
+ if( nPos < pClassData->nEntries ){
+ if( 1 == pClassData->nEntries )
+ DestroyElements( pClassData );
+ else{
+ pClassData->pEntries[ nPos ].Destroy();
+ pClassData->nEntries--;
+ for( i = nPos; i < pClassData->nEntries; i++ )
+ pClassData->pEntries[ i ] = pClassData->pEntries[ i + 1 ];
+ };
+ };
+}
+
+/*************************************************************************
+|*
+|* RscBaseCont::ContWriteSrc()
+|*
+|* Beschreibung
+|* Ersterstellung MM 26.04.91
+|* Letzte Aenderung MM 26.04.91
+|*
+*************************************************************************/
+void RscBaseCont::ContWriteSrc( const RSCINST & rInst, FILE * fOutput,
+ RscTypCont * pTC, sal_uInt32 nTab,
+ const char * pVarName )
+{
+ sal_uInt32 i = 0, t = 0;
+ RscBaseContInst * pClassData;
+
+ pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
+
+ for( i = 0; i < pClassData->nEntries; i++ )
+ {
+ for( t = 0; t < nTab; t++ )
+ fputc( '\t', fOutput );
+ pClassData->pEntries[ i ].aInst.pClass->
+ WriteSrcHeader( pClassData->pEntries[ i ].aInst,
+ fOutput, pTC, nTab,
+ pClassData->pEntries[ i ].aName, pVarName );
+ fprintf( fOutput, ";\n" );
+ };
+}
+
+/*************************************************************************
+|*
+|* RscBaseCont::ContWriteRc()
+|*
+|* Beschreibung
+|* Ersterstellung MM 26.04.91
+|* Letzte Aenderung MM 26.04.91
+|*
+*************************************************************************/
+ERRTYPE RscBaseCont::ContWriteRc( const RSCINST & rInst, RscWriteRc & rMem,
+ RscTypCont * pTC, sal_uInt32 nDeep, BOOL bExtra )
+{
+ sal_uInt32 i = 0;
+ RscBaseContInst * pClassData;
+ ERRTYPE aError;
+
+ if( bExtra || bNoId )
+ { // Nur Subresourcen schreiben, wenn bExtra == TRUE
+ pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
+
+ for( i = 0; i < pClassData->nEntries && aError.IsOk(); i++ ){
+ aError = pClassData->pEntries[ i ].aInst.pClass->
+ WriteRcHeader( pClassData->pEntries[ i ].aInst,
+ rMem, pTC,
+ pClassData->pEntries[ i ].aName,
+ nDeep, bExtra );
+ }
+ }
+
+ return( aError );
+}
+
+//==================================================================
+void RscBaseCont::ContWriteRcAccess
+(
+ FILE * fOutput,
+ RscTypCont * pTC,
+ const char * pName,
+ BOOL bWriteSize
+)
+{
+ if( (bNoId || bWriteSize) && !pTypeClass1 )
+ {
+ fprintf( fOutput, "\t\tsal_uInt32 nItems = *(sal_uInt32 *)(pResData+nOffset) );\n" );
+ fprintf( fOutput, "\t\tnOffset += sizeof( sal_uInt32 );\n" );
+
+ fprintf( fOutput, "\t\t// Items hinzufuegen\n" );
+ fprintf( fOutput, "\t\tfor( sal_uInt32 i = 0; i < nItems; i++ )\n" );
+ fprintf( fOutput, "\t\t{\n" );
+ pTypeClass->WriteRcAccess( fOutput, pTC, "Item" );
+ fprintf( fOutput, "\t\t}\n" );
+ }
+ else
+ {
+ fprintf( fOutput, "\t\tSet%s( %s ", pName, pHS->getString( GetId() ).getStr() );
+ fprintf( fOutput, "%s ", aCallPar2.GetBuffer() );
+ fprintf( fOutput, "ResId( (RSHEADER_TYPE*)(pResData+nOffset) ) ) );\n" );
+ fprintf( fOutput, "\t\tnOffset += GetObjSizeRes( (RSHEADER_TYPE*)(pResData+nOffset) );\n" );
+ }
+}
+
+
+/*************************************************************************
+|*
+|* RscBaseCont::WriteSrc()
+|*
+|* Beschreibung
+|* Ersterstellung MM 26.04.91
+|* Letzte Aenderung MM 26.04.91
+|*
+*************************************************************************/
+void RscBaseCont::WriteSrc( const RSCINST & rInst, FILE * fOutput,
+ RscTypCont * pTC, sal_uInt32 nTab,
+ const char * pVarName )
+{
+ RscTop::WriteSrc( rInst, fOutput, pTC, nTab, pVarName );
+ ContWriteSrc( rInst, fOutput, pTC, nTab, pVarName );
+}
+
+/*************************************************************************
+|*
+|* RscBaseCont::WriteRc()
+|*
+|* Beschreibung
+|* Ersterstellung MM 26.04.91
+|* Letzte Aenderung MM 26.04.91
+|*
+*************************************************************************/
+ERRTYPE RscBaseCont::WriteRc( const RSCINST & rInst, RscWriteRc & rMem,
+ RscTypCont * pTC, sal_uInt32 nDeep, BOOL bExtra )
+{
+ ERRTYPE aError;
+
+ aError = RscTop::WriteRc( rInst, rMem, pTC, nDeep, bExtra );
+ if( aError.IsOk() )
+ aError = ContWriteRc( rInst, rMem, pTC, nDeep, bExtra );
+
+ return( aError );
+}
+
+/*************************************************************************
+|*
+|* RscBaseCont::WriteHxx()
+|*
+|* Beschreibung
+|* Ersterstellung MM 26.04.91
+|* Letzte Aenderung MM 26.04.91
+|*
+*************************************************************************/
+ERRTYPE RscBaseCont::WriteHxx( const RSCINST & rInst, FILE * fOutput,
+ RscTypCont * pTC, const RscId & rRscId )
+{
+ sal_uInt32 i = 0;
+ RscBaseContInst * pClassData;
+ ERRTYPE aError;
+
+ aError = RscTop::WriteHxx( rInst, fOutput, pTC, rRscId );
+
+ pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
+
+ for( i = 0; i < pClassData->nEntries && aError.IsOk(); i++ )
+ {
+ if( pClassData->pEntries[ i ].aName.IsId()
+ && pClassData->pEntries[ i ].aInst.pClass->IsCodeWriteable() )
+ {
+ aError = pClassData->pEntries[ i ].aInst.pClass->
+ WriteHxx( pClassData->pEntries[ i ].aInst,
+ fOutput, pTC,
+ pClassData->pEntries[ i ].aName );
+ }
+ };
+
+ return( aError );
+}
+
+/*************************************************************************
+|*
+|* RscBaseCont::WriteCxx()
+|*
+|* Beschreibung
+|* Ersterstellung MM 26.04.91
+|* Letzte Aenderung MM 26.04.91
+|*
+*************************************************************************/
+ERRTYPE RscBaseCont::WriteCxx( const RSCINST & rInst, FILE * fOutput,
+ RscTypCont * pTC, const RscId & rRscId )
+{
+ sal_uInt32 i = 0;
+ RscBaseContInst * pClassData;
+ ERRTYPE aError;
+
+ aError = RscTop::WriteCxx( rInst, fOutput, pTC, rRscId );
+
+ pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
+
+ for( i = 0; i < pClassData->nEntries && aError.IsOk(); i++ )
+ {
+ if( pClassData->pEntries[ i ].aName.IsId()
+ && pClassData->pEntries[ i ].aInst.pClass->IsCodeWriteable() )
+ {
+ aError = pClassData->pEntries[ i ].aInst.pClass->
+ WriteCxx( pClassData->pEntries[ i ].aInst,
+ fOutput, pTC,
+ pClassData->pEntries[ i ].aName );
+ }
+ };
+
+ return( aError );
+}
+
+/*************** R s c C o n t W r i t e S r c ***************************/
+/*************************************************************************
+|*
+|* RscContWriteSrc::RscContWriteSrc()
+|*
+|* Beschreibung
+|* Ersterstellung MM 08.05.91
+|* Letzte Aenderung MM 08.05.91
+|*
+*************************************************************************/
+RscContWriteSrc::RscContWriteSrc( Atom nId, sal_uInt32 nTypeId,
+ RscTop * pSuper, BOOL bNoIdent )
+ : RscBaseCont( nId, nTypeId, pSuper, bNoIdent )
+{}
+
+/*************************************************************************
+|*
+|* RscContWriteSrc::WriteSrc()
+|*
+|* Beschreibung
+|* Ersterstellung MM 08.05.91
+|* Letzte Aenderung MM 08.05.91
+|*
+*************************************************************************/
+void RscContWriteSrc::WriteSrc( const RSCINST & rInst, FILE * fOutput,
+ RscTypCont * pTC, sal_uInt32 nTab,
+ const char * pVarName )
+{
+ sal_uInt32 i;
+
+ RscTop::WriteSrc( rInst, fOutput, pTC, nTab, pVarName );
+
+ fprintf( fOutput, "\n" );
+ for( i = 0; i < nTab; i++ )
+ fputc( '\t', fOutput );
+ fprintf( fOutput, "{\n" );
+
+ ContWriteSrc( rInst, fOutput, pTC, nTab +1, pVarName );
+
+ for( i = 0; i < nTab; i++ )
+ fputc( '\t', fOutput );
+ fprintf( fOutput, "}" );
+}
+
+/*************** R s c C o n t *******************************************/
+/*************************************************************************
+|*
+|* RscCont::RscCont()
+|*
+|* Beschreibung
+|* Ersterstellung MM 08.05.91
+|* Letzte Aenderung MM 08.05.91
+|*
+*************************************************************************/
+RscCont::RscCont( Atom nId, sal_uInt32 nTypeId, RscTop * pSuper, BOOL bNoIdent )
+ : RscContWriteSrc( nId, nTypeId, pSuper, bNoIdent )
+{}
+
+/*************************************************************************
+|*
+|* RscCont::WriteRc()
+|*
+|* Beschreibung
+|* Ersterstellung MM 08.05.91
+|* Letzte Aenderung MM 08.05.91
+|*
+*************************************************************************/
+ERRTYPE RscCont::WriteRc( const RSCINST & rInst, RscWriteRc & rMem,
+ RscTypCont * pTC, sal_uInt32 nDeep, BOOL bExtra )
+{
+ RscBaseContInst * pClassData;
+ ERRTYPE aError;
+
+ aError = RscTop::WriteRc( rInst, rMem, pTC, nDeep, bExtra );
+
+ pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
+
+ rMem.Put( pClassData->nEntries );
+
+ if( aError.IsOk() )
+ aError = ContWriteRc( rInst, rMem, pTC, nDeep, bExtra );
+
+ return aError;
+}
+
+//==================================================================
+void RscCont::WriteRcAccess
+(
+ FILE * fOutput,
+ RscTypCont * pTC,
+ const char * pName
+)
+{
+ ContWriteRcAccess( fOutput, pTC, pName, TRUE );
+}
+
+/*************************************************************************
+|*
+|* RscContExtraData::RscContExtraData()
+|*
+|* Beschreibung
+|* Ersterstellung MM 08.05.91
+|* Letzte Aenderung MM 08.05.91
+|*
+*************************************************************************/
+RscContExtraData::RscContExtraData( Atom nId, sal_uInt32 nTypeId,
+ RscTop * pSuper, BOOL bNoIdent )
+ : RscContWriteSrc( nId, nTypeId, pSuper, bNoIdent )
+{}
+
+/*************************************************************************
+|*
+|* RscContExtraData::WriteRc()
+|*
+|* Beschreibung
+|* Ersterstellung MM 08.05.91
+|* Letzte Aenderung MM 08.05.91
+|*
+*************************************************************************/
+ERRTYPE RscContExtraData::WriteRc( const RSCINST & rInst, RscWriteRc & rMem,
+ RscTypCont * pTC, sal_uInt32 nDeep, BOOL bExtra )
+{
+ ERRTYPE aError;
+
+ if( bExtra )
+ aError = RscContWriteSrc::WriteRc( rInst, rMem, pTC, nDeep, bExtra );
+ else
+ aError = RscTop::WriteRc( rInst, rMem, pTC, nDeep, bExtra );
+
+ return aError;
+}