xref: /AOO41X/main/rsc/source/res/rscclass.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
29*cdf0e10cSrcweir #include "precompiled_rsc.hxx"
30*cdf0e10cSrcweir /****************** I N C L U D E S **************************************/
31*cdf0e10cSrcweir 
32*cdf0e10cSrcweir // C and C++ Includes.
33*cdf0e10cSrcweir #include <stdlib.h>
34*cdf0e10cSrcweir #include <stdio.h>
35*cdf0e10cSrcweir #include <string.h>
36*cdf0e10cSrcweir 
37*cdf0e10cSrcweir // Programmabhaengige Includes.
38*cdf0e10cSrcweir #include <rscdb.hxx>
39*cdf0e10cSrcweir #include <rscclass.hxx>
40*cdf0e10cSrcweir 
41*cdf0e10cSrcweir #include <tools/fsys.hxx>
42*cdf0e10cSrcweir #include <tools/rcid.h>
43*cdf0e10cSrcweir #include <tools/rc.h>
44*cdf0e10cSrcweir 
45*cdf0e10cSrcweir /****************** C O D E **********************************************/
46*cdf0e10cSrcweir /****************** R s c C l a s s **************************************/
47*cdf0e10cSrcweir /*************************************************************************
48*cdf0e10cSrcweir |*
49*cdf0e10cSrcweir |*	  RscClass::RscClass()
50*cdf0e10cSrcweir |*
51*cdf0e10cSrcweir |*	  Beschreibung
52*cdf0e10cSrcweir |*	  Ersterstellung	MM 25.05.91
53*cdf0e10cSrcweir |*	  Letzte Aenderung	MM 25.05.91
54*cdf0e10cSrcweir |*
55*cdf0e10cSrcweir *************************************************************************/
56*cdf0e10cSrcweir RscClass::RscClass( Atom nId, sal_uInt32 nTypeId, RscTop * pSuperCl )
57*cdf0e10cSrcweir 	: RscTop( nId, nTypeId, pSuperCl )
58*cdf0e10cSrcweir {
59*cdf0e10cSrcweir 	nEntries = 0;
60*cdf0e10cSrcweir 	pVarTypeList = NULL;
61*cdf0e10cSrcweir 	nSuperSize = RscTop::Size();
62*cdf0e10cSrcweir 	nSize = nSuperSize + ALIGNED_SIZE( sizeof( RscClassInst ) );
63*cdf0e10cSrcweir }
64*cdf0e10cSrcweir 
65*cdf0e10cSrcweir /*************************************************************************
66*cdf0e10cSrcweir |*
67*cdf0e10cSrcweir |*	  RscClass::Pre_dtor()
68*cdf0e10cSrcweir |*
69*cdf0e10cSrcweir |*	  Beschreibung
70*cdf0e10cSrcweir |*	  Ersterstellung	MM 25.05.91
71*cdf0e10cSrcweir |*	  Letzte Aenderung	MM 25.05.91
72*cdf0e10cSrcweir |*
73*cdf0e10cSrcweir *************************************************************************/
74*cdf0e10cSrcweir void RscClass::Pre_dtor()
75*cdf0e10cSrcweir {
76*cdf0e10cSrcweir 	sal_uInt32	i;
77*cdf0e10cSrcweir 
78*cdf0e10cSrcweir 	RscTop::Pre_dtor();
79*cdf0e10cSrcweir 
80*cdf0e10cSrcweir 	for( i = 0; i < nEntries; i++ )
81*cdf0e10cSrcweir 	{
82*cdf0e10cSrcweir 		if( pVarTypeList[ i ].pDefault )
83*cdf0e10cSrcweir 		{
84*cdf0e10cSrcweir 			pVarTypeList[ i ].pClass->Destroy(
85*cdf0e10cSrcweir 						 RSCINST( pVarTypeList[ i ].pClass,
86*cdf0e10cSrcweir 								  pVarTypeList[ i ].pDefault ) );
87*cdf0e10cSrcweir 			rtl_freeMemory( pVarTypeList[ i ].pDefault );
88*cdf0e10cSrcweir 			pVarTypeList[ i ].pDefault = NULL;
89*cdf0e10cSrcweir 		};
90*cdf0e10cSrcweir 	};
91*cdf0e10cSrcweir }
92*cdf0e10cSrcweir 
93*cdf0e10cSrcweir /*************************************************************************
94*cdf0e10cSrcweir |*
95*cdf0e10cSrcweir |*	  RscClass::~RscClass()
96*cdf0e10cSrcweir |*
97*cdf0e10cSrcweir |*	  Beschreibung
98*cdf0e10cSrcweir |*	  Ersterstellung	MM 25.05.91
99*cdf0e10cSrcweir |*	  Letzte Aenderung	MM 25.05.91
100*cdf0e10cSrcweir |*
101*cdf0e10cSrcweir *************************************************************************/
102*cdf0e10cSrcweir RscClass::~RscClass()
103*cdf0e10cSrcweir {
104*cdf0e10cSrcweir 	if( pVarTypeList )
105*cdf0e10cSrcweir 		rtl_freeMemory( (void *)pVarTypeList );
106*cdf0e10cSrcweir }
107*cdf0e10cSrcweir 
108*cdf0e10cSrcweir /*************************************************************************
109*cdf0e10cSrcweir |*
110*cdf0e10cSrcweir |*	  RscClass::GetClassType()
111*cdf0e10cSrcweir |*
112*cdf0e10cSrcweir |*	  Beschreibung
113*cdf0e10cSrcweir |*	  Ersterstellung	MM 25.05.91
114*cdf0e10cSrcweir |*	  Letzte Aenderung	MM 25.05.91
115*cdf0e10cSrcweir |*
116*cdf0e10cSrcweir *************************************************************************/
117*cdf0e10cSrcweir RSCCLASS_TYPE RscClass::GetClassType() const
118*cdf0e10cSrcweir {
119*cdf0e10cSrcweir 	return RSCCLASS_COMPLEX;
120*cdf0e10cSrcweir }
121*cdf0e10cSrcweir 
122*cdf0e10cSrcweir /*************************************************************************
123*cdf0e10cSrcweir |*
124*cdf0e10cSrcweir |*	  RscClass::GetInstData()
125*cdf0e10cSrcweir |*
126*cdf0e10cSrcweir |*	  Beschreibung
127*cdf0e10cSrcweir |*	  Ersterstellung	MM 15.04.91
128*cdf0e10cSrcweir |*	  Letzte Aenderung	MM 15.04.91
129*cdf0e10cSrcweir |*
130*cdf0e10cSrcweir *************************************************************************/
131*cdf0e10cSrcweir RSCINST RscClass::GetInstData
132*cdf0e10cSrcweir (
133*cdf0e10cSrcweir 	CLASS_DATA pData,
134*cdf0e10cSrcweir 	sal_uInt32 nEle,
135*cdf0e10cSrcweir 	sal_Bool bGetCopy
136*cdf0e10cSrcweir )
137*cdf0e10cSrcweir {
138*cdf0e10cSrcweir 	RSCINST aInst;
139*cdf0e10cSrcweir 
140*cdf0e10cSrcweir 	aInst.pClass = pVarTypeList[ nEle ].pClass;
141*cdf0e10cSrcweir 	if( pData )
142*cdf0e10cSrcweir 	{
143*cdf0e10cSrcweir 		if( VAR_NODATAINST & pVarTypeList[ nEle ].nVarType )
144*cdf0e10cSrcweir 		{
145*cdf0e10cSrcweir 			RSCINST aTmpI;
146*cdf0e10cSrcweir 
147*cdf0e10cSrcweir 			aTmpI.pClass = this;
148*cdf0e10cSrcweir 			aTmpI.pData = pData;
149*cdf0e10cSrcweir 			if( bGetCopy )
150*cdf0e10cSrcweir 				aInst.pData = GetCopyVar(
151*cdf0e10cSrcweir 								  aTmpI,
152*cdf0e10cSrcweir 								  pVarTypeList[ nEle ].nDataBaseName
153*cdf0e10cSrcweir 							  ).pData;
154*cdf0e10cSrcweir 			else
155*cdf0e10cSrcweir 				aInst.pData = GetVariable(
156*cdf0e10cSrcweir 								  aTmpI,
157*cdf0e10cSrcweir 								  pVarTypeList[ nEle ].nDataBaseName,
158*cdf0e10cSrcweir 								  RSCINST()
159*cdf0e10cSrcweir 							  ).pData;
160*cdf0e10cSrcweir 		}
161*cdf0e10cSrcweir 		else if( VAR_POINTER & pVarTypeList[ nEle ].nVarType )
162*cdf0e10cSrcweir 		{
163*cdf0e10cSrcweir 			if( VAR_EXTENDABLE & pVarTypeList[ nEle ].nVarType )
164*cdf0e10cSrcweir 				aInst = *(RSCINST *)
165*cdf0e10cSrcweir 							  (pData + pVarTypeList[ nEle ].nOffset);
166*cdf0e10cSrcweir 			else
167*cdf0e10cSrcweir 				aInst.pData = *(CLASS_DATA *)
168*cdf0e10cSrcweir 							  (pData + pVarTypeList[ nEle ].nOffset);
169*cdf0e10cSrcweir 		}
170*cdf0e10cSrcweir 		else
171*cdf0e10cSrcweir 			aInst.pData = pData + pVarTypeList[ nEle ].nOffset;
172*cdf0e10cSrcweir 	};
173*cdf0e10cSrcweir 	return( aInst );
174*cdf0e10cSrcweir }
175*cdf0e10cSrcweir 
176*cdf0e10cSrcweir /*************************************************************************
177*cdf0e10cSrcweir |*
178*cdf0e10cSrcweir |*	  RscClass::GetInstDflt()
179*cdf0e10cSrcweir |*
180*cdf0e10cSrcweir |*	  Beschreibung
181*cdf0e10cSrcweir |*
182*cdf0e10cSrcweir *************************************************************************/
183*cdf0e10cSrcweir CLASS_DATA RscClass::GetDfltData( sal_uInt32 nEle )
184*cdf0e10cSrcweir {
185*cdf0e10cSrcweir 	if( pVarTypeList[ nEle ].pDefault )
186*cdf0e10cSrcweir 		return pVarTypeList[ nEle ].pDefault;
187*cdf0e10cSrcweir 
188*cdf0e10cSrcweir 	return pVarTypeList[ nEle ].pClass->GetDefault().pData;
189*cdf0e10cSrcweir }
190*cdf0e10cSrcweir 
191*cdf0e10cSrcweir /*************************************************************************
192*cdf0e10cSrcweir |*
193*cdf0e10cSrcweir |*	  RscClass::SetVarDflt()
194*cdf0e10cSrcweir |*
195*cdf0e10cSrcweir |*	  Beschreibung
196*cdf0e10cSrcweir |*	  Ersterstellung	MM 22.07.91
197*cdf0e10cSrcweir |*	  Letzte Aenderung	MM 22.07.91
198*cdf0e10cSrcweir |*
199*cdf0e10cSrcweir *************************************************************************/
200*cdf0e10cSrcweir void RscClass::SetVarDflt( CLASS_DATA pData, sal_uInt32 nEle, sal_Bool bSet )
201*cdf0e10cSrcweir {
202*cdf0e10cSrcweir 	RscClassInst * pClass;
203*cdf0e10cSrcweir 
204*cdf0e10cSrcweir 	pClass = (RscClassInst *)(pData + nSuperSize );
205*cdf0e10cSrcweir 	if( bSet )
206*cdf0e10cSrcweir 		pClass->nVarDflt |= ((sal_uLong)1 << nEle);
207*cdf0e10cSrcweir 	else
208*cdf0e10cSrcweir 		pClass->nVarDflt &= ~((sal_uLong)1 << nEle);
209*cdf0e10cSrcweir }
210*cdf0e10cSrcweir 
211*cdf0e10cSrcweir /*************************************************************************
212*cdf0e10cSrcweir |*
213*cdf0e10cSrcweir |*	  RscClass::IsDflt()
214*cdf0e10cSrcweir |*
215*cdf0e10cSrcweir |*	  Beschreibung
216*cdf0e10cSrcweir |*	  Ersterstellung	MM 22.07.91
217*cdf0e10cSrcweir |*	  Letzte Aenderung	MM 08.01.92
218*cdf0e10cSrcweir |*
219*cdf0e10cSrcweir *************************************************************************/
220*cdf0e10cSrcweir sal_Bool RscClass::IsDflt( CLASS_DATA pData, sal_uInt32 nEle )
221*cdf0e10cSrcweir {
222*cdf0e10cSrcweir 	RscClassInst *	pClass;
223*cdf0e10cSrcweir 	sal_Bool			bRet;
224*cdf0e10cSrcweir 
225*cdf0e10cSrcweir 	pClass = (RscClassInst *)(pData + nSuperSize );
226*cdf0e10cSrcweir 	if( pClass->nVarDflt & ((sal_uLong)1 << nEle) )
227*cdf0e10cSrcweir 		bRet = sal_True;
228*cdf0e10cSrcweir 	else
229*cdf0e10cSrcweir 		bRet = sal_False;
230*cdf0e10cSrcweir /*	{
231*cdf0e10cSrcweir 		//Variablenname ist Default
232*cdf0e10cSrcweir 		RSCINST aTmpI;
233*cdf0e10cSrcweir 
234*cdf0e10cSrcweir 		aTmpI = GetInstData( pData, nEle, sal_True );
235*cdf0e10cSrcweir 		if( aTmpI.IsInst() && !aTmpI.pClass->IsDefault( aTmpI ) )
236*cdf0e10cSrcweir 			bRet = sal_False;
237*cdf0e10cSrcweir 	}
238*cdf0e10cSrcweir */
239*cdf0e10cSrcweir 	return bRet;
240*cdf0e10cSrcweir }
241*cdf0e10cSrcweir 
242*cdf0e10cSrcweir /*************************************************************************
243*cdf0e10cSrcweir |*
244*cdf0e10cSrcweir |*	  RscClass::Create()
245*cdf0e10cSrcweir |*
246*cdf0e10cSrcweir |*	  Beschreibung
247*cdf0e10cSrcweir |*	  Ersterstellung	MM 03.04.91
248*cdf0e10cSrcweir |*	  Letzte Aenderung	MM 03.04.91
249*cdf0e10cSrcweir |*
250*cdf0e10cSrcweir *************************************************************************/
251*cdf0e10cSrcweir RSCINST RscClass::Create
252*cdf0e10cSrcweir (
253*cdf0e10cSrcweir 	RSCINST * pInst,
254*cdf0e10cSrcweir 	const RSCINST & rDflt,
255*cdf0e10cSrcweir 	sal_Bool bOwnClass
256*cdf0e10cSrcweir )
257*cdf0e10cSrcweir {
258*cdf0e10cSrcweir 	sal_uInt32	i;
259*cdf0e10cSrcweir 	CLASS_DATA	* ppData;
260*cdf0e10cSrcweir 	RSCINST aInst;
261*cdf0e10cSrcweir 	RSCINST aMemInst, aDfltI;
262*cdf0e10cSrcweir 
263*cdf0e10cSrcweir 	if( !pInst )
264*cdf0e10cSrcweir 	{
265*cdf0e10cSrcweir 		aInst.pClass = this;
266*cdf0e10cSrcweir 		aInst.pData = (CLASS_DATA) rtl_allocateMemory( Size() );
267*cdf0e10cSrcweir 	}
268*cdf0e10cSrcweir 	else
269*cdf0e10cSrcweir 		aInst = *pInst;
270*cdf0e10cSrcweir 	if( !bOwnClass && rDflt.IsInst() )
271*cdf0e10cSrcweir 		bOwnClass = rDflt.pClass->InHierarchy( this );
272*cdf0e10cSrcweir 
273*cdf0e10cSrcweir 	RscTop::Create( &aInst, rDflt, bOwnClass );
274*cdf0e10cSrcweir 
275*cdf0e10cSrcweir 	if( bOwnClass )
276*cdf0e10cSrcweir 		((RscClassInst *)(aInst.pData + nSuperSize))->nVarDflt =
277*cdf0e10cSrcweir 			((RscClassInst *)(rDflt.pData + nSuperSize))->nVarDflt;
278*cdf0e10cSrcweir 	else
279*cdf0e10cSrcweir 		((RscClassInst *)(aInst.pData + nSuperSize))->nVarDflt = ~((sal_uLong)0);
280*cdf0e10cSrcweir 
281*cdf0e10cSrcweir 	for( i = 0; i < nEntries; i++ )
282*cdf0e10cSrcweir 	{
283*cdf0e10cSrcweir 		aDfltI = GetInstData( bOwnClass ? rDflt.pData : NULL, i, sal_True );
284*cdf0e10cSrcweir 
285*cdf0e10cSrcweir 		if( (VAR_POINTER & pVarTypeList[ i ].nVarType)
286*cdf0e10cSrcweir 		  && !(VAR_NODATAINST & pVarTypeList[ i ].nVarType) )
287*cdf0e10cSrcweir 		{
288*cdf0e10cSrcweir 			if( VAR_EXTENDABLE & pVarTypeList[ i ].nVarType )
289*cdf0e10cSrcweir 			{
290*cdf0e10cSrcweir 				RSCINST * pInstance = (RSCINST *)
291*cdf0e10cSrcweir 						(aInst.pData + pVarTypeList[ i ].nOffset );
292*cdf0e10cSrcweir 				pInstance->pClass = pVarTypeList[ i ].pClass;
293*cdf0e10cSrcweir 				ppData = &pInstance->pData;
294*cdf0e10cSrcweir 			}
295*cdf0e10cSrcweir 			else
296*cdf0e10cSrcweir 				ppData = (CLASS_DATA* )
297*cdf0e10cSrcweir 						(aInst.pData + pVarTypeList[ i ].nOffset );
298*cdf0e10cSrcweir 			*ppData = NULL;
299*cdf0e10cSrcweir 			if( aDfltI.IsInst() )
300*cdf0e10cSrcweir 			{
301*cdf0e10cSrcweir 				aMemInst = pVarTypeList[ i ].pClass->Create( NULL, aDfltI );
302*cdf0e10cSrcweir 				*ppData = aMemInst.pData;
303*cdf0e10cSrcweir 			};
304*cdf0e10cSrcweir 		}
305*cdf0e10cSrcweir 		else
306*cdf0e10cSrcweir 		{
307*cdf0e10cSrcweir 			aMemInst = GetInstData( aInst.pData, i, sal_True );
308*cdf0e10cSrcweir 			aMemInst = aMemInst.pClass->Create( &aMemInst, aDfltI );
309*cdf0e10cSrcweir 		};
310*cdf0e10cSrcweir 	}
311*cdf0e10cSrcweir 
312*cdf0e10cSrcweir 	return( aInst );
313*cdf0e10cSrcweir }
314*cdf0e10cSrcweir 
315*cdf0e10cSrcweir /*************************************************************************
316*cdf0e10cSrcweir |*
317*cdf0e10cSrcweir |*	  RscClass::Destroy()
318*cdf0e10cSrcweir |*
319*cdf0e10cSrcweir |*	  Beschreibung
320*cdf0e10cSrcweir |*
321*cdf0e10cSrcweir *************************************************************************/
322*cdf0e10cSrcweir void RscClass::Destroy( const RSCINST & rInst )
323*cdf0e10cSrcweir {
324*cdf0e10cSrcweir 	sal_uInt32	i;
325*cdf0e10cSrcweir 
326*cdf0e10cSrcweir 	RscTop::Destroy( rInst );
327*cdf0e10cSrcweir 
328*cdf0e10cSrcweir 	for( i = 0; i < nEntries; i++ )
329*cdf0e10cSrcweir 	{
330*cdf0e10cSrcweir 		if( !(pVarTypeList[ i ].nVarType & VAR_NODATAINST) )
331*cdf0e10cSrcweir 		{
332*cdf0e10cSrcweir 			RSCINST aTmpI;
333*cdf0e10cSrcweir 
334*cdf0e10cSrcweir 			aTmpI = GetInstData( rInst.pData, i, sal_True );
335*cdf0e10cSrcweir 			if( aTmpI.IsInst() )
336*cdf0e10cSrcweir 			{
337*cdf0e10cSrcweir 				// Objekt loeschen
338*cdf0e10cSrcweir 				aTmpI.pClass->Destroy( aTmpI );
339*cdf0e10cSrcweir 				if( pVarTypeList[ i ].nVarType & VAR_POINTER )
340*cdf0e10cSrcweir 				{
341*cdf0e10cSrcweir 					// Speicher freigeben
342*cdf0e10cSrcweir 					rtl_freeMemory( aTmpI.pData );
343*cdf0e10cSrcweir 				};
344*cdf0e10cSrcweir 			};
345*cdf0e10cSrcweir 		}
346*cdf0e10cSrcweir 	};
347*cdf0e10cSrcweir }
348*cdf0e10cSrcweir 
349*cdf0e10cSrcweir /*************************************************************************
350*cdf0e10cSrcweir |*
351*cdf0e10cSrcweir |*	  RscClass::SetVariable()
352*cdf0e10cSrcweir |*
353*cdf0e10cSrcweir |*	  Beschreibung
354*cdf0e10cSrcweir |*
355*cdf0e10cSrcweir *************************************************************************/
356*cdf0e10cSrcweir ERRTYPE RscClass::SetVariable
357*cdf0e10cSrcweir (
358*cdf0e10cSrcweir 	Atom nVarName,
359*cdf0e10cSrcweir 	RscTop * pClass,
360*cdf0e10cSrcweir 	RSCINST * pDflt,
361*cdf0e10cSrcweir 	RSCVAR nVarType,
362*cdf0e10cSrcweir 	sal_uInt32 nMask,
363*cdf0e10cSrcweir 	Atom nDataBaseName
364*cdf0e10cSrcweir )
365*cdf0e10cSrcweir {
366*cdf0e10cSrcweir 	if( pVarTypeList )
367*cdf0e10cSrcweir 		pVarTypeList = (VARTYPE_STRUCT *)
368*cdf0e10cSrcweir 				 rtl_reallocateMemory( (void *)pVarTypeList,
369*cdf0e10cSrcweir 				 ((nEntries +1) * sizeof( VARTYPE_STRUCT )) );
370*cdf0e10cSrcweir 	else
371*cdf0e10cSrcweir 		pVarTypeList = (VARTYPE_STRUCT *)
372*cdf0e10cSrcweir 			rtl_allocateMemory( ((nEntries +1)
373*cdf0e10cSrcweir 							* sizeof( VARTYPE_STRUCT )) );
374*cdf0e10cSrcweir 
375*cdf0e10cSrcweir 	pVarTypeList[ nEntries ].nVarName		= nVarName;
376*cdf0e10cSrcweir 	pVarTypeList[ nEntries ].nMask			= nMask;
377*cdf0e10cSrcweir 	pVarTypeList[ nEntries ].pClass 		= pClass;
378*cdf0e10cSrcweir 	pVarTypeList[ nEntries ].nOffset		= nSize;
379*cdf0e10cSrcweir 	pVarTypeList[ nEntries ].nDataBaseName	= nDataBaseName;
380*cdf0e10cSrcweir 	if( pDflt )
381*cdf0e10cSrcweir 		pVarTypeList[ nEntries ].pDefault = pDflt->pData;
382*cdf0e10cSrcweir 	else
383*cdf0e10cSrcweir 		pVarTypeList[ nEntries ].pDefault = NULL;
384*cdf0e10cSrcweir 
385*cdf0e10cSrcweir 	pVarTypeList[ nEntries ].nVarType = ~VAR_POINTER & nVarType;
386*cdf0e10cSrcweir 	if( pClass->Size() > 10 || (nVarType & VAR_EXTENDABLE) )
387*cdf0e10cSrcweir 		pVarTypeList[ nEntries ].nVarType |= VAR_POINTER;
388*cdf0e10cSrcweir 
389*cdf0e10cSrcweir 	if( !(pVarTypeList[ nEntries ].nVarType & VAR_NODATAINST) )
390*cdf0e10cSrcweir 	{
391*cdf0e10cSrcweir 		if( pVarTypeList[ nEntries ].nVarType & VAR_POINTER )
392*cdf0e10cSrcweir 		{
393*cdf0e10cSrcweir 			if( pVarTypeList[ nEntries ].nVarType & VAR_EXTENDABLE )
394*cdf0e10cSrcweir 				nSize += sizeof( RSCINST );
395*cdf0e10cSrcweir 			else
396*cdf0e10cSrcweir 				nSize += sizeof( CLASS_DATA );
397*cdf0e10cSrcweir 		}
398*cdf0e10cSrcweir 		else
399*cdf0e10cSrcweir 			nSize += pClass->Size();
400*cdf0e10cSrcweir 	}
401*cdf0e10cSrcweir 
402*cdf0e10cSrcweir 	nEntries++;
403*cdf0e10cSrcweir 	if( nEntries > (sizeof( sal_uLong ) * 8) )
404*cdf0e10cSrcweir 	{
405*cdf0e10cSrcweir 		// Bereich fuer Default zu klein
406*cdf0e10cSrcweir 		RscExit( 16 );
407*cdf0e10cSrcweir 	};
408*cdf0e10cSrcweir 	return( ERR_OK );
409*cdf0e10cSrcweir }
410*cdf0e10cSrcweir 
411*cdf0e10cSrcweir /*************************************************************************
412*cdf0e10cSrcweir |*
413*cdf0e10cSrcweir |*	  RscClass::EnumVariable()
414*cdf0e10cSrcweir |*
415*cdf0e10cSrcweir |*	  Beschreibung
416*cdf0e10cSrcweir |*
417*cdf0e10cSrcweir *************************************************************************/
418*cdf0e10cSrcweir void RscClass::EnumVariables( void * pData, VarEnumCallbackProc pProc )
419*cdf0e10cSrcweir {
420*cdf0e10cSrcweir 	sal_uInt32 i;
421*cdf0e10cSrcweir 
422*cdf0e10cSrcweir 	RscTop::EnumVariables( pData, pProc );
423*cdf0e10cSrcweir 	for( i = 0; i < nEntries; i ++ )
424*cdf0e10cSrcweir 	{
425*cdf0e10cSrcweir 		if( !(pVarTypeList[ i ].nVarType & VAR_NOENUM) )
426*cdf0e10cSrcweir 			(*pProc)( pData, pVarTypeList[ i ].pClass->GetClassType(),
427*cdf0e10cSrcweir 						pVarTypeList[ i ].nVarName );
428*cdf0e10cSrcweir 	}
429*cdf0e10cSrcweir }
430*cdf0e10cSrcweir 
431*cdf0e10cSrcweir /*************************************************************************
432*cdf0e10cSrcweir |*
433*cdf0e10cSrcweir |*	  RscClass::GetVariable()
434*cdf0e10cSrcweir |*
435*cdf0e10cSrcweir |*	  Beschreibung
436*cdf0e10cSrcweir |*
437*cdf0e10cSrcweir *************************************************************************/
438*cdf0e10cSrcweir RSCINST RscClass::GetVariable
439*cdf0e10cSrcweir (
440*cdf0e10cSrcweir 	const RSCINST & rInst,
441*cdf0e10cSrcweir 	Atom nVarName,
442*cdf0e10cSrcweir 	const RSCINST & rInitInst,
443*cdf0e10cSrcweir 	sal_Bool bInitDflt,
444*cdf0e10cSrcweir 	RscTop * pCreateClass
445*cdf0e10cSrcweir )
446*cdf0e10cSrcweir {
447*cdf0e10cSrcweir 	sal_uInt32	i = 0;
448*cdf0e10cSrcweir 	RSCINST aTmpI;
449*cdf0e10cSrcweir 
450*cdf0e10cSrcweir 	while( i < nEntries && pVarTypeList[ i ].nVarName != nVarName )
451*cdf0e10cSrcweir 		i++;
452*cdf0e10cSrcweir 	if( i < nEntries )
453*cdf0e10cSrcweir 	{
454*cdf0e10cSrcweir 		if( VAR_NODATAINST & pVarTypeList[ i ].nVarType )
455*cdf0e10cSrcweir 		{
456*cdf0e10cSrcweir 			aTmpI = GetVariable( rInst,
457*cdf0e10cSrcweir 								 pVarTypeList[ i ].nDataBaseName,
458*cdf0e10cSrcweir 								 RSCINST() );
459*cdf0e10cSrcweir 			aTmpI.pClass = pVarTypeList[ i ].pClass;
460*cdf0e10cSrcweir 		}
461*cdf0e10cSrcweir 		else
462*cdf0e10cSrcweir 		{
463*cdf0e10cSrcweir 			// Default Instanz generieren
464*cdf0e10cSrcweir 			RSCINST aDefInst = rInitInst;
465*cdf0e10cSrcweir 			if( !aDefInst.IsInst() && bInitDflt )
466*cdf0e10cSrcweir 			{
467*cdf0e10cSrcweir 				// mit dem Variablen-Default besetzen
468*cdf0e10cSrcweir 				aDefInst.pData  = pVarTypeList[ i ].pDefault;
469*cdf0e10cSrcweir 				aDefInst.pClass = pVarTypeList[ i ].pClass;
470*cdf0e10cSrcweir 			}
471*cdf0e10cSrcweir 
472*cdf0e10cSrcweir 			aTmpI = GetInstData( rInst.pData, i );
473*cdf0e10cSrcweir 			if( aTmpI.IsInst() )
474*cdf0e10cSrcweir 			{
475*cdf0e10cSrcweir 				if( aDefInst.IsInst() )
476*cdf0e10cSrcweir 				{
477*cdf0e10cSrcweir 					aTmpI.pClass->Destroy( aTmpI );
478*cdf0e10cSrcweir 					aTmpI.pClass->Create( &aTmpI, aDefInst );
479*cdf0e10cSrcweir 				}
480*cdf0e10cSrcweir 			}
481*cdf0e10cSrcweir 			else
482*cdf0e10cSrcweir 			{ // Wird ueber Zeiger angegeben
483*cdf0e10cSrcweir 				if( VAR_EXTENDABLE & pVarTypeList[ i ].nVarType )
484*cdf0e10cSrcweir 				{
485*cdf0e10cSrcweir 					RSCINST * pInst = (RSCINST *)
486*cdf0e10cSrcweir 							(rInst.pData + pVarTypeList[ i ].nOffset );
487*cdf0e10cSrcweir 					if( pCreateClass && pCreateClass->InHierarchy( aTmpI.pClass ) )
488*cdf0e10cSrcweir 						*pInst = pCreateClass->Create( NULL, aDefInst );
489*cdf0e10cSrcweir 					else
490*cdf0e10cSrcweir 						*pInst = aTmpI.pClass->Create( NULL, aDefInst );
491*cdf0e10cSrcweir 					aTmpI = *pInst;
492*cdf0e10cSrcweir 				}
493*cdf0e10cSrcweir 				else
494*cdf0e10cSrcweir 				{
495*cdf0e10cSrcweir 					CLASS_DATA	* ppData
496*cdf0e10cSrcweir 						= (CLASS_DATA *)(rInst.pData + pVarTypeList[ i ].nOffset);
497*cdf0e10cSrcweir 					aTmpI = aTmpI.pClass->Create( NULL, aDefInst );
498*cdf0e10cSrcweir 					*ppData = aTmpI.pData;
499*cdf0e10cSrcweir 				}
500*cdf0e10cSrcweir 			}
501*cdf0e10cSrcweir 		};
502*cdf0e10cSrcweir 		// auf nicht Default setzen
503*cdf0e10cSrcweir 		SetVarDflt( rInst.pData, i, sal_False );
504*cdf0e10cSrcweir 		return( aTmpI );
505*cdf0e10cSrcweir 	};
506*cdf0e10cSrcweir 
507*cdf0e10cSrcweir 	return( RscTop::GetVariable( rInst, nVarName, rInitInst,
508*cdf0e10cSrcweir 								bInitDflt, pCreateClass ) );
509*cdf0e10cSrcweir }
510*cdf0e10cSrcweir 
511*cdf0e10cSrcweir /*************************************************************************
512*cdf0e10cSrcweir |*
513*cdf0e10cSrcweir |*	  RscClass::GetCopyVar()
514*cdf0e10cSrcweir |*
515*cdf0e10cSrcweir |*	  Beschreibung
516*cdf0e10cSrcweir |*
517*cdf0e10cSrcweir *************************************************************************/
518*cdf0e10cSrcweir RSCINST RscClass::GetCopyVar
519*cdf0e10cSrcweir (
520*cdf0e10cSrcweir 	const RSCINST & rInst,
521*cdf0e10cSrcweir 	Atom nVarName
522*cdf0e10cSrcweir )
523*cdf0e10cSrcweir {
524*cdf0e10cSrcweir 	sal_uInt32	i = 0;
525*cdf0e10cSrcweir 	RSCINST aVarI;
526*cdf0e10cSrcweir 
527*cdf0e10cSrcweir 	while( i < nEntries && pVarTypeList[ i ].nVarName != nVarName )
528*cdf0e10cSrcweir 		i++;
529*cdf0e10cSrcweir 
530*cdf0e10cSrcweir 	if( i < nEntries )
531*cdf0e10cSrcweir 	{
532*cdf0e10cSrcweir 		if( VAR_NODATAINST & pVarTypeList[ i ].nVarType )
533*cdf0e10cSrcweir 		{
534*cdf0e10cSrcweir 			aVarI = GetCopyVar( rInst, pVarTypeList[ i ].nDataBaseName );
535*cdf0e10cSrcweir 			aVarI.pClass = pVarTypeList[ i ].pClass;
536*cdf0e10cSrcweir 		}
537*cdf0e10cSrcweir 		else
538*cdf0e10cSrcweir 		{
539*cdf0e10cSrcweir 			if( IsDflt( rInst.pData, i ) )
540*cdf0e10cSrcweir 			{
541*cdf0e10cSrcweir 				// mit Variablen Default initialiaieren
542*cdf0e10cSrcweir 				aVarI = GetVariable( rInst, nVarName, RSCINST(), sal_True );
543*cdf0e10cSrcweir 				SetVarDflt( rInst.pData, i, sal_True );
544*cdf0e10cSrcweir 			}
545*cdf0e10cSrcweir 			else
546*cdf0e10cSrcweir 				aVarI = GetInstData( rInst.pData, i, sal_True );
547*cdf0e10cSrcweir 
548*cdf0e10cSrcweir 		};
549*cdf0e10cSrcweir 		return aVarI ;
550*cdf0e10cSrcweir 	};
551*cdf0e10cSrcweir 
552*cdf0e10cSrcweir 	return RscTop::GetCopyVar( rInst, nVarName );
553*cdf0e10cSrcweir }
554*cdf0e10cSrcweir 
555*cdf0e10cSrcweir /*************************************************************************
556*cdf0e10cSrcweir |*
557*cdf0e10cSrcweir |*	  RscClass::IsConsistent()
558*cdf0e10cSrcweir |*
559*cdf0e10cSrcweir |*	  Beschreibung
560*cdf0e10cSrcweir |*
561*cdf0e10cSrcweir *************************************************************************/
562*cdf0e10cSrcweir sal_Bool RscClass::IsConsistent( const RSCINST & rInst, RscInconsList * pList )
563*cdf0e10cSrcweir {
564*cdf0e10cSrcweir 	sal_uInt32	i = 0;
565*cdf0e10cSrcweir 	RSCINST aTmpI;
566*cdf0e10cSrcweir 	sal_Bool	bRet;
567*cdf0e10cSrcweir 
568*cdf0e10cSrcweir 	bRet = RscTop::IsConsistent( rInst, pList );
569*cdf0e10cSrcweir 
570*cdf0e10cSrcweir 	for( i = 0; i < nEntries; i++ )
571*cdf0e10cSrcweir 	{
572*cdf0e10cSrcweir 		if( !(VAR_NODATAINST & pVarTypeList[ i ].nVarType) )
573*cdf0e10cSrcweir 		{
574*cdf0e10cSrcweir 			aTmpI = GetInstData( rInst.pData, i, sal_True );
575*cdf0e10cSrcweir 
576*cdf0e10cSrcweir 			if( aTmpI.IsInst() )
577*cdf0e10cSrcweir 				if( ! aTmpI.pClass->IsConsistent( aTmpI, pList ) )
578*cdf0e10cSrcweir 					bRet = sal_False;
579*cdf0e10cSrcweir 		}
580*cdf0e10cSrcweir 	};
581*cdf0e10cSrcweir 
582*cdf0e10cSrcweir 	return( bRet );
583*cdf0e10cSrcweir }
584*cdf0e10cSrcweir 
585*cdf0e10cSrcweir /*************************************************************************
586*cdf0e10cSrcweir |*
587*cdf0e10cSrcweir |*	  RscClass::SetToDefault()
588*cdf0e10cSrcweir |*
589*cdf0e10cSrcweir |*	  Beschreibung
590*cdf0e10cSrcweir |*
591*cdf0e10cSrcweir *************************************************************************/
592*cdf0e10cSrcweir void RscClass::SetToDefault( const RSCINST & rInst )
593*cdf0e10cSrcweir {
594*cdf0e10cSrcweir 	sal_uInt32	i;
595*cdf0e10cSrcweir 	RSCINST aTmpI;
596*cdf0e10cSrcweir 	RscClassInst *	pClass;
597*cdf0e10cSrcweir 
598*cdf0e10cSrcweir 	pClass = (RscClassInst *)(rInst.pData + nSuperSize );
599*cdf0e10cSrcweir 
600*cdf0e10cSrcweir 	for( i = 0; i < nEntries; i++ )
601*cdf0e10cSrcweir 	{
602*cdf0e10cSrcweir 		// Variablen ohne eigenen Speicher werden vom "Datenserver"
603*cdf0e10cSrcweir 		// auf Default gesetzt
604*cdf0e10cSrcweir 		if( !(VAR_NODATAINST & pVarTypeList[ i ].nVarType) )
605*cdf0e10cSrcweir 		{
606*cdf0e10cSrcweir 			aTmpI = GetInstData( rInst.pData, i, sal_True );
607*cdf0e10cSrcweir 			if( aTmpI.IsInst() )
608*cdf0e10cSrcweir 				aTmpI.pClass->SetToDefault( aTmpI );
609*cdf0e10cSrcweir 		}
610*cdf0e10cSrcweir 	}
611*cdf0e10cSrcweir 	pClass->nVarDflt = ~((sal_uLong)0); // alles auf Default
612*cdf0e10cSrcweir 
613*cdf0e10cSrcweir 	RscTop::SetToDefault( rInst );
614*cdf0e10cSrcweir }
615*cdf0e10cSrcweir 
616*cdf0e10cSrcweir /*************************************************************************
617*cdf0e10cSrcweir |*
618*cdf0e10cSrcweir |*	  RscClass::IsDefault()
619*cdf0e10cSrcweir |*
620*cdf0e10cSrcweir |*	  Beschreibung
621*cdf0e10cSrcweir |*
622*cdf0e10cSrcweir *************************************************************************/
623*cdf0e10cSrcweir sal_Bool RscClass::IsDefault( const RSCINST & rInst )
624*cdf0e10cSrcweir {
625*cdf0e10cSrcweir 	sal_uInt32	i;
626*cdf0e10cSrcweir 	RSCINST aTmpI;
627*cdf0e10cSrcweir 
628*cdf0e10cSrcweir 	for( i = 0; i < nEntries; i++ )
629*cdf0e10cSrcweir 	{
630*cdf0e10cSrcweir 		// Variablen ohne eigenen Speicher werden vom "Datenserver"
631*cdf0e10cSrcweir 		// auf Default untersucht
632*cdf0e10cSrcweir 		if( !(VAR_NODATAINST & pVarTypeList[ i ].nVarType) )
633*cdf0e10cSrcweir 			if( !IsDflt( rInst.pData, i ) )
634*cdf0e10cSrcweir 				return( sal_False );
635*cdf0e10cSrcweir 	};
636*cdf0e10cSrcweir 
637*cdf0e10cSrcweir 	return( RscTop::IsDefault( rInst ) );
638*cdf0e10cSrcweir }
639*cdf0e10cSrcweir 
640*cdf0e10cSrcweir /*************************************************************************
641*cdf0e10cSrcweir |*
642*cdf0e10cSrcweir |*	  RscClass::GetDefault()
643*cdf0e10cSrcweir |*
644*cdf0e10cSrcweir |*	  Beschreibung
645*cdf0e10cSrcweir |*
646*cdf0e10cSrcweir *************************************************************************/
647*cdf0e10cSrcweir RSCINST RscClass::GetDefault( Atom nVarId )
648*cdf0e10cSrcweir {
649*cdf0e10cSrcweir 	sal_uInt32	i;
650*cdf0e10cSrcweir 
651*cdf0e10cSrcweir 	i = 0;
652*cdf0e10cSrcweir 	while( i < nEntries && pVarTypeList[ i ].nVarName != nVarId )
653*cdf0e10cSrcweir 		i++;
654*cdf0e10cSrcweir 	if( i < nEntries )
655*cdf0e10cSrcweir 	{
656*cdf0e10cSrcweir 		RSCINST aTmpI;
657*cdf0e10cSrcweir 
658*cdf0e10cSrcweir 		aTmpI.pClass = pVarTypeList[ i ].pClass;
659*cdf0e10cSrcweir 		aTmpI.pData  = GetDfltData( i );
660*cdf0e10cSrcweir 		return( aTmpI );
661*cdf0e10cSrcweir 	};
662*cdf0e10cSrcweir 
663*cdf0e10cSrcweir 	return( RscTop::GetDefault( nVarId ) );
664*cdf0e10cSrcweir }
665*cdf0e10cSrcweir 
666*cdf0e10cSrcweir /*************************************************************************
667*cdf0e10cSrcweir |*
668*cdf0e10cSrcweir |*	  RscClass::IsValueDflt()
669*cdf0e10cSrcweir |*
670*cdf0e10cSrcweir |*	  Beschreibung
671*cdf0e10cSrcweir |*
672*cdf0e10cSrcweir *************************************************************************/
673*cdf0e10cSrcweir sal_Bool RscClass::IsValueDflt( CLASS_DATA pData, sal_uInt32 nEle )
674*cdf0e10cSrcweir {
675*cdf0e10cSrcweir 	RSCINST aTmpI;
676*cdf0e10cSrcweir 
677*cdf0e10cSrcweir 	aTmpI = GetInstData( pData, nEle, sal_True );
678*cdf0e10cSrcweir 
679*cdf0e10cSrcweir 	if( aTmpI.IsInst() )
680*cdf0e10cSrcweir 	{
681*cdf0e10cSrcweir 		if( VAR_SVDYNAMIC & pVarTypeList[ nEle ].nVarType )
682*cdf0e10cSrcweir 			return sal_False;
683*cdf0e10cSrcweir 
684*cdf0e10cSrcweir 		if( aTmpI.pClass == pVarTypeList[ nEle ].pClass )
685*cdf0e10cSrcweir 			//sie haben auch die gleiche Klasse
686*cdf0e10cSrcweir 			return aTmpI.pClass->IsValueDefault( aTmpI, GetDfltData( nEle ) );
687*cdf0e10cSrcweir 		else
688*cdf0e10cSrcweir 			return sal_False;
689*cdf0e10cSrcweir 	}
690*cdf0e10cSrcweir 	return sal_True;
691*cdf0e10cSrcweir }
692*cdf0e10cSrcweir 
693*cdf0e10cSrcweir /*************************************************************************
694*cdf0e10cSrcweir |*
695*cdf0e10cSrcweir |*	  RscClass::IsValueDefault()
696*cdf0e10cSrcweir |*
697*cdf0e10cSrcweir |*	  Beschreibung
698*cdf0e10cSrcweir |*
699*cdf0e10cSrcweir *************************************************************************/
700*cdf0e10cSrcweir sal_Bool RscClass::IsValueDefault( const RSCINST & rInst, CLASS_DATA pDef )
701*cdf0e10cSrcweir {
702*cdf0e10cSrcweir 	sal_uInt32	i = 0;
703*cdf0e10cSrcweir 	RSCINST aTmpI;
704*cdf0e10cSrcweir 	RSCINST aDfltI;
705*cdf0e10cSrcweir 
706*cdf0e10cSrcweir 	if( !RscTop::IsValueDefault( rInst, pDef ) )
707*cdf0e10cSrcweir 		return sal_False;
708*cdf0e10cSrcweir 
709*cdf0e10cSrcweir 	if( pDef )
710*cdf0e10cSrcweir 	{
711*cdf0e10cSrcweir 		for( i = 0; i < nEntries; i++ )
712*cdf0e10cSrcweir 		{
713*cdf0e10cSrcweir 			aTmpI = GetInstData( rInst.pData, i, sal_True );
714*cdf0e10cSrcweir 			if( aTmpI.IsInst() )
715*cdf0e10cSrcweir 			{
716*cdf0e10cSrcweir 				if( aTmpI.pClass != pVarTypeList[ i ].pClass )
717*cdf0e10cSrcweir 					//sie haben nicht die gleiche Klasse
718*cdf0e10cSrcweir 					return sal_False;
719*cdf0e10cSrcweir 
720*cdf0e10cSrcweir 				aDfltI = GetInstData( pDef, i, sal_True );
721*cdf0e10cSrcweir 				if( !aDfltI.IsInst() )
722*cdf0e10cSrcweir 					aDfltI.pData = GetDfltData( i );
723*cdf0e10cSrcweir 
724*cdf0e10cSrcweir 				if( !aTmpI.pClass->IsValueDefault( aTmpI, aDfltI.pData ) )
725*cdf0e10cSrcweir 					return sal_False;
726*cdf0e10cSrcweir 			}
727*cdf0e10cSrcweir 		}
728*cdf0e10cSrcweir 	}
729*cdf0e10cSrcweir 	else
730*cdf0e10cSrcweir 		return sal_False;
731*cdf0e10cSrcweir 
732*cdf0e10cSrcweir 	return sal_True;
733*cdf0e10cSrcweir }
734*cdf0e10cSrcweir 
735*cdf0e10cSrcweir /*************************************************************************
736*cdf0e10cSrcweir |*
737*cdf0e10cSrcweir |*	  RscClass::SetDefault()
738*cdf0e10cSrcweir |*
739*cdf0e10cSrcweir |*	  Beschreibung
740*cdf0e10cSrcweir |*
741*cdf0e10cSrcweir *************************************************************************/
742*cdf0e10cSrcweir void RscClass::SetDefault( const RSCINST & rInst, Atom nVarName )
743*cdf0e10cSrcweir {
744*cdf0e10cSrcweir 	sal_uInt32	i = 0;
745*cdf0e10cSrcweir 	RSCINST aTmpI;
746*cdf0e10cSrcweir 
747*cdf0e10cSrcweir 	while( i < nEntries && pVarTypeList[ i ].nVarName != nVarName )
748*cdf0e10cSrcweir 		i++;
749*cdf0e10cSrcweir 
750*cdf0e10cSrcweir 	if( i < nEntries )
751*cdf0e10cSrcweir 	{
752*cdf0e10cSrcweir 		aTmpI = GetInstData( rInst.pData, i, sal_True );
753*cdf0e10cSrcweir 		if( aTmpI.IsInst() )
754*cdf0e10cSrcweir 		{
755*cdf0e10cSrcweir 			aTmpI.pClass->Destroy( aTmpI );
756*cdf0e10cSrcweir 			aTmpI.pClass->Create( &aTmpI, RSCINST() );
757*cdf0e10cSrcweir 			SetVarDflt( rInst.pData, i, sal_True );
758*cdf0e10cSrcweir 		}
759*cdf0e10cSrcweir 	}
760*cdf0e10cSrcweir 	else //In Superklasse nach Variable suchen
761*cdf0e10cSrcweir 		RscTop::SetDefault( rInst, nVarName );
762*cdf0e10cSrcweir 
763*cdf0e10cSrcweir }
764*cdf0e10cSrcweir 
765*cdf0e10cSrcweir 
766*cdf0e10cSrcweir /*************************************************************************
767*cdf0e10cSrcweir |*
768*cdf0e10cSrcweir |*	  RscClass::WriteSrc()
769*cdf0e10cSrcweir |*
770*cdf0e10cSrcweir |*	  Beschreibung
771*cdf0e10cSrcweir |*
772*cdf0e10cSrcweir *************************************************************************/
773*cdf0e10cSrcweir void RscClass::WriteSrc
774*cdf0e10cSrcweir (
775*cdf0e10cSrcweir 	const RSCINST & rInst,
776*cdf0e10cSrcweir 	FILE * fOutput,
777*cdf0e10cSrcweir 	RscTypCont * pTC,
778*cdf0e10cSrcweir 	sal_uInt32 nTab,
779*cdf0e10cSrcweir 	const char * pVarName
780*cdf0e10cSrcweir )
781*cdf0e10cSrcweir {
782*cdf0e10cSrcweir 	sal_uInt32	i = 0, n = 0;
783*cdf0e10cSrcweir 	RSCINST aTmpI;
784*cdf0e10cSrcweir 
785*cdf0e10cSrcweir 	RscTop::WriteSrc( rInst, fOutput, pTC, nTab, pVarName );
786*cdf0e10cSrcweir 
787*cdf0e10cSrcweir 	for( i = 0; i < nEntries; i++ )
788*cdf0e10cSrcweir 	{
789*cdf0e10cSrcweir 		if( !(VAR_HIDDEN & pVarTypeList[ i ].nVarType) )
790*cdf0e10cSrcweir 		{
791*cdf0e10cSrcweir 			// Hack wegen Position und Dimensiuon
792*cdf0e10cSrcweir 			if( nRsc_XYMAPMODEId == pVarTypeList[ i ].nVarName
793*cdf0e10cSrcweir 			  || nRsc_WHMAPMODEId == pVarTypeList[ i ].nVarName )
794*cdf0e10cSrcweir 			{
795*cdf0e10cSrcweir 				if( !IsDflt( rInst.pData, i )	  //MapUnit
796*cdf0e10cSrcweir 				  || !IsDflt( rInst.pData, i+1 )  //X, Width
797*cdf0e10cSrcweir 				  || !IsDflt( rInst.pData, i+2 ) )//Y, Height
798*cdf0e10cSrcweir 				{// ein Wert ist nicht Default
799*cdf0e10cSrcweir 					for( n = 0; n < nTab; n++ )
800*cdf0e10cSrcweir 						fputc( '\t', fOutput );
801*cdf0e10cSrcweir 					if( nRsc_XYMAPMODEId == pVarTypeList[ i ].nVarName )
802*cdf0e10cSrcweir 						fprintf( fOutput, "Pos = " );
803*cdf0e10cSrcweir 					else
804*cdf0e10cSrcweir 						fprintf( fOutput, "Size = " );
805*cdf0e10cSrcweir 
806*cdf0e10cSrcweir 					if( !IsDflt( rInst.pData, i ) )
807*cdf0e10cSrcweir 					{
808*cdf0e10cSrcweir 						aTmpI = GetInstData( rInst.pData, i, sal_True );
809*cdf0e10cSrcweir 						aTmpI.pClass->WriteSrcHeader(
810*cdf0e10cSrcweir 							  aTmpI, fOutput, pTC, nTab, RscId(), pVarName );
811*cdf0e10cSrcweir 					}
812*cdf0e10cSrcweir 
813*cdf0e10cSrcweir 					fprintf( fOutput, "( " );
814*cdf0e10cSrcweir 					aTmpI = GetInstData( rInst.pData, i+1, sal_True );
815*cdf0e10cSrcweir 					if( !aTmpI.IsInst() )
816*cdf0e10cSrcweir 						aTmpI.pData = GetDfltData( i+1 );
817*cdf0e10cSrcweir 					aTmpI.pClass->WriteSrcHeader(
818*cdf0e10cSrcweir 							  aTmpI, fOutput, pTC, nTab, RscId(), pVarName );
819*cdf0e10cSrcweir 
820*cdf0e10cSrcweir 					fprintf( fOutput, ", " );
821*cdf0e10cSrcweir 					aTmpI = GetInstData( rInst.pData, i+2, sal_True );
822*cdf0e10cSrcweir 					if( !aTmpI.IsInst() )
823*cdf0e10cSrcweir 						aTmpI.pData = GetDfltData( i+2 );
824*cdf0e10cSrcweir 					aTmpI.pClass->WriteSrcHeader(
825*cdf0e10cSrcweir 							  aTmpI, fOutput, pTC, nTab, RscId(), pVarName );
826*cdf0e10cSrcweir 					fprintf( fOutput, " );\n" );
827*cdf0e10cSrcweir 				}
828*cdf0e10cSrcweir 				i += 2; //_X, _Y oder _Widht, Height ueberlesen
829*cdf0e10cSrcweir 			}
830*cdf0e10cSrcweir 			else if( !IsDflt( rInst.pData, i )
831*cdf0e10cSrcweir 			  && !IsValueDflt( rInst.pData, i ) )
832*cdf0e10cSrcweir 			{
833*cdf0e10cSrcweir 				aTmpI = GetInstData( rInst.pData, i, sal_True );
834*cdf0e10cSrcweir 
835*cdf0e10cSrcweir 				if( aTmpI.IsInst() )
836*cdf0e10cSrcweir 				{
837*cdf0e10cSrcweir 					const char * pName = pHS->getString( pVarTypeList[ i ].nVarName ).getStr();
838*cdf0e10cSrcweir 
839*cdf0e10cSrcweir 					for( n = 0; n < nTab; n++ )
840*cdf0e10cSrcweir 						fputc( '\t', fOutput );
841*cdf0e10cSrcweir 					fprintf( fOutput, "%s", pName );
842*cdf0e10cSrcweir 					fprintf( fOutput, " = " );
843*cdf0e10cSrcweir 					aTmpI.pClass->WriteSrcHeader(
844*cdf0e10cSrcweir 							  aTmpI, fOutput, pTC, nTab, RscId(), pName );
845*cdf0e10cSrcweir 					fprintf( fOutput, ";\n" );
846*cdf0e10cSrcweir 				}
847*cdf0e10cSrcweir 			};
848*cdf0e10cSrcweir 		};
849*cdf0e10cSrcweir 	};
850*cdf0e10cSrcweir 
851*cdf0e10cSrcweir 	return;
852*cdf0e10cSrcweir }
853*cdf0e10cSrcweir 
854*cdf0e10cSrcweir /*************************************************************************
855*cdf0e10cSrcweir |*
856*cdf0e10cSrcweir |*	  RscClass::WriteInstRc()
857*cdf0e10cSrcweir |*
858*cdf0e10cSrcweir |*	  Beschreibung
859*cdf0e10cSrcweir |*
860*cdf0e10cSrcweir *************************************************************************/
861*cdf0e10cSrcweir sal_Int32 RscClass::GetCorrectValues
862*cdf0e10cSrcweir (
863*cdf0e10cSrcweir 	const RSCINST & rInst,
864*cdf0e10cSrcweir 	sal_uInt32 nVarPos,
865*cdf0e10cSrcweir 	sal_uInt32 nTupelIdx,
866*cdf0e10cSrcweir 	RscTypCont * pTC
867*cdf0e10cSrcweir )
868*cdf0e10cSrcweir {
869*cdf0e10cSrcweir 	sal_Int32 nLang = 0;
870*cdf0e10cSrcweir 	sal_Int32 nBaseValue;
871*cdf0e10cSrcweir 
872*cdf0e10cSrcweir 	// Basiswert holen
873*cdf0e10cSrcweir 	RSCINST aTmpI = GetInstData( rInst.pData, nVarPos, sal_True );
874*cdf0e10cSrcweir 	aTmpI.pClass->GetNumber( aTmpI, &nBaseValue );
875*cdf0e10cSrcweir 
876*cdf0e10cSrcweir 	// Sprach Delta holen
877*cdf0e10cSrcweir 	aTmpI = rInst.pClass->GetVariable( rInst, nRsc_DELTALANG, RSCINST() );
878*cdf0e10cSrcweir 	if( aTmpI.IsInst() )
879*cdf0e10cSrcweir 	{
880*cdf0e10cSrcweir 		RscWriteRc aMem;
881*cdf0e10cSrcweir 		aTmpI.pClass->WriteRc( aTmpI, aMem, pTC, 0, sal_False );
882*cdf0e10cSrcweir 		nLang = (sal_Int32)aMem.GetShort( nTupelIdx * sizeof(sal_uInt16) );
883*cdf0e10cSrcweir 	}
884*cdf0e10cSrcweir 
885*cdf0e10cSrcweir 	return nLang + nBaseValue;
886*cdf0e10cSrcweir }
887*cdf0e10cSrcweir 
888*cdf0e10cSrcweir ERRTYPE RscClass::WriteInstRc
889*cdf0e10cSrcweir (
890*cdf0e10cSrcweir 	const RSCINST & rInst,
891*cdf0e10cSrcweir 	RscWriteRc & rMem,
892*cdf0e10cSrcweir 	RscTypCont * pTC,
893*cdf0e10cSrcweir 	sal_uInt32 nDeep,
894*cdf0e10cSrcweir 	sal_Bool bExtra
895*cdf0e10cSrcweir )
896*cdf0e10cSrcweir {
897*cdf0e10cSrcweir 	sal_uInt32 i = 0;
898*cdf0e10cSrcweir 	ERRTYPE aError;
899*cdf0e10cSrcweir 	RSCINST aTmpI;
900*cdf0e10cSrcweir 	sal_uInt32	nMaskOff = 0;// Offset um Maskenfeld zu addressieren
901*cdf0e10cSrcweir 
902*cdf0e10cSrcweir 	// Wenn eine Variable Maskierung hat, dann Maskenfeld
903*cdf0e10cSrcweir 	for( i = 0; i < nEntries; i++ )
904*cdf0e10cSrcweir 	{
905*cdf0e10cSrcweir 		if( pVarTypeList[ i ].nMask )
906*cdf0e10cSrcweir 		{
907*cdf0e10cSrcweir 			nMaskOff = rMem.Size();
908*cdf0e10cSrcweir 			rMem.Put( sal_uInt32(0) );
909*cdf0e10cSrcweir 			break;
910*cdf0e10cSrcweir 		}
911*cdf0e10cSrcweir 	};
912*cdf0e10cSrcweir 
913*cdf0e10cSrcweir 	for( i = 0; i < nEntries && aError.IsOk(); i++ )
914*cdf0e10cSrcweir 	{
915*cdf0e10cSrcweir 		if( !((VAR_NODATAINST | VAR_NORC) & pVarTypeList[ i ].nVarType ))
916*cdf0e10cSrcweir 		{
917*cdf0e10cSrcweir 			if( pVarTypeList[ i ].nMask )
918*cdf0e10cSrcweir 			{
919*cdf0e10cSrcweir 				if( !IsDflt( rInst.pData, i ) )
920*cdf0e10cSrcweir 				{
921*cdf0e10cSrcweir 					if( nRsc_X == pVarTypeList[ i ].nVarName )
922*cdf0e10cSrcweir 					{
923*cdf0e10cSrcweir 						sal_Int32 nVal = GetCorrectValues( rInst, i, 0, pTC );
924*cdf0e10cSrcweir 						rMem.Put( nVal );
925*cdf0e10cSrcweir 					}
926*cdf0e10cSrcweir 					else if( nRsc_Y == pVarTypeList[ i ].nVarName )
927*cdf0e10cSrcweir 					{
928*cdf0e10cSrcweir 						sal_Int32 nVal = GetCorrectValues( rInst, i, 1, pTC );
929*cdf0e10cSrcweir 						rMem.Put( nVal );
930*cdf0e10cSrcweir 					}
931*cdf0e10cSrcweir 					else if( nRsc_WIDTH == pVarTypeList[ i ].nVarName )
932*cdf0e10cSrcweir 					{
933*cdf0e10cSrcweir 						sal_Int32 nVal = GetCorrectValues( rInst, i, 2, pTC );
934*cdf0e10cSrcweir 						rMem.Put( nVal );
935*cdf0e10cSrcweir 					}
936*cdf0e10cSrcweir 					else if( nRsc_HEIGHT == pVarTypeList[ i ].nVarName )
937*cdf0e10cSrcweir 					{
938*cdf0e10cSrcweir 						sal_Int32 nVal = GetCorrectValues( rInst, i, 3, pTC );
939*cdf0e10cSrcweir 						rMem.Put( nVal );
940*cdf0e10cSrcweir 					}
941*cdf0e10cSrcweir 					else
942*cdf0e10cSrcweir 					{
943*cdf0e10cSrcweir 						aTmpI = GetInstData( rInst.pData, i, sal_True );
944*cdf0e10cSrcweir 						// Nur an Variable Extradata bExtra nicht auf sal_False
945*cdf0e10cSrcweir 						// setzen
946*cdf0e10cSrcweir 						aError = aTmpI.pClass->
947*cdf0e10cSrcweir 							WriteRcHeader( aTmpI, rMem, pTC,
948*cdf0e10cSrcweir 										RscId(), nDeep,
949*cdf0e10cSrcweir 										(nRsc_EXTRADATA
950*cdf0e10cSrcweir 										== pVarTypeList[ i ].nVarName)
951*cdf0e10cSrcweir 										? bExtra : sal_False );
952*cdf0e10cSrcweir 					}
953*cdf0e10cSrcweir 					sal_uInt32 nMask = rMem.GetLong( nMaskOff );
954*cdf0e10cSrcweir 					nMask |= pVarTypeList[ i ].nMask;
955*cdf0e10cSrcweir 					rMem.PutAt( nMaskOff, nMask );
956*cdf0e10cSrcweir 				}
957*cdf0e10cSrcweir 			}
958*cdf0e10cSrcweir 			else{
959*cdf0e10cSrcweir 				if( IsDflt( rInst.pData, i ) )
960*cdf0e10cSrcweir 				{
961*cdf0e10cSrcweir 					aTmpI.pClass = pVarTypeList[ i ].pClass;
962*cdf0e10cSrcweir 					aTmpI.pData  = GetDfltData( i );
963*cdf0e10cSrcweir 				}
964*cdf0e10cSrcweir 				else
965*cdf0e10cSrcweir 					aTmpI = GetInstData( rInst.pData, i, sal_True );
966*cdf0e10cSrcweir 				// Nur an Variable Extradata bExtra nicht auf sal_False
967*cdf0e10cSrcweir 				// setzen
968*cdf0e10cSrcweir 				aError = aTmpI.pClass->
969*cdf0e10cSrcweir 							WriteRcHeader( aTmpI, rMem, pTC,
970*cdf0e10cSrcweir 										RscId(), nDeep,
971*cdf0e10cSrcweir 										(nRsc_EXTRADATA
972*cdf0e10cSrcweir 										== pVarTypeList[ i ].nVarName)
973*cdf0e10cSrcweir 										? bExtra : sal_False );
974*cdf0e10cSrcweir 			}
975*cdf0e10cSrcweir 		}
976*cdf0e10cSrcweir 	}
977*cdf0e10cSrcweir 
978*cdf0e10cSrcweir 	return( aError );
979*cdf0e10cSrcweir }
980*cdf0e10cSrcweir 
981*cdf0e10cSrcweir /*************************************************************************
982*cdf0e10cSrcweir |*
983*cdf0e10cSrcweir |*	  RscClass::WriteRc()
984*cdf0e10cSrcweir |*
985*cdf0e10cSrcweir |*	  Beschreibung
986*cdf0e10cSrcweir |*
987*cdf0e10cSrcweir *************************************************************************/
988*cdf0e10cSrcweir ERRTYPE RscClass::WriteRc
989*cdf0e10cSrcweir (
990*cdf0e10cSrcweir 	const RSCINST & rInst,
991*cdf0e10cSrcweir 	RscWriteRc & rMem,
992*cdf0e10cSrcweir 	RscTypCont * pTC,
993*cdf0e10cSrcweir 	sal_uInt32 nDeep,
994*cdf0e10cSrcweir 	sal_Bool bExtra
995*cdf0e10cSrcweir )
996*cdf0e10cSrcweir {
997*cdf0e10cSrcweir 	ERRTYPE aError;
998*cdf0e10cSrcweir 
999*cdf0e10cSrcweir 	aError = RscTop::WriteRc( rInst, rMem, pTC, nDeep, bExtra );
1000*cdf0e10cSrcweir 	if( aError.IsOk() )
1001*cdf0e10cSrcweir 		aError = WriteInstRc( rInst, rMem, pTC, nDeep, bExtra );
1002*cdf0e10cSrcweir 
1003*cdf0e10cSrcweir 	return( aError );
1004*cdf0e10cSrcweir }
1005*cdf0e10cSrcweir 
1006*cdf0e10cSrcweir /*************************************************************************
1007*cdf0e10cSrcweir |*
1008*cdf0e10cSrcweir |*	  RscClass::WriteSyntax()
1009*cdf0e10cSrcweir |*
1010*cdf0e10cSrcweir |*	  Beschreibung
1011*cdf0e10cSrcweir |*
1012*cdf0e10cSrcweir *************************************************************************/
1013*cdf0e10cSrcweir void RscClass::WriteSyntax( FILE * fOutput, RscTypCont * pTC )
1014*cdf0e10cSrcweir {
1015*cdf0e10cSrcweir 	RscTop::WriteSyntax( fOutput, pTC );
1016*cdf0e10cSrcweir 
1017*cdf0e10cSrcweir 	sal_uInt32 i;
1018*cdf0e10cSrcweir 	// Wenn eine Variable Maskierung hat, dann Maskenfeld
1019*cdf0e10cSrcweir 	fprintf( fOutput, "\t//%s\n", pHS->getString( GetId() ).getStr() );
1020*cdf0e10cSrcweir 	for( i = 0; i < nEntries; i++ )
1021*cdf0e10cSrcweir 	{
1022*cdf0e10cSrcweir 		fprintf( fOutput, "\t%s", pHS->getString( pVarTypeList[ i ].nVarName ).getStr() );
1023*cdf0e10cSrcweir 		sal_uInt32 n = strlen( pHS->getString( pVarTypeList[ i ].nVarName ).getStr() );
1024*cdf0e10cSrcweir 		while( n < 20 )
1025*cdf0e10cSrcweir 		{
1026*cdf0e10cSrcweir 			putc( ' ', fOutput );
1027*cdf0e10cSrcweir 			n++;
1028*cdf0e10cSrcweir 		}
1029*cdf0e10cSrcweir 		fprintf( fOutput, " = %s;\n",
1030*cdf0e10cSrcweir 				pHS->getString( pVarTypeList[ i ].pClass->GetId() ).getStr() );
1031*cdf0e10cSrcweir 	};
1032*cdf0e10cSrcweir }
1033*cdf0e10cSrcweir 
1034*cdf0e10cSrcweir //==================================================================
1035*cdf0e10cSrcweir void RscClass::WriteRcAccess
1036*cdf0e10cSrcweir (
1037*cdf0e10cSrcweir 	FILE * fOutput,
1038*cdf0e10cSrcweir 	RscTypCont * /*pTC*/,
1039*cdf0e10cSrcweir 	const char * pName
1040*cdf0e10cSrcweir )
1041*cdf0e10cSrcweir {
1042*cdf0e10cSrcweir 	fprintf( fOutput, "\t\tSet%s( %s ", pName, pHS->getString( GetId() ).getStr() );
1043*cdf0e10cSrcweir 	fprintf( fOutput, "%s ", aCallPar2.GetBuffer() );
1044*cdf0e10cSrcweir 	fprintf( fOutput, "ResId( (RSHEADER_TYPE*)(pResData+nOffset) ) ) );\n" );
1045*cdf0e10cSrcweir 	fprintf( fOutput, "\t\tnOffset += GetObjSizeRes( (RSHEADER_TYPE*)(pResData+nOffset) );\n" );
1046*cdf0e10cSrcweir }
1047*cdf0e10cSrcweir 
1048*cdf0e10cSrcweir //==================================================================
1049*cdf0e10cSrcweir void RscClass::WriteRcCtor( FILE * fOutput, RscTypCont * pTC )
1050*cdf0e10cSrcweir {
1051*cdf0e10cSrcweir 	if( GetId() != InvalidAtom )
1052*cdf0e10cSrcweir 	{
1053*cdf0e10cSrcweir 		// Konstruktor
1054*cdf0e10cSrcweir 		fprintf( fOutput, "%s::%s%s bFreeResource )",
1055*cdf0e10cSrcweir 				pHS->getString( GetId() ).getStr(),
1056*cdf0e10cSrcweir                 pHS->getString( GetId() ).getStr(),
1057*cdf0e10cSrcweir 				aCallParType.GetBuffer() );
1058*cdf0e10cSrcweir 		if( GetSuperClass() )
1059*cdf0e10cSrcweir 		{
1060*cdf0e10cSrcweir 			// Superaufruf
1061*cdf0e10cSrcweir 			fprintf( fOutput, "\n\t: %s", pHS->getString( GetSuperClass()->GetId() ).getStr() );
1062*cdf0e10cSrcweir 			fprintf( fOutput, "%s", GetSuperClass()->aCallPar1.GetBuffer() );
1063*cdf0e10cSrcweir 			fprintf( fOutput, " rResId.SetRT2( 0x%lx ) )",
1064*cdf0e10cSrcweir                      sal::static_int_cast< unsigned long >(GetTypId()) );
1065*cdf0e10cSrcweir 		}
1066*cdf0e10cSrcweir 		fprintf( fOutput, "\n{\n" );
1067*cdf0e10cSrcweir 		fprintf( fOutput, "\tsal_uInt32\tnObjMask;\n" );
1068*cdf0e10cSrcweir 		fprintf( fOutput, "\tsal_uInt32\tnOffset = 0;\n" );
1069*cdf0e10cSrcweir 		fprintf( fOutput, "\tBYTE *\tpResData;\n\n" );
1070*cdf0e10cSrcweir 		fprintf( fOutput, "\tpResData = (tBYTE *)GetClassRes();\n\n" );
1071*cdf0e10cSrcweir 		fprintf( fOutput, "\tnObjMask = *(sal_uInt32*)pResData;\n" );
1072*cdf0e10cSrcweir 		fprintf( fOutput, "\tnOffset += 4;\n\n" );
1073*cdf0e10cSrcweir 
1074*cdf0e10cSrcweir 		for( sal_uInt32 i = 0; i < nEntries; i++ )
1075*cdf0e10cSrcweir 		{
1076*cdf0e10cSrcweir 			if( !((VAR_NODATAINST | VAR_NORC) & pVarTypeList[ i ].nVarType ))
1077*cdf0e10cSrcweir 			{
1078*cdf0e10cSrcweir 				fprintf( fOutput, "\tif( nObjMask & 0x%lx )\n\t{\n",
1079*cdf0e10cSrcweir                          sal::static_int_cast< unsigned long >(
1080*cdf0e10cSrcweir                              pVarTypeList[ i ].nMask) );
1081*cdf0e10cSrcweir 
1082*cdf0e10cSrcweir 				pVarTypeList[ i ].pClass->WriteRcAccess( fOutput, pTC,
1083*cdf0e10cSrcweir 									pHS->getString( pVarTypeList[ i ].nVarName ).getStr() );
1084*cdf0e10cSrcweir 
1085*cdf0e10cSrcweir 				fprintf( fOutput, "\t}\n" );
1086*cdf0e10cSrcweir 			}
1087*cdf0e10cSrcweir 		}
1088*cdf0e10cSrcweir 		fprintf( fOutput, "\tIncrementRes( nOffset );\n" );
1089*cdf0e10cSrcweir 		fprintf( fOutput, "\tif( bFreeResource )\n" );
1090*cdf0e10cSrcweir 		fprintf( fOutput, "\t\tFreeResource();\n" );
1091*cdf0e10cSrcweir 		fprintf( fOutput, "}\n\n" );
1092*cdf0e10cSrcweir 	}
1093*cdf0e10cSrcweir }
1094*cdf0e10cSrcweir 
1095*cdf0e10cSrcweir /*************************************************************************
1096*cdf0e10cSrcweir |*
1097*cdf0e10cSrcweir |*	  RscSysDepend::RscSysDepend()
1098*cdf0e10cSrcweir |*
1099*cdf0e10cSrcweir |*	  Beschreibung
1100*cdf0e10cSrcweir |*
1101*cdf0e10cSrcweir *************************************************************************/
1102*cdf0e10cSrcweir RscSysDepend::RscSysDepend( Atom nId, sal_uInt32 nTypeId, RscTop * pSuper )
1103*cdf0e10cSrcweir 			: RscClass( nId, nTypeId, pSuper )
1104*cdf0e10cSrcweir {}
1105*cdf0e10cSrcweir 
1106*cdf0e10cSrcweir /*************************************************************************
1107*cdf0e10cSrcweir |*
1108*cdf0e10cSrcweir |*	  RscSysDepend::WriteRc()
1109*cdf0e10cSrcweir |*
1110*cdf0e10cSrcweir |*	  Beschreibung
1111*cdf0e10cSrcweir |*
1112*cdf0e10cSrcweir *************************************************************************/
1113*cdf0e10cSrcweir ERRTYPE RscSysDepend::WriteSysDependRc( const RSCINST & rInst, RscWriteRc & rMem,
1114*cdf0e10cSrcweir 				RscTypCont * pTC, sal_uInt32 nDeep, sal_Bool bExtra, sal_Bool bFirst )
1115*cdf0e10cSrcweir {
1116*cdf0e10cSrcweir 	sal_uInt32	nId = 0xFFFFFFFF;
1117*cdf0e10cSrcweir 	ERRTYPE 	aError;
1118*cdf0e10cSrcweir 	RSCINST 	aFileName;
1119*cdf0e10cSrcweir 
1120*cdf0e10cSrcweir 	//Instanz mit dem Dateinamen "FILENAME" holen
1121*cdf0e10cSrcweir 	aFileName = RscClass::GetCopyVar( rInst, pHS->getID( "FILE", true ) );
1122*cdf0e10cSrcweir 	if( aFileName.IsInst() )
1123*cdf0e10cSrcweir 	{
1124*cdf0e10cSrcweir 		RscWriteRc aTmpMem;
1125*cdf0e10cSrcweir 		aError = aFileName.pClass->WriteRcHeader( aFileName, aTmpMem, pTC,
1126*cdf0e10cSrcweir 												  RscId(), nDeep, bExtra );
1127*cdf0e10cSrcweir 		// Obsolete - need changes in VCL
1128*cdf0e10cSrcweir 		rMem.Put( sal_uInt32(0) );
1129*cdf0e10cSrcweir 
1130*cdf0e10cSrcweir 		// Identifier schreiben
1131*cdf0e10cSrcweir 		if( aTmpMem.Size() && pTC && (*aTmpMem.GetUTF8( 0 ) != '\0') )
1132*cdf0e10cSrcweir 		{
1133*cdf0e10cSrcweir 			nId = pTC->PutSysName( rInst.pClass->GetTypId(),
1134*cdf0e10cSrcweir 								   aTmpMem.GetUTF8( 0 ),
1135*cdf0e10cSrcweir 								   0, 0, bFirst );
1136*cdf0e10cSrcweir 		}
1137*cdf0e10cSrcweir 		rMem.Put( nId );
1138*cdf0e10cSrcweir 		aError = aFileName.pClass->WriteRcHeader( aFileName, rMem, pTC,
1139*cdf0e10cSrcweir 												  RscId(), nDeep, bExtra );
1140*cdf0e10cSrcweir 	}
1141*cdf0e10cSrcweir 	else
1142*cdf0e10cSrcweir 		aError = ERR_ERROR;
1143*cdf0e10cSrcweir 
1144*cdf0e10cSrcweir 	return( aError );
1145*cdf0e10cSrcweir }
1146*cdf0e10cSrcweir 
1147*cdf0e10cSrcweir /*************************************************************************
1148*cdf0e10cSrcweir |*
1149*cdf0e10cSrcweir |*	  RscSysDepend::WriteRc()
1150*cdf0e10cSrcweir |*
1151*cdf0e10cSrcweir |*	  Beschreibung
1152*cdf0e10cSrcweir |*
1153*cdf0e10cSrcweir *************************************************************************/
1154*cdf0e10cSrcweir ERRTYPE RscSysDepend::WriteRc( const RSCINST & rInst, RscWriteRc & rMem,
1155*cdf0e10cSrcweir 							RscTypCont * pTC, sal_uInt32 nDeep, sal_Bool bExtra )
1156*cdf0e10cSrcweir {
1157*cdf0e10cSrcweir 	ERRTYPE 	aError = RscClass::WriteRc( rInst, rMem, pTC, nDeep, bExtra );
1158*cdf0e10cSrcweir 
1159*cdf0e10cSrcweir 	if( this == rInst.pClass )
1160*cdf0e10cSrcweir 		// nur wenn es eigen Klasse ist
1161*cdf0e10cSrcweir 		aError = WriteSysDependRc( rInst, rMem, pTC, nDeep, bExtra );
1162*cdf0e10cSrcweir 	return aError;
1163*cdf0e10cSrcweir }
1164*cdf0e10cSrcweir 
1165*cdf0e10cSrcweir /*************************************************************************
1166*cdf0e10cSrcweir |*
1167*cdf0e10cSrcweir |*	  RscFirstSysDepend::RscFirstSysDepend()
1168*cdf0e10cSrcweir |*
1169*cdf0e10cSrcweir |*	  Beschreibung
1170*cdf0e10cSrcweir |*
1171*cdf0e10cSrcweir *************************************************************************/
1172*cdf0e10cSrcweir RscFirstSysDepend::RscFirstSysDepend( Atom nId, sal_uInt32 nTypeId,
1173*cdf0e10cSrcweir 										RscTop * pSuper )
1174*cdf0e10cSrcweir 			: RscSysDepend( nId, nTypeId, pSuper )
1175*cdf0e10cSrcweir {}
1176*cdf0e10cSrcweir 
1177*cdf0e10cSrcweir /*************************************************************************
1178*cdf0e10cSrcweir |*
1179*cdf0e10cSrcweir |*	  RscFirstSysDepend::WriteRc()
1180*cdf0e10cSrcweir |*
1181*cdf0e10cSrcweir |*	  Beschreibung
1182*cdf0e10cSrcweir |*
1183*cdf0e10cSrcweir *************************************************************************/
1184*cdf0e10cSrcweir ERRTYPE RscFirstSysDepend::WriteRc( const RSCINST & rInst, RscWriteRc & rMem,
1185*cdf0e10cSrcweir 							RscTypCont * pTC, sal_uInt32 nDeep, sal_Bool bExtra )
1186*cdf0e10cSrcweir {
1187*cdf0e10cSrcweir 	ERRTYPE aError = RscClass::WriteRc( rInst, rMem, pTC, nDeep, bExtra );
1188*cdf0e10cSrcweir 	aError = WriteSysDependRc( rInst, rMem, pTC, nDeep, bExtra, sal_True );
1189*cdf0e10cSrcweir 	return aError;
1190*cdf0e10cSrcweir }
1191*cdf0e10cSrcweir 
1192*cdf0e10cSrcweir /*************************************************************************
1193*cdf0e10cSrcweir |*
1194*cdf0e10cSrcweir |*	  RscTupel::RscTupel()
1195*cdf0e10cSrcweir |*
1196*cdf0e10cSrcweir |*	  Beschreibung
1197*cdf0e10cSrcweir |*
1198*cdf0e10cSrcweir *************************************************************************/
1199*cdf0e10cSrcweir RscTupel::RscTupel( Atom nId, sal_uInt32 nTypeId, RscTop * pSuper )
1200*cdf0e10cSrcweir 	: RscClass( nId, nTypeId, pSuper )
1201*cdf0e10cSrcweir {}
1202*cdf0e10cSrcweir 
1203*cdf0e10cSrcweir /*************************************************************************
1204*cdf0e10cSrcweir |*
1205*cdf0e10cSrcweir |*	  RscTupel::GetTupelVar()
1206*cdf0e10cSrcweir |*
1207*cdf0e10cSrcweir |*	  Beschreibung
1208*cdf0e10cSrcweir |*
1209*cdf0e10cSrcweir *************************************************************************/
1210*cdf0e10cSrcweir RSCINST RscTupel::GetTupelVar( const RSCINST & rInst, sal_uInt32 nPos,
1211*cdf0e10cSrcweir 								 const RSCINST & rInitInst )
1212*cdf0e10cSrcweir {
1213*cdf0e10cSrcweir 	if( nPos >= nEntries )
1214*cdf0e10cSrcweir 	{
1215*cdf0e10cSrcweir 		return RSCINST();
1216*cdf0e10cSrcweir 	}
1217*cdf0e10cSrcweir 	else
1218*cdf0e10cSrcweir 		return GetVariable( rInst, pVarTypeList[ nPos ].nVarName, rInitInst );
1219*cdf0e10cSrcweir }
1220*cdf0e10cSrcweir 
1221*cdf0e10cSrcweir /*************************************************************************
1222*cdf0e10cSrcweir |*
1223*cdf0e10cSrcweir |*	  RscTupel::WriteSrc()
1224*cdf0e10cSrcweir |*
1225*cdf0e10cSrcweir |*	  Beschreibung
1226*cdf0e10cSrcweir |*
1227*cdf0e10cSrcweir *************************************************************************/
1228*cdf0e10cSrcweir void RscTupel::WriteSrc( const RSCINST & rInst, FILE * fOutput,
1229*cdf0e10cSrcweir 						 RscTypCont * pTC, sal_uInt32 nTab,
1230*cdf0e10cSrcweir 						 const char * pVarName )
1231*cdf0e10cSrcweir {
1232*cdf0e10cSrcweir 	sal_uInt32	i = 0;
1233*cdf0e10cSrcweir 	RSCINST aTmpI;
1234*cdf0e10cSrcweir 
1235*cdf0e10cSrcweir 	RscTop::WriteSrc( rInst, fOutput, pTC, nTab, pVarName );
1236*cdf0e10cSrcweir 
1237*cdf0e10cSrcweir 	fprintf( fOutput, "< " );
1238*cdf0e10cSrcweir 	for( i = 0; i < nEntries; i++ )
1239*cdf0e10cSrcweir 	{
1240*cdf0e10cSrcweir 		if( !(VAR_HIDDEN & pVarTypeList[ i ].nVarType) )
1241*cdf0e10cSrcweir 		{
1242*cdf0e10cSrcweir 			if( !IsDflt( rInst.pData, i )
1243*cdf0e10cSrcweir 			  && !IsValueDflt( rInst.pData, i ) )
1244*cdf0e10cSrcweir 			{
1245*cdf0e10cSrcweir 				aTmpI = GetInstData( rInst.pData, i, sal_True );
1246*cdf0e10cSrcweir 
1247*cdf0e10cSrcweir 				if( aTmpI.IsInst() )
1248*cdf0e10cSrcweir 					aTmpI.pClass->WriteSrcHeader(
1249*cdf0e10cSrcweir 							  aTmpI, fOutput, pTC, nTab, RscId(), pVarName );
1250*cdf0e10cSrcweir 				else
1251*cdf0e10cSrcweir 					fprintf( fOutput, "Default" );
1252*cdf0e10cSrcweir 			}
1253*cdf0e10cSrcweir 			else
1254*cdf0e10cSrcweir 				fprintf( fOutput, "Default" );
1255*cdf0e10cSrcweir 			fprintf( fOutput, "; " );
1256*cdf0e10cSrcweir 		};
1257*cdf0e10cSrcweir 	};
1258*cdf0e10cSrcweir 	fprintf( fOutput, ">" );
1259*cdf0e10cSrcweir 
1260*cdf0e10cSrcweir 	return;
1261*cdf0e10cSrcweir }
1262