summaryrefslogtreecommitdiff
path: root/rsc/source/res/rscmgr.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'rsc/source/res/rscmgr.cxx')
-rw-r--r--rsc/source/res/rscmgr.cxx717
1 files changed, 717 insertions, 0 deletions
diff --git a/rsc/source/res/rscmgr.cxx b/rsc/source/res/rscmgr.cxx
new file mode 100644
index 000000000000..3e3d29372fe7
--- /dev/null
+++ b/rsc/source/res/rscmgr.cxx
@@ -0,0 +1,717 @@
+/*************************************************************************
+ *
+ * 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>
+#include <ctype.h>
+
+// Programmabhaengige Includes.
+#include <rscmgr.hxx>
+#include <rscdb.hxx>
+
+/****************** C O D E **********************************************/
+/****************** R s c M g r ******************************************/
+/*************************************************************************
+|*
+|* RscMgr::RscMgr()
+|*
+|* Beschreibung
+|* Ersterstellung MM 26.04.91
+|* Letzte Aenderung MM 26.04.91
+|*
+*************************************************************************/
+RscMgr::RscMgr( Atom nId, sal_uInt32 nTypeId, RscTop * pSuperCl )
+ : RscClass( nId, nTypeId, pSuperCl )
+{
+}
+
+/*************************************************************************
+|*
+|* RscMgr::Size()
+|*
+|* Beschreibung
+|* Ersterstellung MM 26.04.91
+|* Letzte Aenderung MM 26.04.91
+|*
+*************************************************************************/
+sal_uInt32 RscMgr::Size()
+{
+ return RscClass::Size() + ALIGNED_SIZE( sizeof( RscMgrInst ) );
+}
+
+/*************************************************************************
+|*
+|* RscMgr::Create()
+|*
+|* Beschreibung
+|* Ersterstellung MM 03.04.91
+|* Letzte Aenderung MM 03.04.91
+|*
+*************************************************************************/
+RSCINST RscMgr::Create( RSCINST * pInst, const RSCINST & rDflt, BOOL bOwnClass ){
+ RSCINST aInst;
+ RscMgrInst * 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 );
+
+ RscClass::Create( &aInst, rDflt, bOwnClass );
+
+ pClassData = (RscMgrInst *)(aInst.pData + RscClass::Size() );
+ pClassData->Create();
+
+ if( bOwnClass ){
+ RscMgrInst * pDfltData = (RscMgrInst *)(rDflt.pData + RscClass::Size());
+ *pClassData = *pDfltData;
+ };
+
+ return( aInst );
+}
+
+/*************************************************************************
+|*
+|* RscMgr::Destroy()
+|*
+|* Beschreibung
+|* Ersterstellung MM 21.06.91
+|* Letzte Aenderung MM 21.06.91
+|*
+*************************************************************************/
+void RscMgr::Destroy( const RSCINST & rInst ){
+ RscMgrInst * pClassData;
+
+ RscClass::Destroy( rInst );
+
+ pClassData = (RscMgrInst *)(rInst.pData + RscClass::Size());
+ pClassData->Destroy();
+}
+
+/*************************************************************************
+|*
+|* RscMgr::SetToDefault()
+|*
+|* Beschreibung
+|* Ersterstellung MM 12.06.91
+|* Letzte Aenderung MM 12.06.91
+|*
+*************************************************************************/
+void RscMgr::SetToDefault( const RSCINST & rInst )
+{
+ RscMgrInst * pClassData;
+
+ pClassData = (RscMgrInst *)(rInst.pData + RscClass::Size());
+ pClassData->bDflt = TRUE;
+
+ RscClass::SetToDefault( rInst );
+}
+
+/*************************************************************************
+|*
+|* RscMgr::IsDefault()
+|*
+|* Beschreibung
+|* Ersterstellung MM 12.06.91
+|* Letzte Aenderung MM 12.06.91
+|*
+*************************************************************************/
+BOOL RscMgr::IsDefault( const RSCINST & rInst ){
+ RscMgrInst * pClassData;
+
+ pClassData = (RscMgrInst *)(rInst.pData + RscClass::Size());
+ if( !pClassData->bDflt )
+ return( FALSE );
+
+ return( RscClass::IsDefault( rInst ) );
+}
+
+/*************************************************************************
+|*
+|* RscMgr::IsValueDefault()
+|*
+|* Beschreibung
+|* Ersterstellung MM 12.06.91
+|* Letzte Aenderung MM 12.06.91
+|*
+*************************************************************************/
+BOOL RscMgr::IsValueDefault( const RSCINST & rInst, CLASS_DATA pDef ){
+ RscMgrInst * pClassData;
+ RscMgrInst * pDfltData;
+
+ if( !RscClass::IsValueDefault( rInst, pDef ) )
+ return FALSE;
+
+ if( pDef ){
+ pClassData = (RscMgrInst *)(rInst.pData + RscClass::Size());
+ pDfltData = (RscMgrInst *)(pDef + RscClass::Size());
+
+ if( !pClassData->aRefId.IsId() && !pDfltData->aRefId.IsId() ){
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+
+/*************************************************************************
+|*
+|* RscMgr::WriteSrcHeader()
+|*
+|* Beschreibung
+|* Ersterstellung MM 08.04.91
+|* Letzte Aenderung MM 08.04.91
+|*
+*************************************************************************/
+void RscMgr::WriteSrcHeader( const RSCINST & rInst, FILE * fOutput,
+ RscTypCont * pTC, sal_uInt32 nTab,
+ const RscId & rId, const char * pVarName )
+{
+ RscMgrInst * pClassData;
+ sal_uInt32 i;
+
+ pClassData = (RscMgrInst *)(rInst.pData + RscClass::Size());
+
+ fprintf( fOutput, "%s %s",
+ pHS->getString( rInst.pClass->GetId() ).getStr(),
+ (rId.GetName()).GetBuffer() );
+ if( pClassData->aRefId.IsId() )
+ fprintf( fOutput, ",%s", pClassData->aRefId.GetName().GetBuffer() );
+ else
+ {
+ fprintf( fOutput, "\n" );
+ for( i = 0; i < nTab; i++ )
+ fputc( '\t', fOutput );
+ fprintf( fOutput, "{\n" );
+
+ rInst.pClass->WriteSrc( rInst, fOutput, pTC, nTab +1, pVarName );
+
+ RscClass::WriteSrc( rInst, fOutput, pTC, nTab +1, pVarName);
+
+ for( i = 0; i < nTab; i++ )
+ fputc( '\t', fOutput );
+ fprintf( fOutput, "}" );
+ }
+}
+
+/*************************************************************************
+|*
+|* RscMgr::WriteSrc()
+|*
+|* Beschreibung
+|* Ersterstellung MM 08.04.91
+|* Letzte Aenderung MM 08.04.91
+|*
+*************************************************************************/
+void RscMgr::WriteSrc( const RSCINST &, FILE *, RscTypCont *, sal_uInt32,
+ const char * )
+{
+}
+
+/*************************************************************************
+|*
+|* RscMgr::WriteRcHeader()
+|*
+|* Beschreibung
+|* Ersterstellung MM 15.04.91
+|* Letzte Aenderung MM 15.04.91
+|*
+*************************************************************************/
+ERRTYPE RscMgr::WriteRcHeader( const RSCINST & rInst, RscWriteRc & rMem,
+ RscTypCont * pTC, const RscId &rId,
+ sal_uInt32 nDeep, BOOL bExtra )
+{
+ RscMgrInst * pClassData;
+ ERRTYPE aError;
+ ObjNode * pObjNode = NULL;
+
+ pClassData = (RscMgrInst *)(rInst.pData + RscClass::Size());
+
+ if( pClassData->aRefId.IsId() )
+ {
+ //Erhoehen und abfragen um Endlosrekusion zu vermeiden
+ nDeep++;
+ if( nDeep > nRefDeep )
+ aError = ERR_REFTODEEP;
+ else
+ pObjNode = rInst.pClass->GetRefClass()->
+ GetObjNode( pClassData->aRefId );
+ if( !pObjNode && pTC )
+ {
+ ByteString aMsg( pHS->getString( rInst.pClass->GetId() ).getStr() );
+ aMsg += ' ';
+ aMsg += pClassData->aRefId.GetName();
+ aError = WRN_MGR_REFNOTFOUND;
+ pTC->pEH->Error( aError, rInst.pClass, rId, aMsg.GetBuffer() );
+ }
+ }
+
+ if( aError.IsOk() )
+ {
+ if( pObjNode )
+ {
+ RSCINST aRefI;
+ RscTop * pTmpRefClass = rInst.pClass->GetRefClass();
+
+ aRefI = RSCINST( rInst.pClass, pObjNode->GetRscObj() );
+ if( pTmpRefClass == rInst.pClass )
+ {
+ aError = aRefI.pClass->WriteRcHeader( aRefI, rMem, pTC,
+ rId, nDeep, bExtra );
+ }
+ else
+ {
+ RSCINST aRefInst = rInst.pClass->Create( NULL, aRefI );
+ aError = aRefI.pClass->WriteRcHeader( aRefInst, rMem, pTC,
+ rId, nDeep, bExtra );
+ pTmpRefClass->Destroy( aRefInst );
+ }
+ }
+ else
+ {
+ sal_uInt32 nOldSize;
+ sal_uInt32 nLocalSize;
+
+ nOldSize = rMem.IncSize( 16 /*sizeof( RSHEADER_TYPE )*/ );
+
+ aError = rInst.pClass->WriteRc( rInst, rMem, pTC, nDeep, bExtra );
+ if( aError.IsOk() )
+ aError = WriteInstRc( rInst, rMem, pTC, nDeep, bExtra );
+ nLocalSize = rMem.Size();
+
+ if( aError.IsOk() )
+ {
+ // RscClass wird uebersprungen
+ aError = RscTop::WriteRc( rInst, rMem, pTC, nDeep, bExtra );
+ };
+
+ /*
+ // Definition der Struktur, aus denen die Resource aufgebaut ist
+ struct RSHEADER_TYPE{
+ RESOURCE_TYPE nRT; // Resource Typ
+ sal_uInt32 nRT; // Resource Typ
+ sal_uInt32 nGlobOff; // Globaler Offset
+ sal_uInt32 nLocalOff; // Lokaler Offset
+ };
+ */
+ sal_uInt32 nID = rId;
+ rMem.PutAt( nOldSize, nID );
+ rMem.PutAt( nOldSize +4, (sal_uInt32)rInst.pClass->GetTypId() );
+ rMem.PutAt( nOldSize +8, (sal_uInt32)(rMem.Size() - nOldSize) );
+ rMem.PutAt( nOldSize +12, (sal_uInt32)(nLocalSize - nOldSize) );
+ };
+ };
+
+ return( aError );
+}
+
+/*************************************************************************
+|*
+|* RscMgr::WriteRc()
+|*
+|* Beschreibung
+|* Ersterstellung MM 26.04.91
+|* Letzte Aenderung MM 26.04.91
+|*
+*************************************************************************/
+ERRTYPE RscMgr::WriteRc( const RSCINST &, RscWriteRc &,
+ RscTypCont *, sal_uInt32, BOOL )
+
+{
+ return( ERR_OK );
+}
+
+
+static ByteString MakeSmartName( const ByteString & rDefName )
+{
+ ByteString aSmartName;
+ if( rDefName.Len() )
+ {
+ char * pStr = (char *)rDefName.GetBuffer();
+ aSmartName = (char)toupper( *pStr );
+ while( *++pStr )
+ {
+ if( '_' == *pStr )
+ {
+ if( *++pStr )
+ aSmartName += (char)toupper( *pStr );
+ else
+ break;
+ }
+ else
+ aSmartName += (char)tolower( *pStr );
+ }
+ }
+ return aSmartName;
+}
+
+static ByteString MakeName( RscTypCont * pTypCon, RscTop * pClass,
+ const ByteString & rName )
+{
+ ByteString aRet;
+ if( !pTypCon->IsSmart() || isdigit( rName.GetChar(0) ) )
+ {
+ aRet += pHS->getString( pClass->GetId() ).getStr();
+ aRet += rName;
+ }
+ else
+ aRet += MakeSmartName( rName );
+ return aRet;
+}
+
+/*************************************************************************
+|*
+|* RscMgr::WriteHxxHeader()
+|*
+|* Beschreibung
+|* Ersterstellung MM 29.05.91
+|* Letzte Aenderung MM 29.05.91
+|*
+*************************************************************************/
+ERRTYPE RscMgr::WriteHxxHeader( const RSCINST & rInst, FILE * fOutput,
+ RscTypCont * pTC, const RscId &rId )
+{
+ RscMgrInst * pClassData;
+ ERRTYPE aError;
+ ObjNode * pObjNode = NULL;
+
+ pClassData = (RscMgrInst *)(rInst.pData + RscClass::Size());
+
+ if( pClassData->aRefId.IsId() )
+ {
+ pObjNode = rInst.pClass->GetObjNode( pClassData->aRefId );
+ if( !pObjNode && pTC )
+ {
+ ByteString aMsg( pHS->getString( rInst.pClass->GetId() ).getStr() );
+ aMsg += ' ';
+ aMsg += pClassData->aRefId.GetName();
+ aError = WRN_MGR_REFNOTFOUND;
+ pTC->pEH->Error( aError, rInst.pClass, rId, aMsg.GetBuffer() );
+ }
+ }
+
+ if( pObjNode )
+ {
+ RSCINST aRefI;
+
+ aRefI = RSCINST( rInst.pClass, pObjNode->GetRscObj() );
+ aError = aRefI.pClass->WriteHxxHeader( aRefI, fOutput, pTC,
+ rId );
+ }
+ else if (pTC)
+ {
+ fprintf( fOutput, "class %s",
+ MakeName( pTC, rInst.pClass,
+ rId.GetName() ).GetBuffer() );
+ fprintf( fOutput, " : public %s",
+ pHS->getString( rInst.pClass->GetId() ).getStr() );
+ fprintf( fOutput, "\n{\nprotected:\n" );
+
+ aError = RscClass::WriteHxx( rInst, fOutput, pTC, rId );
+
+ RSCINST aExtraInst = rInst.pClass->GetCopyVar( rInst, nRsc_EXTRADATA );
+ if( aExtraInst.IsInst() )
+ {
+ if( aExtraInst.pClass->GetCount( aExtraInst ) )
+ fprintf( fOutput, " char * pExtraData;\n" );
+ }
+ if( aError.IsOk() )
+ {
+ fprintf( fOutput, "public:\n " );
+ fprintf( fOutput, "%s%s bFreeRes = TRUE )",
+ MakeName( pTC, rInst.pClass,
+ rId.GetName() ).GetBuffer(),
+ (rInst.pClass->aCallParType).GetBuffer() );
+ fprintf( fOutput, ";\n};\n\n" );
+ }
+ };
+ return aError;
+}
+
+/*************************************************************************
+|*
+|* RscMgr::WriteHxx()
+|*
+|* Beschreibung
+|* Ersterstellung MM 29.05.91
+|* Letzte Aenderung MM 29.05.91
+|*
+*************************************************************************/
+ERRTYPE RscMgr::WriteHxx( const RSCINST & rInst, FILE * fOutput,
+ RscTypCont * pTC, const RscId & rId )
+{
+ fprintf( fOutput, " %s", pHS->getString( rInst.pClass->GetId() ).getStr() );
+ fprintf( fOutput, " a%s;\n",
+ MakeName( pTC, rInst.pClass, rId.GetName() ).GetBuffer() );
+
+ return ERR_OK;
+}
+
+/*************************************************************************
+|*
+|* RscClass::WriteCxxHeader()
+|*
+|* Beschreibung
+|* Ersterstellung MM 29.05.91
+|* Letzte Aenderung MM 29.05.91
+|*
+*************************************************************************/
+ERRTYPE RscMgr::WriteCxxHeader( const RSCINST & rInst, FILE * fOutput,
+ RscTypCont * pTC, const RscId & rId )
+{
+ RscMgrInst * pClassData;
+ ERRTYPE aError;
+ ObjNode * pObjNode = NULL;
+
+ pClassData = (RscMgrInst *)(rInst.pData + RscClass::Size());
+
+ if( pClassData->aRefId.IsId() )
+ {
+ pObjNode = rInst.pClass->GetObjNode( pClassData->aRefId );
+ if( !pObjNode && pTC )
+ {
+ ByteString aMsg( pHS->getString( rInst.pClass->GetId() ).getStr() );
+ aMsg += ' ';
+ aMsg += pClassData->aRefId.GetName();
+ aError = WRN_MGR_REFNOTFOUND;
+ pTC->pEH->Error( aError, rInst.pClass, rId, aMsg.GetBuffer() );
+ }
+ }
+
+ if( pObjNode )
+ {
+ RSCINST aRefI;
+
+ aRefI = RSCINST( rInst.pClass, pObjNode->GetRscObj() );
+ aError = aRefI.pClass->WriteCxxHeader( aRefI, fOutput, pTC,
+ rId );
+ }
+ else if (pTC)
+ {
+ fprintf( fOutput, "%s::%s",
+ MakeName( pTC, rInst.pClass, rId.GetName() ).GetBuffer(),
+ MakeName( pTC, rInst.pClass, rId.GetName() ).GetBuffer() );
+ fprintf( fOutput, "%s", (rInst.pClass->aCallParType).GetBuffer() );
+ if( GetCount( rInst ) )
+ fprintf( fOutput, " bFreeRes" );
+ fprintf( fOutput, " )\n : %s", pHS->getString( rInst.pClass->GetId() ).getStr() );
+ fprintf( fOutput, "%s", (rInst.pClass->aCallPar1).GetBuffer() );
+ fprintf( fOutput, " rResId )" );
+
+ aError = RscClass::WriteCxx( rInst, fOutput, pTC, rId );
+
+ fprintf( fOutput, "\n{\n" );
+ RSCINST aExtraInst = rInst.pClass->GetCopyVar( rInst, nRsc_EXTRADATA );
+ if( aExtraInst.IsInst() )
+ {
+ if( aExtraInst.pClass->GetCount( aExtraInst ) )
+ {
+ fprintf( fOutput, " //read extra data\n" );
+ fprintf( fOutput, " pExtraData = new char "
+ "[ GetRemainSizeRes() ];\n" );
+ fprintf( fOutput, " memcpy( pExtraData, "
+ "GetClassRes(), GetRemainSizeRes() );\n" );
+ fprintf( fOutput, " IncrementRes( GetRemainSizeRes() );\n" );
+ }
+ }
+
+ if( GetCount( rInst ) )
+ { // Es gibt UnterResourcen
+ fprintf( fOutput, " if( bFreeRes ) FreeResource();\n" );
+ }
+ else
+ {
+ fprintf( fOutput,
+ " // No subresources, automatic free resource\n" );
+ }
+ fprintf( fOutput, "}\n\n" );
+ }
+ return aError;
+}
+
+/*************************************************************************
+|*
+|* RscClass::WriteCxx()
+|*
+|* Beschreibung
+|* Ersterstellung MM 29.05.91
+|* Letzte Aenderung MM 29.05.91
+|*
+*************************************************************************/
+ERRTYPE RscMgr::WriteCxx( const RSCINST & rInst, FILE * fOutput,
+ RscTypCont * pTC, const RscId & rId )
+{
+ fprintf( fOutput, ",\n a%s",
+ MakeName( pTC, rInst.pClass, rId.GetName() ).GetBuffer() );
+ fprintf( fOutput, "%s", (rInst.pClass->aCallPar2).GetBuffer() );
+ fprintf( fOutput, " ResId( %s ) )", (rId.GetName()).GetBuffer() );
+
+ return ERR_OK;
+}
+
+/*************************************************************************
+|*
+|* RscArray::IsConsistent()
+|*
+|* Beschreibung
+|* Ersterstellung MM 23.09.91
+|* Letzte Aenderung MM 23.09.91
+|*
+*************************************************************************/
+BOOL RscMgr::IsConsistent( const RSCINST & rInst, RscInconsList * pList )
+{
+ BOOL bRet;
+ RscMgrInst * pClassData;
+
+ bRet = RscClass::IsConsistent( rInst, pList );
+
+ pClassData = (RscMgrInst *)(rInst.pData + RscClass::Size());
+ if( pClassData->aRefId.IsId() &&
+ ((pClassData->aRefId.GetNumber() < 1)
+ || (pClassData->aRefId.GetNumber() > 0x7FFF)
+ || IsToDeep( rInst ).IsError()) )
+ {
+ if( pList )
+ pList->Insert(
+ new RscInconsistent( pClassData->aRefId,
+ pClassData->aRefId ) );
+ bRet = FALSE;
+ }
+
+ return( bRet );
+}
+
+/*************************************************************************
+|*
+|* RscMgr::GetRef()
+|*
+|* Beschreibung
+|* Ersterstellung MM 15.05.91
+|* Letzte Aenderung MM 15.05.91
+|*
+*************************************************************************/
+ERRTYPE RscMgr::GetRef( const RSCINST & rInst, RscId * pRscId ){
+ RscMgrInst * pClassData;
+
+ pClassData = (RscMgrInst *)(rInst.pData + RscClass::Size());
+ *pRscId = pClassData->aRefId;
+ return ERR_OK;
+}
+
+/*************************************************************************
+|*
+|* RscMgr::IsToDeep()
+|*
+|* Beschreibung
+|* Ersterstellung MM 15.05.91
+|* Letzte Aenderung MM 15.05.91
+|*
+*************************************************************************/
+ERRTYPE RscMgr::IsToDeep( const RSCINST & rInst, sal_uInt32 nDeep )
+{
+ RscMgrInst * pClassData;
+ RscId aOldId, aId;
+ ERRTYPE aError;
+ RSCINST aTmpI = rInst;
+ ObjNode * pObjNode;
+
+ pClassData = (RscMgrInst *)(rInst.pData + RscClass::Size());
+
+ while( aTmpI.IsInst() && (nDeep < nRefDeep) && aError.IsOk() )
+ {
+ // Referenz holen
+ aTmpI.pClass->GetRef( aTmpI, &aId );
+ // Referenziertes Objekt holen
+ pObjNode = aTmpI.pClass->GetObjNode( aId );
+ // Referenzierte Objekt gefunden ?
+ if( pObjNode )
+ {
+ aTmpI.pData = pObjNode->GetRscObj();
+ nDeep++;
+ }
+ else //aTmpI.IsInst() wird FALSE, Schleife beenden
+ aTmpI.pData = NULL;
+ }
+
+ if( nDeep >= nRefDeep )
+ {
+ pClassData->aRefId = aOldId;
+ aError = ERR_REFTODEEP;
+ }
+
+ return( aError );
+}
+
+/*************************************************************************
+|*
+|* RscMgr::SetRef()
+|*
+|* Beschreibung
+|* Ersterstellung MM 15.05.91
+|* Letzte Aenderung MM 15.05.91
+|*
+*************************************************************************/
+ERRTYPE RscMgr::SetRef( const RSCINST & rInst, const RscId & rRefId )
+{
+ RscMgrInst * pClassData;
+ RscId aOldId, aId;
+ ERRTYPE aError;
+ RSCINST aTmpI = rInst;
+
+ if( rRefId.IsId() &&
+ ((rRefId.GetNumber() < 1) || (rRefId.GetNumber() > 0x7FFF)) )
+ {
+ aError = ERR_IDRANGE;
+ }
+ else
+ {
+ pClassData = (RscMgrInst *)(rInst.pData + RscClass::Size());
+ aOldId = pClassData->aRefId;// Alten Wert merken
+ pClassData->aRefId = rRefId;// vorher eintragen,
+ // sonst Fehler bei rekursion
+
+
+ aError = IsToDeep( rInst );
+ if( aError.IsOk() )
+ pClassData->bDflt = FALSE;
+ else
+ pClassData->aRefId = aOldId;
+ }
+
+ return( aError );
+}