xref: /trunk/main/rsc/source/res/rsccont.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 // Programmabh�ngige Includes.
38*cdf0e10cSrcweir #include <rsccont.hxx>
39*cdf0e10cSrcweir 
40*cdf0e10cSrcweir #include <tools/rcid.h>
41*cdf0e10cSrcweir 
42*cdf0e10cSrcweir /****************** C O D E **********************************************/
43*cdf0e10cSrcweir /****************** E N T R Y S T R U C T ********************************/
44*cdf0e10cSrcweir /*************************************************************************
45*cdf0e10cSrcweir |*
46*cdf0e10cSrcweir |*    ENTRYSTRUCT::Destroy()
47*cdf0e10cSrcweir |*
48*cdf0e10cSrcweir |*    Beschreibung
49*cdf0e10cSrcweir |*    Ersterstellung    MM 06.08.91
50*cdf0e10cSrcweir |*    Letzte Aenderung  MM 06.08.91
51*cdf0e10cSrcweir |*
52*cdf0e10cSrcweir *************************************************************************/
53*cdf0e10cSrcweir void ENTRY_STRUCT::Destroy()
54*cdf0e10cSrcweir {
55*cdf0e10cSrcweir     aName.Destroy();
56*cdf0e10cSrcweir     if( aInst.IsInst() ){
57*cdf0e10cSrcweir         aInst.pClass->Destroy( aInst );
58*cdf0e10cSrcweir         rtl_freeMemory( aInst.pData );
59*cdf0e10cSrcweir     };
60*cdf0e10cSrcweir }
61*cdf0e10cSrcweir 
62*cdf0e10cSrcweir /****************** R s c B a s e C o n t ********************************/
63*cdf0e10cSrcweir /*************************************************************************
64*cdf0e10cSrcweir |*
65*cdf0e10cSrcweir |*    RscBaseCont::RscBaseCont()
66*cdf0e10cSrcweir |*
67*cdf0e10cSrcweir |*    Beschreibung
68*cdf0e10cSrcweir |*    Ersterstellung    MM 25.05.91
69*cdf0e10cSrcweir |*    Letzte Aenderung  MM 25.05.91
70*cdf0e10cSrcweir |*
71*cdf0e10cSrcweir *************************************************************************/
72*cdf0e10cSrcweir RscBaseCont::RscBaseCont( Atom nId, sal_uInt32 nTypeId, RscTop * pSuper,
73*cdf0e10cSrcweir                           sal_Bool bNoIdent )
74*cdf0e10cSrcweir     : RscTop( nId, nTypeId, pSuper ),
75*cdf0e10cSrcweir       nSize( 0 )
76*cdf0e10cSrcweir {
77*cdf0e10cSrcweir     pTypeClass = NULL;
78*cdf0e10cSrcweir     pTypeClass1 = NULL;
79*cdf0e10cSrcweir     bNoId = bNoIdent;
80*cdf0e10cSrcweir     nOffInstData = RscTop::Size();
81*cdf0e10cSrcweir     nSize = nOffInstData + ALIGNED_SIZE( sizeof( RscBaseContInst ) );
82*cdf0e10cSrcweir }
83*cdf0e10cSrcweir 
84*cdf0e10cSrcweir /*************************************************************************
85*cdf0e10cSrcweir |*
86*cdf0e10cSrcweir |*    RscBaseCont::~RscBaseCont()
87*cdf0e10cSrcweir |*
88*cdf0e10cSrcweir |*    Beschreibung
89*cdf0e10cSrcweir |*    Ersterstellung    MM 25.05.91
90*cdf0e10cSrcweir |*    Letzte Aenderung  MM 25.05.91
91*cdf0e10cSrcweir |*
92*cdf0e10cSrcweir *************************************************************************/
93*cdf0e10cSrcweir RscBaseCont::~RscBaseCont()
94*cdf0e10cSrcweir {
95*cdf0e10cSrcweir }
96*cdf0e10cSrcweir 
97*cdf0e10cSrcweir /*************************************************************************
98*cdf0e10cSrcweir |*
99*cdf0e10cSrcweir |*    RscBaseCont::GetClassType()
100*cdf0e10cSrcweir |*
101*cdf0e10cSrcweir |*    Beschreibung
102*cdf0e10cSrcweir |*    Ersterstellung    MM 25.05.91
103*cdf0e10cSrcweir |*    Letzte Aenderung  MM 25.05.91
104*cdf0e10cSrcweir |*
105*cdf0e10cSrcweir *************************************************************************/
106*cdf0e10cSrcweir RSCCLASS_TYPE RscBaseCont::GetClassType() const
107*cdf0e10cSrcweir {
108*cdf0e10cSrcweir     return RSCCLASS_COMPLEX;
109*cdf0e10cSrcweir }
110*cdf0e10cSrcweir 
111*cdf0e10cSrcweir /*************************************************************************
112*cdf0e10cSrcweir |*
113*cdf0e10cSrcweir |*    DestroyElements()
114*cdf0e10cSrcweir |*
115*cdf0e10cSrcweir |*    Beschreibung
116*cdf0e10cSrcweir |*    Ersterstellung    MM 26.04.91
117*cdf0e10cSrcweir |*    Letzte Aenderung  MM 26.04.91
118*cdf0e10cSrcweir |*
119*cdf0e10cSrcweir *************************************************************************/
120*cdf0e10cSrcweir void RscBaseCont::DestroyElements( RscBaseContInst * pClassData )
121*cdf0e10cSrcweir {
122*cdf0e10cSrcweir     sal_uInt32  i = 0;
123*cdf0e10cSrcweir 
124*cdf0e10cSrcweir     if( pClassData->nEntries ){
125*cdf0e10cSrcweir         for( i = 0; i < pClassData->nEntries; i++ ){
126*cdf0e10cSrcweir             pClassData->pEntries[ i ].Destroy();
127*cdf0e10cSrcweir         };
128*cdf0e10cSrcweir         rtl_freeMemory( pClassData->pEntries );
129*cdf0e10cSrcweir         pClassData->pEntries = NULL;
130*cdf0e10cSrcweir         pClassData->nEntries = 0;
131*cdf0e10cSrcweir     };
132*cdf0e10cSrcweir }
133*cdf0e10cSrcweir 
134*cdf0e10cSrcweir /*************************************************************************
135*cdf0e10cSrcweir |*
136*cdf0e10cSrcweir |*    RscBaseCont::Create()
137*cdf0e10cSrcweir |*
138*cdf0e10cSrcweir |*    Beschreibung
139*cdf0e10cSrcweir |*    Ersterstellung    MM 26.04.91
140*cdf0e10cSrcweir |*    Letzte Aenderung  MM 26.04.91
141*cdf0e10cSrcweir |*
142*cdf0e10cSrcweir *************************************************************************/
143*cdf0e10cSrcweir RSCINST RscBaseCont::Create( RSCINST * pInst, const RSCINST & rDflt,
144*cdf0e10cSrcweir                              sal_Bool bOwnClass )
145*cdf0e10cSrcweir {
146*cdf0e10cSrcweir     sal_uInt32  i = 0;
147*cdf0e10cSrcweir     RSCINST aInst;
148*cdf0e10cSrcweir     RscBaseContInst * pClassData;
149*cdf0e10cSrcweir 
150*cdf0e10cSrcweir     if( !pInst ){
151*cdf0e10cSrcweir         aInst.pClass = this;
152*cdf0e10cSrcweir         aInst.pData = (CLASS_DATA) rtl_allocateMemory( Size() );
153*cdf0e10cSrcweir     }
154*cdf0e10cSrcweir     else
155*cdf0e10cSrcweir         aInst = *pInst;
156*cdf0e10cSrcweir     if( !bOwnClass && rDflt.IsInst() )
157*cdf0e10cSrcweir         bOwnClass = rDflt.pClass->InHierarchy( this );
158*cdf0e10cSrcweir 
159*cdf0e10cSrcweir     RscTop::Create( &aInst, rDflt, bOwnClass );
160*cdf0e10cSrcweir 
161*cdf0e10cSrcweir     pClassData = (RscBaseContInst *)(aInst.pData + nOffInstData);
162*cdf0e10cSrcweir     pClassData->nEntries = 0;
163*cdf0e10cSrcweir     pClassData->pEntries = NULL;
164*cdf0e10cSrcweir     pClassData->bDflt = sal_True;
165*cdf0e10cSrcweir 
166*cdf0e10cSrcweir     if( bOwnClass ){
167*cdf0e10cSrcweir         RscBaseContInst *   pDfltClassData;
168*cdf0e10cSrcweir         RSCINST         aDfltI;
169*cdf0e10cSrcweir 
170*cdf0e10cSrcweir         pDfltClassData = (RscBaseContInst *)(rDflt.pData + nOffInstData);
171*cdf0e10cSrcweir 
172*cdf0e10cSrcweir         if( 0 != pDfltClassData->nEntries ){
173*cdf0e10cSrcweir             *pClassData = *pDfltClassData;
174*cdf0e10cSrcweir             pClassData->pEntries =
175*cdf0e10cSrcweir                 (ENTRY_STRUCT *)rtl_allocateMemory( sizeof( ENTRY_STRUCT )
176*cdf0e10cSrcweir                                                 * pClassData->nEntries );
177*cdf0e10cSrcweir             for( i = 0; i < pClassData->nEntries; i++ ){
178*cdf0e10cSrcweir                 pClassData->pEntries[ i ].Create();
179*cdf0e10cSrcweir                 pClassData->pEntries[ i ].aName =
180*cdf0e10cSrcweir                                     pDfltClassData->pEntries[ i ].aName;
181*cdf0e10cSrcweir                 aDfltI = pDfltClassData->pEntries[ i ].aInst;
182*cdf0e10cSrcweir                 pClassData->pEntries[ i ].aInst =
183*cdf0e10cSrcweir                                     aDfltI.pClass->Create( NULL, aDfltI );
184*cdf0e10cSrcweir             };
185*cdf0e10cSrcweir         };
186*cdf0e10cSrcweir     }
187*cdf0e10cSrcweir 
188*cdf0e10cSrcweir     return( aInst );
189*cdf0e10cSrcweir }
190*cdf0e10cSrcweir 
191*cdf0e10cSrcweir /*************************************************************************
192*cdf0e10cSrcweir |*
193*cdf0e10cSrcweir |*    RscBaseCont::Destroy()
194*cdf0e10cSrcweir |*
195*cdf0e10cSrcweir |*    Beschreibung
196*cdf0e10cSrcweir |*    Ersterstellung    MM 25.05.91
197*cdf0e10cSrcweir |*    Letzte Aenderung  MM 25.05.91
198*cdf0e10cSrcweir |*
199*cdf0e10cSrcweir *************************************************************************/
200*cdf0e10cSrcweir void RscBaseCont::Destroy( const RSCINST & rInst ){
201*cdf0e10cSrcweir     RscBaseContInst * pClassData;
202*cdf0e10cSrcweir 
203*cdf0e10cSrcweir     RscTop::Destroy( rInst);
204*cdf0e10cSrcweir 
205*cdf0e10cSrcweir     pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
206*cdf0e10cSrcweir     DestroyElements( pClassData );
207*cdf0e10cSrcweir }
208*cdf0e10cSrcweir 
209*cdf0e10cSrcweir /*************************************************************************
210*cdf0e10cSrcweir |*
211*cdf0e10cSrcweir |*    RscBaseCont::SearchEle()
212*cdf0e10cSrcweir |*
213*cdf0e10cSrcweir |*    Beschreibung
214*cdf0e10cSrcweir |*    Ersterstellung    MM 17.05.91
215*cdf0e10cSrcweir |*    Letzte Aenderung  MM 17.05.91
216*cdf0e10cSrcweir |*
217*cdf0e10cSrcweir *************************************************************************/
218*cdf0e10cSrcweir RSCINST RscBaseCont::SearchElePos( const RSCINST & rInst, const RscId & rEleName,
219*cdf0e10cSrcweir                                    RscTop * pClass, sal_uInt32 nPos )
220*cdf0e10cSrcweir {
221*cdf0e10cSrcweir     sal_uInt32  i = 0;
222*cdf0e10cSrcweir     RscBaseContInst * pClassData;
223*cdf0e10cSrcweir 
224*cdf0e10cSrcweir     pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
225*cdf0e10cSrcweir     if( !pClass )
226*cdf0e10cSrcweir         pClass = pTypeClass;
227*cdf0e10cSrcweir 
228*cdf0e10cSrcweir     if( rEleName.IsId() ){
229*cdf0e10cSrcweir         for( i = nPos; i < pClassData->nEntries; i++ ){
230*cdf0e10cSrcweir             if( pClassData->pEntries[ i ].aName == rEleName
231*cdf0e10cSrcweir               && pClassData->pEntries[ i ].aInst.pClass == pClass )
232*cdf0e10cSrcweir             {
233*cdf0e10cSrcweir                 return( pClassData->pEntries[ i ].aInst );
234*cdf0e10cSrcweir             };
235*cdf0e10cSrcweir         };
236*cdf0e10cSrcweir     };
237*cdf0e10cSrcweir     return RSCINST();
238*cdf0e10cSrcweir }
239*cdf0e10cSrcweir 
240*cdf0e10cSrcweir /*************************************************************************
241*cdf0e10cSrcweir |*
242*cdf0e10cSrcweir |*    RscBaseCont::SearchEle()
243*cdf0e10cSrcweir |*
244*cdf0e10cSrcweir |*    Beschreibung
245*cdf0e10cSrcweir |*    Ersterstellung    MM 17.05.91
246*cdf0e10cSrcweir |*    Letzte Aenderung  MM 17.05.91
247*cdf0e10cSrcweir |*
248*cdf0e10cSrcweir *************************************************************************/
249*cdf0e10cSrcweir RSCINST RscBaseCont::SearchEle( const RSCINST & rInst, const RscId & rEleName,
250*cdf0e10cSrcweir                                 RscTop * pClass )
251*cdf0e10cSrcweir {
252*cdf0e10cSrcweir     return SearchElePos( rInst, rEleName, pClass, 0 );
253*cdf0e10cSrcweir }
254*cdf0e10cSrcweir 
255*cdf0e10cSrcweir /*************************************************************************
256*cdf0e10cSrcweir |*
257*cdf0e10cSrcweir |*    RscBaseCont::GetElement()
258*cdf0e10cSrcweir |*
259*cdf0e10cSrcweir |*    Beschreibung
260*cdf0e10cSrcweir |*    Ersterstellung    MM 26.04.91
261*cdf0e10cSrcweir |*    Letzte Aenderung  MM 26.04.91
262*cdf0e10cSrcweir |*
263*cdf0e10cSrcweir *************************************************************************/
264*cdf0e10cSrcweir ERRTYPE RscBaseCont::GetElement( const RSCINST & rInst, const RscId & rEleName,
265*cdf0e10cSrcweir                                  RscTop * pCreateClass,
266*cdf0e10cSrcweir                                  const RSCINST & rCreateInst, RSCINST * pGetInst )
267*cdf0e10cSrcweir {
268*cdf0e10cSrcweir     RscBaseContInst * pClassData;
269*cdf0e10cSrcweir     RSCINST           aTmpI;
270*cdf0e10cSrcweir     ERRTYPE           aError;
271*cdf0e10cSrcweir 
272*cdf0e10cSrcweir     if( !bNoId && !rEleName.IsId() )
273*cdf0e10cSrcweir         aError = WRN_CONT_NOID;
274*cdf0e10cSrcweir     pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
275*cdf0e10cSrcweir 
276*cdf0e10cSrcweir     if( pCreateClass ){
277*cdf0e10cSrcweir         if( !pCreateClass->InHierarchy( pTypeClass ) ){
278*cdf0e10cSrcweir             if( pTypeClass1 ){
279*cdf0e10cSrcweir                 if( !pCreateClass->InHierarchy( pTypeClass1 ) ){
280*cdf0e10cSrcweir                     // Falscher Typ
281*cdf0e10cSrcweir                     return ERR_CONT_INVALIDTYPE;
282*cdf0e10cSrcweir                 }
283*cdf0e10cSrcweir             }
284*cdf0e10cSrcweir             else{
285*cdf0e10cSrcweir                 // Falscher Typ
286*cdf0e10cSrcweir                 return ERR_CONT_INVALIDTYPE;
287*cdf0e10cSrcweir             };
288*cdf0e10cSrcweir         };
289*cdf0e10cSrcweir     }
290*cdf0e10cSrcweir     else
291*cdf0e10cSrcweir         pCreateClass = pTypeClass;
292*cdf0e10cSrcweir 
293*cdf0e10cSrcweir     pClassData->bDflt = sal_False;
294*cdf0e10cSrcweir     if( !bNoId )
295*cdf0e10cSrcweir         aTmpI = SearchEle( rInst, rEleName, pCreateClass );
296*cdf0e10cSrcweir     // Eintrag gefunden
297*cdf0e10cSrcweir     if( aTmpI.IsInst() ){
298*cdf0e10cSrcweir         aError = WRN_CONT_DOUBLEID;
299*cdf0e10cSrcweir         if( rCreateInst.IsInst() ){
300*cdf0e10cSrcweir             aTmpI.pClass->Destroy( aTmpI );
301*cdf0e10cSrcweir             aTmpI.pClass->Create( &aTmpI, rCreateInst );
302*cdf0e10cSrcweir         };
303*cdf0e10cSrcweir     }
304*cdf0e10cSrcweir     else {
305*cdf0e10cSrcweir         if( pClassData->pEntries ){
306*cdf0e10cSrcweir             pClassData->pEntries =
307*cdf0e10cSrcweir                 (ENTRY_STRUCT *)rtl_reallocateMemory( pClassData->pEntries,
308*cdf0e10cSrcweir                          sizeof( ENTRY_STRUCT ) * (pClassData->nEntries +1) );
309*cdf0e10cSrcweir         }
310*cdf0e10cSrcweir         else {
311*cdf0e10cSrcweir             pClassData->pEntries =
312*cdf0e10cSrcweir                 (ENTRY_STRUCT *)rtl_allocateMemory( sizeof( ENTRY_STRUCT )
313*cdf0e10cSrcweir                                                 * (pClassData->nEntries +1) );
314*cdf0e10cSrcweir         };
315*cdf0e10cSrcweir 
316*cdf0e10cSrcweir         pClassData->pEntries[ pClassData->nEntries ].Create();
317*cdf0e10cSrcweir         pClassData->pEntries[ pClassData->nEntries ].aName = rEleName;
318*cdf0e10cSrcweir 
319*cdf0e10cSrcweir         if( rCreateInst.IsInst() ){
320*cdf0e10cSrcweir             // Instanz mit CreateInst-Daten initialisieren
321*cdf0e10cSrcweir             pClassData->pEntries[ pClassData->nEntries ].aInst =
322*cdf0e10cSrcweir                         pCreateClass->Create( NULL, rCreateInst );
323*cdf0e10cSrcweir         }
324*cdf0e10cSrcweir         else {
325*cdf0e10cSrcweir             pClassData->pEntries[ pClassData->nEntries ].aInst =
326*cdf0e10cSrcweir                         pCreateClass->Create( NULL, RSCINST() );
327*cdf0e10cSrcweir         };
328*cdf0e10cSrcweir 
329*cdf0e10cSrcweir         pClassData->nEntries++;
330*cdf0e10cSrcweir         aTmpI = pClassData->pEntries[ pClassData->nEntries -1 ].aInst;
331*cdf0e10cSrcweir     }
332*cdf0e10cSrcweir 
333*cdf0e10cSrcweir     *pGetInst = aTmpI;
334*cdf0e10cSrcweir     return aError;
335*cdf0e10cSrcweir }
336*cdf0e10cSrcweir 
337*cdf0e10cSrcweir /*************************************************************************
338*cdf0e10cSrcweir |*
339*cdf0e10cSrcweir |*    RscBaseCont::GetCount()
340*cdf0e10cSrcweir |*
341*cdf0e10cSrcweir |*    Beschreibung
342*cdf0e10cSrcweir |*    Ersterstellung    MM 08.05.91
343*cdf0e10cSrcweir |*    Letzte Aenderung  MM 08.05.91
344*cdf0e10cSrcweir |*
345*cdf0e10cSrcweir *************************************************************************/
346*cdf0e10cSrcweir sal_uInt32 RscBaseCont::GetCount( const RSCINST & rInst ){
347*cdf0e10cSrcweir     RscBaseContInst * pClassData;
348*cdf0e10cSrcweir 
349*cdf0e10cSrcweir     pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
350*cdf0e10cSrcweir     return( pClassData->nEntries );
351*cdf0e10cSrcweir }
352*cdf0e10cSrcweir 
353*cdf0e10cSrcweir /*************************************************************************
354*cdf0e10cSrcweir |*
355*cdf0e10cSrcweir |*    RscBaseCont::GetPosEle()
356*cdf0e10cSrcweir |*
357*cdf0e10cSrcweir |*    Beschreibung
358*cdf0e10cSrcweir |*    Ersterstellung    MM 08.05.91
359*cdf0e10cSrcweir |*    Letzte Aenderung  MM 08.05.91
360*cdf0e10cSrcweir |*
361*cdf0e10cSrcweir *************************************************************************/
362*cdf0e10cSrcweir RSCINST RscBaseCont::GetPosEle( const RSCINST & rInst, sal_uInt32 nPos ){
363*cdf0e10cSrcweir     RscBaseContInst * pClassData;
364*cdf0e10cSrcweir 
365*cdf0e10cSrcweir     pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
366*cdf0e10cSrcweir 
367*cdf0e10cSrcweir     if( nPos < pClassData->nEntries )
368*cdf0e10cSrcweir         return( pClassData->pEntries[ nPos ].aInst );
369*cdf0e10cSrcweir     return RSCINST();
370*cdf0e10cSrcweir }
371*cdf0e10cSrcweir 
372*cdf0e10cSrcweir /*************************************************************************
373*cdf0e10cSrcweir |*
374*cdf0e10cSrcweir |*    RscBaseCont::MovePosEle()
375*cdf0e10cSrcweir |*
376*cdf0e10cSrcweir |*    Beschreibung
377*cdf0e10cSrcweir |*    Ersterstellung    MM 23.10.91
378*cdf0e10cSrcweir |*    Letzte Aenderung  MM 23.10.91
379*cdf0e10cSrcweir |*
380*cdf0e10cSrcweir *************************************************************************/
381*cdf0e10cSrcweir ERRTYPE RscBaseCont::MovePosEle( const RSCINST & rInst, sal_uInt32 nDestPos,
382*cdf0e10cSrcweir                                  sal_uInt32 nSourcePos )
383*cdf0e10cSrcweir {
384*cdf0e10cSrcweir     ERRTYPE aError;
385*cdf0e10cSrcweir     RscBaseContInst * pClassData;
386*cdf0e10cSrcweir 
387*cdf0e10cSrcweir     pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
388*cdf0e10cSrcweir 
389*cdf0e10cSrcweir     if( (nDestPos < pClassData->nEntries) && (nSourcePos < pClassData->nEntries) ){
390*cdf0e10cSrcweir         ENTRY_STRUCT aEntry;
391*cdf0e10cSrcweir         int          nInc = 1;
392*cdf0e10cSrcweir         sal_uInt32       i = 0;
393*cdf0e10cSrcweir 
394*cdf0e10cSrcweir         // Quelle Merken
395*cdf0e10cSrcweir         aEntry = pClassData->pEntries[ nSourcePos ];
396*cdf0e10cSrcweir         // Richtung der for-Schleife bestimmen
397*cdf0e10cSrcweir         if( nDestPos < nSourcePos )
398*cdf0e10cSrcweir             nInc = -1;
399*cdf0e10cSrcweir 
400*cdf0e10cSrcweir         for( i = nSourcePos; i != nDestPos; i += nInc )
401*cdf0e10cSrcweir             pClassData->pEntries[ i ] = pClassData->pEntries[ i + nInc ];
402*cdf0e10cSrcweir 
403*cdf0e10cSrcweir         // Zuweisung Quelle auf Ziel
404*cdf0e10cSrcweir         pClassData->pEntries[ nDestPos ] = aEntry;
405*cdf0e10cSrcweir     }
406*cdf0e10cSrcweir     else
407*cdf0e10cSrcweir         aError = ERR_RSCCONT;
408*cdf0e10cSrcweir     return aError;
409*cdf0e10cSrcweir }
410*cdf0e10cSrcweir 
411*cdf0e10cSrcweir /*************************************************************************
412*cdf0e10cSrcweir |*
413*cdf0e10cSrcweir |*    RscBaseCont::SetPosRscId()
414*cdf0e10cSrcweir |*
415*cdf0e10cSrcweir |*    Beschreibung
416*cdf0e10cSrcweir |*    Ersterstellung    MM 30.09.91
417*cdf0e10cSrcweir |*    Letzte Aenderung  MM 30.09.91
418*cdf0e10cSrcweir |*
419*cdf0e10cSrcweir *************************************************************************/
420*cdf0e10cSrcweir ERRTYPE RscBaseCont::SetPosRscId( const RSCINST & rInst, sal_uInt32 nPos,
421*cdf0e10cSrcweir                                   const RscId & rId ){
422*cdf0e10cSrcweir     RscBaseContInst * pClassData;
423*cdf0e10cSrcweir     RSCINST           aTmpI;
424*cdf0e10cSrcweir     ERRTYPE           aError;
425*cdf0e10cSrcweir 
426*cdf0e10cSrcweir     pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
427*cdf0e10cSrcweir 
428*cdf0e10cSrcweir     if( nPos < pClassData->nEntries ){
429*cdf0e10cSrcweir         if( ! (rId == pClassData->pEntries[ nPos ].aName) )
430*cdf0e10cSrcweir             aTmpI = SearchEle( rInst, rId,
431*cdf0e10cSrcweir                                pClassData->pEntries[ nPos ].aInst.pClass );
432*cdf0e10cSrcweir         if( !aTmpI.IsInst() )
433*cdf0e10cSrcweir             pClassData->pEntries[ nPos ].aName = rId;
434*cdf0e10cSrcweir         else
435*cdf0e10cSrcweir             aError = ERR_RSCCONT;
436*cdf0e10cSrcweir     }
437*cdf0e10cSrcweir     else
438*cdf0e10cSrcweir         aError = ERR_RSCCONT;
439*cdf0e10cSrcweir     return( aError );
440*cdf0e10cSrcweir }
441*cdf0e10cSrcweir 
442*cdf0e10cSrcweir /*************************************************************************
443*cdf0e10cSrcweir |*
444*cdf0e10cSrcweir |*    RscBaseCont::GetInfoEle()
445*cdf0e10cSrcweir |*
446*cdf0e10cSrcweir |*    Beschreibung
447*cdf0e10cSrcweir |*    Ersterstellung    MM 08.05.91
448*cdf0e10cSrcweir |*    Letzte Aenderung  MM 08.05.91
449*cdf0e10cSrcweir |*
450*cdf0e10cSrcweir *************************************************************************/
451*cdf0e10cSrcweir SUBINFO_STRUCT RscBaseCont::GetInfoEle( const RSCINST & rInst, sal_uInt32 nPos ){
452*cdf0e10cSrcweir     RscBaseContInst * pClassData;
453*cdf0e10cSrcweir     SUBINFO_STRUCT  aInfo;
454*cdf0e10cSrcweir 
455*cdf0e10cSrcweir     pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
456*cdf0e10cSrcweir 
457*cdf0e10cSrcweir     if( nPos < pClassData->nEntries ){
458*cdf0e10cSrcweir         aInfo.aId    = pClassData->pEntries[ nPos ].aName;
459*cdf0e10cSrcweir         aInfo.nPos   = nPos;
460*cdf0e10cSrcweir         aInfo.pClass = pClassData->pEntries[ nPos ].aInst.pClass;
461*cdf0e10cSrcweir     }
462*cdf0e10cSrcweir     return( aInfo );
463*cdf0e10cSrcweir }
464*cdf0e10cSrcweir 
465*cdf0e10cSrcweir /*************************************************************************
466*cdf0e10cSrcweir |*
467*cdf0e10cSrcweir |*    RscBaseCont::SetString()
468*cdf0e10cSrcweir |*
469*cdf0e10cSrcweir |*    Beschreibung
470*cdf0e10cSrcweir |*    Ersterstellung    MM 29.04.91
471*cdf0e10cSrcweir |*    Letzte Aenderung  MM 29.04.91
472*cdf0e10cSrcweir |*
473*cdf0e10cSrcweir *************************************************************************/
474*cdf0e10cSrcweir ERRTYPE RscBaseCont::SetString( const RSCINST & rInst, const char * pStr )
475*cdf0e10cSrcweir {
476*cdf0e10cSrcweir     RscBaseContInst * pClassData;
477*cdf0e10cSrcweir     RSCINST aTmpI;
478*cdf0e10cSrcweir     ERRTYPE aError;
479*cdf0e10cSrcweir     char    *pTmpStr;
480*cdf0e10cSrcweir 
481*cdf0e10cSrcweir     pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
482*cdf0e10cSrcweir 
483*cdf0e10cSrcweir //?B 040991
484*cdf0e10cSrcweir //?W 040991 sonst Endlosrekursion moeglich
485*cdf0e10cSrcweir if( RSC_NOTYPE == pTypeClass->GetTypId() ){
486*cdf0e10cSrcweir     aError = GetElement( rInst, RscId(), pTypeClass, RSCINST(), &aTmpI );
487*cdf0e10cSrcweir     aError = aTmpI.pClass->GetString( aTmpI, &pTmpStr );
488*cdf0e10cSrcweir     if( aError.IsOk() )
489*cdf0e10cSrcweir         aError = aTmpI.pClass->SetString( aTmpI, pStr );
490*cdf0e10cSrcweir     else {
491*cdf0e10cSrcweir         aError.Clear();
492*cdf0e10cSrcweir         DeletePos( rInst, pClassData->nEntries -1 );
493*cdf0e10cSrcweir         aError = GetElement( rInst, RscId(), pTypeClass1, RSCINST(), &aTmpI );
494*cdf0e10cSrcweir         aError = aTmpI.pClass->GetString( aTmpI, &pTmpStr );
495*cdf0e10cSrcweir         if( aError.IsOk() )
496*cdf0e10cSrcweir             aError = aTmpI.pClass->SetString( aTmpI, pStr );
497*cdf0e10cSrcweir     }
498*cdf0e10cSrcweir     if( aError.IsError() )
499*cdf0e10cSrcweir         DeletePos( rInst, pClassData->nEntries -1 );
500*cdf0e10cSrcweir }
501*cdf0e10cSrcweir else
502*cdf0e10cSrcweir     aError = ERR_UNKNOWN_METHOD;
503*cdf0e10cSrcweir 
504*cdf0e10cSrcweir     return( aError );
505*cdf0e10cSrcweir }
506*cdf0e10cSrcweir 
507*cdf0e10cSrcweir /*************************************************************************
508*cdf0e10cSrcweir |*
509*cdf0e10cSrcweir |*    RscBaseCont::SetNumber()
510*cdf0e10cSrcweir |*
511*cdf0e10cSrcweir |*    Beschreibung
512*cdf0e10cSrcweir |*    Ersterstellung    MM 12.06.91
513*cdf0e10cSrcweir |*    Letzte Aenderung  MM 12.06.91
514*cdf0e10cSrcweir |*
515*cdf0e10cSrcweir *************************************************************************/
516*cdf0e10cSrcweir ERRTYPE RscBaseCont::SetNumber( const RSCINST & rInst, sal_Int32 lValue ){
517*cdf0e10cSrcweir     RscBaseContInst * pClassData;
518*cdf0e10cSrcweir     RSCINST aTmpI;
519*cdf0e10cSrcweir     ERRTYPE aError;
520*cdf0e10cSrcweir     sal_Int32   lNumber;
521*cdf0e10cSrcweir 
522*cdf0e10cSrcweir     pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
523*cdf0e10cSrcweir 
524*cdf0e10cSrcweir //?B 040991
525*cdf0e10cSrcweir //?W 040991 sonst Endlosrekursion moeglich
526*cdf0e10cSrcweir if( RSC_NOTYPE == pTypeClass->GetTypId() ){
527*cdf0e10cSrcweir     aError = GetElement( rInst, RscId(), pTypeClass, RSCINST(), &aTmpI );
528*cdf0e10cSrcweir     aError = aTmpI.pClass->GetNumber( aTmpI, &lNumber );
529*cdf0e10cSrcweir     if( aError.IsOk() )
530*cdf0e10cSrcweir         aError = aTmpI.pClass->SetNumber( aTmpI, lValue );
531*cdf0e10cSrcweir     else {
532*cdf0e10cSrcweir         aError.Clear();
533*cdf0e10cSrcweir         DeletePos( rInst, pClassData->nEntries -1 );
534*cdf0e10cSrcweir         aError = GetElement( rInst, RscId(), pTypeClass1, RSCINST(), &aTmpI );
535*cdf0e10cSrcweir         aError = aTmpI.pClass->GetNumber( aTmpI, &lNumber );
536*cdf0e10cSrcweir         if( aError.IsOk() )
537*cdf0e10cSrcweir             aError = aTmpI.pClass->SetNumber( aTmpI, lValue );
538*cdf0e10cSrcweir     }
539*cdf0e10cSrcweir     if( aError.IsError() )
540*cdf0e10cSrcweir         DeletePos( rInst, pClassData->nEntries -1 );
541*cdf0e10cSrcweir }
542*cdf0e10cSrcweir else
543*cdf0e10cSrcweir     aError = ERR_UNKNOWN_METHOD;
544*cdf0e10cSrcweir 
545*cdf0e10cSrcweir     return( aError );
546*cdf0e10cSrcweir }
547*cdf0e10cSrcweir 
548*cdf0e10cSrcweir //==================================================================
549*cdf0e10cSrcweir ERRTYPE RscBaseCont::SetBool
550*cdf0e10cSrcweir (
551*cdf0e10cSrcweir     const RSCINST & rInst,
552*cdf0e10cSrcweir     sal_Bool bValue
553*cdf0e10cSrcweir )
554*cdf0e10cSrcweir {
555*cdf0e10cSrcweir     RscBaseContInst * pClassData;
556*cdf0e10cSrcweir     RSCINST aTmpI;
557*cdf0e10cSrcweir     ERRTYPE aError;
558*cdf0e10cSrcweir     sal_Bool    bBool;
559*cdf0e10cSrcweir 
560*cdf0e10cSrcweir     pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
561*cdf0e10cSrcweir 
562*cdf0e10cSrcweir //?B 040991
563*cdf0e10cSrcweir //?W 040991 sonst Endlosrekursion moeglich
564*cdf0e10cSrcweir if( RSC_NOTYPE == pTypeClass->GetTypId() )
565*cdf0e10cSrcweir {
566*cdf0e10cSrcweir     aError = GetElement( rInst, RscId(), pTypeClass, RSCINST(), &aTmpI );
567*cdf0e10cSrcweir     aError = aTmpI.pClass->GetBool( aTmpI, &bBool );
568*cdf0e10cSrcweir     if( aError.IsOk() )
569*cdf0e10cSrcweir         aError = aTmpI.pClass->SetBool( aTmpI, bValue );
570*cdf0e10cSrcweir     else {
571*cdf0e10cSrcweir         aError.Clear();
572*cdf0e10cSrcweir         DeletePos( rInst, pClassData->nEntries -1 );
573*cdf0e10cSrcweir         aError = GetElement( rInst, RscId(), pTypeClass1, RSCINST(), &aTmpI );
574*cdf0e10cSrcweir         aError = aTmpI.pClass->GetBool( aTmpI, &bBool );
575*cdf0e10cSrcweir         if( aError.IsOk() )
576*cdf0e10cSrcweir             aError = aTmpI.pClass->SetBool( aTmpI, bValue );
577*cdf0e10cSrcweir     }
578*cdf0e10cSrcweir     if( aError.IsError() )
579*cdf0e10cSrcweir         DeletePos( rInst, pClassData->nEntries -1 );
580*cdf0e10cSrcweir }
581*cdf0e10cSrcweir else
582*cdf0e10cSrcweir     aError = ERR_UNKNOWN_METHOD;
583*cdf0e10cSrcweir 
584*cdf0e10cSrcweir     return( aError );
585*cdf0e10cSrcweir }
586*cdf0e10cSrcweir 
587*cdf0e10cSrcweir //==================================================================
588*cdf0e10cSrcweir ERRTYPE RscBaseCont::SetConst
589*cdf0e10cSrcweir (
590*cdf0e10cSrcweir     const RSCINST & rInst,
591*cdf0e10cSrcweir     Atom nValueId,
592*cdf0e10cSrcweir     sal_Int32 lValue
593*cdf0e10cSrcweir )
594*cdf0e10cSrcweir {
595*cdf0e10cSrcweir     RscBaseContInst * pClassData;
596*cdf0e10cSrcweir     RSCINST aTmpI;
597*cdf0e10cSrcweir     ERRTYPE aError;
598*cdf0e10cSrcweir     Atom    nConst;
599*cdf0e10cSrcweir 
600*cdf0e10cSrcweir     pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
601*cdf0e10cSrcweir 
602*cdf0e10cSrcweir //?B 040991
603*cdf0e10cSrcweir //?W 040991 sonst Endlosrekursion moeglich
604*cdf0e10cSrcweir if( RSC_NOTYPE == pTypeClass->GetTypId() ){
605*cdf0e10cSrcweir     aError = GetElement( rInst, RscId(), pTypeClass, RSCINST(), &aTmpI );
606*cdf0e10cSrcweir     aError = aTmpI.pClass->GetConst( aTmpI, &nConst );
607*cdf0e10cSrcweir     if( aError.IsOk() )
608*cdf0e10cSrcweir         aError = aTmpI.pClass->SetConst( aTmpI, nValueId, lValue );
609*cdf0e10cSrcweir     else {
610*cdf0e10cSrcweir         aError.Clear();
611*cdf0e10cSrcweir         DeletePos( rInst, pClassData->nEntries -1 );
612*cdf0e10cSrcweir         aError = GetElement( rInst, RscId(), pTypeClass1, RSCINST(), &aTmpI );
613*cdf0e10cSrcweir         aError = aTmpI.pClass->GetConst( aTmpI, &nConst );
614*cdf0e10cSrcweir         if( aError.IsOk() )
615*cdf0e10cSrcweir             aError = aTmpI.pClass->SetConst( aTmpI, nValueId, lValue );
616*cdf0e10cSrcweir     }
617*cdf0e10cSrcweir     if( aError.IsError() )
618*cdf0e10cSrcweir         DeletePos( rInst, pClassData->nEntries -1 );
619*cdf0e10cSrcweir }
620*cdf0e10cSrcweir else
621*cdf0e10cSrcweir     aError = ERR_UNKNOWN_METHOD;
622*cdf0e10cSrcweir 
623*cdf0e10cSrcweir     return( aError );
624*cdf0e10cSrcweir }
625*cdf0e10cSrcweir 
626*cdf0e10cSrcweir /*************************************************************************
627*cdf0e10cSrcweir |*
628*cdf0e10cSrcweir |*    RscBaseCont::SetRef()
629*cdf0e10cSrcweir |*
630*cdf0e10cSrcweir |*    Beschreibung
631*cdf0e10cSrcweir |*    Ersterstellung    MM 02.12.91
632*cdf0e10cSrcweir |*    Letzte Aenderung  MM 02.12.91
633*cdf0e10cSrcweir |*
634*cdf0e10cSrcweir *************************************************************************/
635*cdf0e10cSrcweir ERRTYPE RscBaseCont::SetRef( const RSCINST & rInst, const RscId & rRefId ){
636*cdf0e10cSrcweir     RscBaseContInst * pClassData;
637*cdf0e10cSrcweir     RSCINST aTmpI;
638*cdf0e10cSrcweir     ERRTYPE aError;
639*cdf0e10cSrcweir     RscId   aId;
640*cdf0e10cSrcweir 
641*cdf0e10cSrcweir     pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
642*cdf0e10cSrcweir 
643*cdf0e10cSrcweir //?B 040991
644*cdf0e10cSrcweir //?W 040991 sonst Endlosrekursion moeglich
645*cdf0e10cSrcweir if( RSC_NOTYPE == pTypeClass->GetTypId() ){
646*cdf0e10cSrcweir     aError = GetElement( rInst, RscId(), pTypeClass, RSCINST(), &aTmpI );
647*cdf0e10cSrcweir     aError = aTmpI.pClass->GetRef( aTmpI, &aId );
648*cdf0e10cSrcweir     if( aError.IsOk() )
649*cdf0e10cSrcweir         aError = aTmpI.pClass->SetRef( aTmpI, rRefId );
650*cdf0e10cSrcweir     else {
651*cdf0e10cSrcweir         aError.Clear();
652*cdf0e10cSrcweir         DeletePos( rInst, pClassData->nEntries -1 );
653*cdf0e10cSrcweir         aError = GetElement( rInst, RscId(), pTypeClass1, RSCINST(), &aTmpI );
654*cdf0e10cSrcweir         aError = aTmpI.pClass->GetRef( aTmpI, &aId );
655*cdf0e10cSrcweir         if( aError.IsOk() )
656*cdf0e10cSrcweir             aError = aTmpI.pClass->SetNumber( aTmpI, rRefId );
657*cdf0e10cSrcweir     }
658*cdf0e10cSrcweir     if( aError.IsError() )
659*cdf0e10cSrcweir         DeletePos( rInst, pClassData->nEntries -1 );
660*cdf0e10cSrcweir }
661*cdf0e10cSrcweir else
662*cdf0e10cSrcweir     aError = ERR_UNKNOWN_METHOD;
663*cdf0e10cSrcweir 
664*cdf0e10cSrcweir     return( aError );
665*cdf0e10cSrcweir }
666*cdf0e10cSrcweir 
667*cdf0e10cSrcweir /*************************************************************************
668*cdf0e10cSrcweir |*
669*cdf0e10cSrcweir |*    RscBaseCont::IsConsistent()
670*cdf0e10cSrcweir |*
671*cdf0e10cSrcweir |*    Beschreibung
672*cdf0e10cSrcweir |*    Ersterstellung    MM 23.09.91
673*cdf0e10cSrcweir |*    Letzte Aenderung  MM 23.09.91
674*cdf0e10cSrcweir |*
675*cdf0e10cSrcweir *************************************************************************/
676*cdf0e10cSrcweir sal_Bool RscBaseCont::IsConsistent( const RSCINST & rInst, RscInconsList * pList ){
677*cdf0e10cSrcweir     sal_uInt32  i = 0;
678*cdf0e10cSrcweir     RscBaseContInst * pClassData;
679*cdf0e10cSrcweir     sal_Bool    bRet;
680*cdf0e10cSrcweir 
681*cdf0e10cSrcweir     bRet = RscTop::IsConsistent( rInst, pList );
682*cdf0e10cSrcweir 
683*cdf0e10cSrcweir     pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
684*cdf0e10cSrcweir 
685*cdf0e10cSrcweir     // auf doppelten Id Testen und Reihenfolge beibehalten
686*cdf0e10cSrcweir     // Komplexitaet = n^2 / 2
687*cdf0e10cSrcweir     for( i = 0; i < pClassData->nEntries; i++ ){
688*cdf0e10cSrcweir         if( !bNoId ){
689*cdf0e10cSrcweir             if( (sal_Int32)pClassData->pEntries[ i ].aName > 0x7FFF
690*cdf0e10cSrcweir               || (sal_Int32)pClassData->pEntries[ i ].aName < 1 ){
691*cdf0e10cSrcweir                 bRet = sal_False;
692*cdf0e10cSrcweir                 if( pList )
693*cdf0e10cSrcweir                     pList->Insert( new RscInconsistent(
694*cdf0e10cSrcweir                         pClassData->pEntries[ i ].aName,
695*cdf0e10cSrcweir                         pClassData->pEntries[ i ].aName ) );
696*cdf0e10cSrcweir             }
697*cdf0e10cSrcweir             else if( SearchElePos( rInst, pClassData->pEntries[ i ].aName,
698*cdf0e10cSrcweir                 pClassData->pEntries[ i ].aInst.pClass, i +1 ).IsInst() )
699*cdf0e10cSrcweir             {
700*cdf0e10cSrcweir                  bRet = sal_False;
701*cdf0e10cSrcweir                  if( pList )
702*cdf0e10cSrcweir                      pList->Insert( new RscInconsistent(
703*cdf0e10cSrcweir                          pClassData->pEntries[ i    ].aName,
704*cdf0e10cSrcweir                          pClassData->pEntries[ i +1 ].aName ) );
705*cdf0e10cSrcweir              };
706*cdf0e10cSrcweir         }
707*cdf0e10cSrcweir         if( ! pClassData->pEntries[ i ].aInst.pClass->
708*cdf0e10cSrcweir               IsConsistent( pClassData->pEntries[ i ].aInst, pList ) )
709*cdf0e10cSrcweir             bRet = sal_False;
710*cdf0e10cSrcweir     };
711*cdf0e10cSrcweir 
712*cdf0e10cSrcweir     return( bRet );
713*cdf0e10cSrcweir }
714*cdf0e10cSrcweir 
715*cdf0e10cSrcweir /*************************************************************************
716*cdf0e10cSrcweir |*
717*cdf0e10cSrcweir |*    RscBaseCont::SetToDefault()
718*cdf0e10cSrcweir |*
719*cdf0e10cSrcweir |*    Beschreibung
720*cdf0e10cSrcweir |*    Ersterstellung    MM 25.04.91
721*cdf0e10cSrcweir |*    Letzte Aenderung  MM 25.04.91
722*cdf0e10cSrcweir |*
723*cdf0e10cSrcweir *************************************************************************/
724*cdf0e10cSrcweir void RscBaseCont::SetToDefault( const RSCINST & rInst )
725*cdf0e10cSrcweir {
726*cdf0e10cSrcweir     sal_uInt32  i = 0;
727*cdf0e10cSrcweir     RscBaseContInst * pClassData;
728*cdf0e10cSrcweir 
729*cdf0e10cSrcweir     pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
730*cdf0e10cSrcweir 
731*cdf0e10cSrcweir     for( i = 0; i < pClassData->nEntries; i++ )
732*cdf0e10cSrcweir     {
733*cdf0e10cSrcweir         pClassData->pEntries[ i ].aInst.pClass->
734*cdf0e10cSrcweir                   SetToDefault( pClassData->pEntries[ i ].aInst );
735*cdf0e10cSrcweir     };
736*cdf0e10cSrcweir 
737*cdf0e10cSrcweir     RscTop::SetToDefault( rInst );
738*cdf0e10cSrcweir }
739*cdf0e10cSrcweir 
740*cdf0e10cSrcweir /*************************************************************************
741*cdf0e10cSrcweir |*
742*cdf0e10cSrcweir |*    RscBaseCont::IsDefault()
743*cdf0e10cSrcweir |*
744*cdf0e10cSrcweir |*    Beschreibung
745*cdf0e10cSrcweir |*    Ersterstellung    MM 25.04.91
746*cdf0e10cSrcweir |*    Letzte Aenderung  MM 25.04.91
747*cdf0e10cSrcweir |*
748*cdf0e10cSrcweir *************************************************************************/
749*cdf0e10cSrcweir sal_Bool RscBaseCont::IsDefault( const RSCINST & rInst ){
750*cdf0e10cSrcweir     sal_uInt32  i = 0;
751*cdf0e10cSrcweir     RscBaseContInst * pClassData;
752*cdf0e10cSrcweir 
753*cdf0e10cSrcweir     pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
754*cdf0e10cSrcweir 
755*cdf0e10cSrcweir     if( !pClassData->bDflt )
756*cdf0e10cSrcweir         return sal_False;
757*cdf0e10cSrcweir 
758*cdf0e10cSrcweir     for( i = 0; i < pClassData->nEntries; i++ ){
759*cdf0e10cSrcweir         if( ! pClassData->pEntries[ i ].aInst.pClass->
760*cdf0e10cSrcweir                   IsDefault( pClassData->pEntries[ i ].aInst ) )
761*cdf0e10cSrcweir         {
762*cdf0e10cSrcweir             return( sal_False );
763*cdf0e10cSrcweir         };
764*cdf0e10cSrcweir     };
765*cdf0e10cSrcweir 
766*cdf0e10cSrcweir     return( RscTop::IsDefault( rInst ) );
767*cdf0e10cSrcweir }
768*cdf0e10cSrcweir 
769*cdf0e10cSrcweir /*************************************************************************
770*cdf0e10cSrcweir |*
771*cdf0e10cSrcweir |*    RscBaseCont::IsValueDefault()
772*cdf0e10cSrcweir |*
773*cdf0e10cSrcweir |*    Beschreibung
774*cdf0e10cSrcweir |*    Ersterstellung    MM 25.04.91
775*cdf0e10cSrcweir |*    Letzte Aenderung  MM 15.01.92
776*cdf0e10cSrcweir |*
777*cdf0e10cSrcweir *************************************************************************/
778*cdf0e10cSrcweir sal_Bool RscBaseCont::IsValueDefault( const RSCINST & rInst, CLASS_DATA pDef )
779*cdf0e10cSrcweir {
780*cdf0e10cSrcweir     RscBaseContInst * pClassData;
781*cdf0e10cSrcweir 
782*cdf0e10cSrcweir     if( !RscTop::IsValueDefault( rInst, pDef ) )
783*cdf0e10cSrcweir         return sal_False;
784*cdf0e10cSrcweir 
785*cdf0e10cSrcweir     pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
786*cdf0e10cSrcweir 
787*cdf0e10cSrcweir     if( pClassData->nEntries )
788*cdf0e10cSrcweir         return sal_False;
789*cdf0e10cSrcweir     else
790*cdf0e10cSrcweir         return sal_True;
791*cdf0e10cSrcweir }
792*cdf0e10cSrcweir 
793*cdf0e10cSrcweir /*************************************************************************
794*cdf0e10cSrcweir |*
795*cdf0e10cSrcweir |*    RscBaseCont::Delete()
796*cdf0e10cSrcweir |*
797*cdf0e10cSrcweir |*    Beschreibung
798*cdf0e10cSrcweir |*    Ersterstellung    MM 12.06.91
799*cdf0e10cSrcweir |*    Letzte Aenderung  MM 12.06.91
800*cdf0e10cSrcweir |*
801*cdf0e10cSrcweir *************************************************************************/
802*cdf0e10cSrcweir void RscBaseCont::Delete( const RSCINST & rInst, RscTop * pClass,
803*cdf0e10cSrcweir                           const RscId & rId )
804*cdf0e10cSrcweir {
805*cdf0e10cSrcweir     sal_uInt32  i = 0;
806*cdf0e10cSrcweir     RscBaseContInst * pClassData;
807*cdf0e10cSrcweir 
808*cdf0e10cSrcweir     pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
809*cdf0e10cSrcweir     if( !pClass )
810*cdf0e10cSrcweir         pClass = pTypeClass;
811*cdf0e10cSrcweir 
812*cdf0e10cSrcweir     for( i = 0; i < pClassData->nEntries; i++ ){
813*cdf0e10cSrcweir         if( pClassData->pEntries[ i ].aName == rId )
814*cdf0e10cSrcweir             if( pClassData->pEntries[ i ].aInst.pClass == pClass || !pClass ){
815*cdf0e10cSrcweir                 DeletePos( rInst, i );
816*cdf0e10cSrcweir                 return;
817*cdf0e10cSrcweir             };
818*cdf0e10cSrcweir     };
819*cdf0e10cSrcweir 
820*cdf0e10cSrcweir }
821*cdf0e10cSrcweir 
822*cdf0e10cSrcweir /*************************************************************************
823*cdf0e10cSrcweir |*
824*cdf0e10cSrcweir |*    RscBaseCont::DeletePos()
825*cdf0e10cSrcweir |*
826*cdf0e10cSrcweir |*    Beschreibung
827*cdf0e10cSrcweir |*    Ersterstellung    MM 12.06.91
828*cdf0e10cSrcweir |*    Letzte Aenderung  MM 12.06.91
829*cdf0e10cSrcweir |*
830*cdf0e10cSrcweir *************************************************************************/
831*cdf0e10cSrcweir void RscBaseCont::DeletePos( const RSCINST & rInst, sal_uInt32 nPos ){
832*cdf0e10cSrcweir     RscBaseContInst *   pClassData;
833*cdf0e10cSrcweir     sal_uInt32              i = 0;
834*cdf0e10cSrcweir 
835*cdf0e10cSrcweir     pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
836*cdf0e10cSrcweir 
837*cdf0e10cSrcweir     if( nPos < pClassData->nEntries ){
838*cdf0e10cSrcweir         if( 1 == pClassData->nEntries )
839*cdf0e10cSrcweir             DestroyElements( pClassData );
840*cdf0e10cSrcweir         else{
841*cdf0e10cSrcweir             pClassData->pEntries[ nPos ].Destroy();
842*cdf0e10cSrcweir             pClassData->nEntries--;
843*cdf0e10cSrcweir             for( i = nPos; i < pClassData->nEntries; i++ )
844*cdf0e10cSrcweir                 pClassData->pEntries[ i ] = pClassData->pEntries[ i + 1 ];
845*cdf0e10cSrcweir         };
846*cdf0e10cSrcweir     };
847*cdf0e10cSrcweir }
848*cdf0e10cSrcweir 
849*cdf0e10cSrcweir /*************************************************************************
850*cdf0e10cSrcweir |*
851*cdf0e10cSrcweir |*    RscBaseCont::ContWriteSrc()
852*cdf0e10cSrcweir |*
853*cdf0e10cSrcweir |*    Beschreibung
854*cdf0e10cSrcweir |*    Ersterstellung    MM 26.04.91
855*cdf0e10cSrcweir |*    Letzte Aenderung  MM 26.04.91
856*cdf0e10cSrcweir |*
857*cdf0e10cSrcweir *************************************************************************/
858*cdf0e10cSrcweir void RscBaseCont::ContWriteSrc( const RSCINST & rInst, FILE * fOutput,
859*cdf0e10cSrcweir                                 RscTypCont * pTC, sal_uInt32 nTab,
860*cdf0e10cSrcweir                                 const char * pVarName )
861*cdf0e10cSrcweir {
862*cdf0e10cSrcweir     sal_uInt32  i = 0, t = 0;
863*cdf0e10cSrcweir     RscBaseContInst * pClassData;
864*cdf0e10cSrcweir 
865*cdf0e10cSrcweir     pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
866*cdf0e10cSrcweir 
867*cdf0e10cSrcweir     for( i = 0; i < pClassData->nEntries; i++ )
868*cdf0e10cSrcweir     {
869*cdf0e10cSrcweir         for( t = 0; t < nTab; t++ )
870*cdf0e10cSrcweir             fputc( '\t', fOutput );
871*cdf0e10cSrcweir         pClassData->pEntries[ i ].aInst.pClass->
872*cdf0e10cSrcweir                   WriteSrcHeader( pClassData->pEntries[ i ].aInst,
873*cdf0e10cSrcweir                                   fOutput, pTC, nTab,
874*cdf0e10cSrcweir                                   pClassData->pEntries[ i ].aName, pVarName );
875*cdf0e10cSrcweir         fprintf( fOutput, ";\n" );
876*cdf0e10cSrcweir     };
877*cdf0e10cSrcweir }
878*cdf0e10cSrcweir 
879*cdf0e10cSrcweir /*************************************************************************
880*cdf0e10cSrcweir |*
881*cdf0e10cSrcweir |*    RscBaseCont::ContWriteRc()
882*cdf0e10cSrcweir |*
883*cdf0e10cSrcweir |*    Beschreibung
884*cdf0e10cSrcweir |*    Ersterstellung    MM 26.04.91
885*cdf0e10cSrcweir |*    Letzte Aenderung  MM 26.04.91
886*cdf0e10cSrcweir |*
887*cdf0e10cSrcweir *************************************************************************/
888*cdf0e10cSrcweir ERRTYPE RscBaseCont::ContWriteRc( const RSCINST & rInst, RscWriteRc & rMem,
889*cdf0e10cSrcweir                               RscTypCont * pTC, sal_uInt32 nDeep, sal_Bool bExtra )
890*cdf0e10cSrcweir {
891*cdf0e10cSrcweir     sal_uInt32        i = 0;
892*cdf0e10cSrcweir     RscBaseContInst * pClassData;
893*cdf0e10cSrcweir     ERRTYPE       aError;
894*cdf0e10cSrcweir 
895*cdf0e10cSrcweir     if( bExtra || bNoId )
896*cdf0e10cSrcweir     { // Nur Subresourcen schreiben, wenn bExtra == sal_True
897*cdf0e10cSrcweir         pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
898*cdf0e10cSrcweir 
899*cdf0e10cSrcweir         for( i = 0; i < pClassData->nEntries && aError.IsOk(); i++ ){
900*cdf0e10cSrcweir             aError = pClassData->pEntries[ i ].aInst.pClass->
901*cdf0e10cSrcweir                          WriteRcHeader( pClassData->pEntries[ i ].aInst,
902*cdf0e10cSrcweir                                         rMem, pTC,
903*cdf0e10cSrcweir                                         pClassData->pEntries[ i ].aName,
904*cdf0e10cSrcweir                                         nDeep, bExtra );
905*cdf0e10cSrcweir         }
906*cdf0e10cSrcweir     }
907*cdf0e10cSrcweir 
908*cdf0e10cSrcweir     return( aError );
909*cdf0e10cSrcweir }
910*cdf0e10cSrcweir 
911*cdf0e10cSrcweir //==================================================================
912*cdf0e10cSrcweir void RscBaseCont::ContWriteRcAccess
913*cdf0e10cSrcweir (
914*cdf0e10cSrcweir     FILE * fOutput,
915*cdf0e10cSrcweir     RscTypCont * pTC,
916*cdf0e10cSrcweir     const char * pName,
917*cdf0e10cSrcweir     sal_Bool bWriteSize
918*cdf0e10cSrcweir )
919*cdf0e10cSrcweir {
920*cdf0e10cSrcweir     if( (bNoId || bWriteSize) && !pTypeClass1 )
921*cdf0e10cSrcweir     {
922*cdf0e10cSrcweir         fprintf( fOutput, "\t\tsal_uInt32 nItems = *(sal_uInt32 *)(pResData+nOffset) );\n" );
923*cdf0e10cSrcweir         fprintf( fOutput, "\t\tnOffset += sizeof( sal_uInt32 );\n" );
924*cdf0e10cSrcweir 
925*cdf0e10cSrcweir         fprintf( fOutput, "\t\t// Items hinzufuegen\n" );
926*cdf0e10cSrcweir         fprintf( fOutput, "\t\tfor( sal_uInt32 i = 0; i < nItems; i++ )\n" );
927*cdf0e10cSrcweir         fprintf( fOutput, "\t\t{\n" );
928*cdf0e10cSrcweir         pTypeClass->WriteRcAccess( fOutput, pTC, "Item" );
929*cdf0e10cSrcweir         fprintf( fOutput, "\t\t}\n" );
930*cdf0e10cSrcweir     }
931*cdf0e10cSrcweir     else
932*cdf0e10cSrcweir     {
933*cdf0e10cSrcweir         fprintf( fOutput, "\t\tSet%s( %s ", pName, pHS->getString( GetId() ).getStr() );
934*cdf0e10cSrcweir         fprintf( fOutput, "%s ", aCallPar2.GetBuffer() );
935*cdf0e10cSrcweir         fprintf( fOutput, "ResId( (RSHEADER_TYPE*)(pResData+nOffset) ) ) );\n" );
936*cdf0e10cSrcweir         fprintf( fOutput, "\t\tnOffset += GetObjSizeRes( (RSHEADER_TYPE*)(pResData+nOffset) );\n" );
937*cdf0e10cSrcweir     }
938*cdf0e10cSrcweir }
939*cdf0e10cSrcweir 
940*cdf0e10cSrcweir 
941*cdf0e10cSrcweir /*************************************************************************
942*cdf0e10cSrcweir |*
943*cdf0e10cSrcweir |*    RscBaseCont::WriteSrc()
944*cdf0e10cSrcweir |*
945*cdf0e10cSrcweir |*    Beschreibung
946*cdf0e10cSrcweir |*    Ersterstellung    MM 26.04.91
947*cdf0e10cSrcweir |*    Letzte Aenderung  MM 26.04.91
948*cdf0e10cSrcweir |*
949*cdf0e10cSrcweir *************************************************************************/
950*cdf0e10cSrcweir void RscBaseCont::WriteSrc( const RSCINST & rInst, FILE * fOutput,
951*cdf0e10cSrcweir                             RscTypCont * pTC, sal_uInt32 nTab,
952*cdf0e10cSrcweir                             const char * pVarName )
953*cdf0e10cSrcweir {
954*cdf0e10cSrcweir     RscTop::WriteSrc( rInst, fOutput, pTC, nTab, pVarName );
955*cdf0e10cSrcweir     ContWriteSrc( rInst, fOutput, pTC, nTab, pVarName );
956*cdf0e10cSrcweir }
957*cdf0e10cSrcweir 
958*cdf0e10cSrcweir /*************************************************************************
959*cdf0e10cSrcweir |*
960*cdf0e10cSrcweir |*    RscBaseCont::WriteRc()
961*cdf0e10cSrcweir |*
962*cdf0e10cSrcweir |*    Beschreibung
963*cdf0e10cSrcweir |*    Ersterstellung    MM 26.04.91
964*cdf0e10cSrcweir |*    Letzte Aenderung  MM 26.04.91
965*cdf0e10cSrcweir |*
966*cdf0e10cSrcweir *************************************************************************/
967*cdf0e10cSrcweir ERRTYPE RscBaseCont::WriteRc( const RSCINST & rInst, RscWriteRc & rMem,
968*cdf0e10cSrcweir                               RscTypCont * pTC, sal_uInt32 nDeep, sal_Bool bExtra )
969*cdf0e10cSrcweir {
970*cdf0e10cSrcweir     ERRTYPE       aError;
971*cdf0e10cSrcweir 
972*cdf0e10cSrcweir     aError = RscTop::WriteRc( rInst, rMem, pTC, nDeep, bExtra );
973*cdf0e10cSrcweir     if( aError.IsOk() )
974*cdf0e10cSrcweir         aError = ContWriteRc( rInst, rMem, pTC, nDeep, bExtra );
975*cdf0e10cSrcweir 
976*cdf0e10cSrcweir     return( aError );
977*cdf0e10cSrcweir }
978*cdf0e10cSrcweir 
979*cdf0e10cSrcweir /*************************************************************************
980*cdf0e10cSrcweir |*
981*cdf0e10cSrcweir |*    RscBaseCont::WriteHxx()
982*cdf0e10cSrcweir |*
983*cdf0e10cSrcweir |*    Beschreibung
984*cdf0e10cSrcweir |*    Ersterstellung    MM 26.04.91
985*cdf0e10cSrcweir |*    Letzte Aenderung  MM 26.04.91
986*cdf0e10cSrcweir |*
987*cdf0e10cSrcweir *************************************************************************/
988*cdf0e10cSrcweir ERRTYPE RscBaseCont::WriteHxx( const RSCINST & rInst, FILE * fOutput,
989*cdf0e10cSrcweir                                RscTypCont * pTC, const RscId & rRscId )
990*cdf0e10cSrcweir {
991*cdf0e10cSrcweir     sal_uInt32        i = 0;
992*cdf0e10cSrcweir     RscBaseContInst * pClassData;
993*cdf0e10cSrcweir     ERRTYPE       aError;
994*cdf0e10cSrcweir 
995*cdf0e10cSrcweir     aError = RscTop::WriteHxx( rInst, fOutput, pTC, rRscId );
996*cdf0e10cSrcweir 
997*cdf0e10cSrcweir     pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
998*cdf0e10cSrcweir 
999*cdf0e10cSrcweir     for( i = 0; i < pClassData->nEntries && aError.IsOk(); i++ )
1000*cdf0e10cSrcweir     {
1001*cdf0e10cSrcweir         if( pClassData->pEntries[ i ].aName.IsId()
1002*cdf0e10cSrcweir           && pClassData->pEntries[ i ].aInst.pClass->IsCodeWriteable() )
1003*cdf0e10cSrcweir         {
1004*cdf0e10cSrcweir             aError = pClassData->pEntries[ i ].aInst.pClass->
1005*cdf0e10cSrcweir                          WriteHxx( pClassData->pEntries[ i ].aInst,
1006*cdf0e10cSrcweir                                    fOutput, pTC,
1007*cdf0e10cSrcweir                                    pClassData->pEntries[ i ].aName );
1008*cdf0e10cSrcweir         }
1009*cdf0e10cSrcweir     };
1010*cdf0e10cSrcweir 
1011*cdf0e10cSrcweir     return( aError );
1012*cdf0e10cSrcweir }
1013*cdf0e10cSrcweir 
1014*cdf0e10cSrcweir /*************************************************************************
1015*cdf0e10cSrcweir |*
1016*cdf0e10cSrcweir |*    RscBaseCont::WriteCxx()
1017*cdf0e10cSrcweir |*
1018*cdf0e10cSrcweir |*    Beschreibung
1019*cdf0e10cSrcweir |*    Ersterstellung    MM 26.04.91
1020*cdf0e10cSrcweir |*    Letzte Aenderung  MM 26.04.91
1021*cdf0e10cSrcweir |*
1022*cdf0e10cSrcweir *************************************************************************/
1023*cdf0e10cSrcweir ERRTYPE RscBaseCont::WriteCxx( const RSCINST & rInst, FILE * fOutput,
1024*cdf0e10cSrcweir                                RscTypCont * pTC, const RscId & rRscId )
1025*cdf0e10cSrcweir {
1026*cdf0e10cSrcweir     sal_uInt32        i = 0;
1027*cdf0e10cSrcweir     RscBaseContInst * pClassData;
1028*cdf0e10cSrcweir     ERRTYPE       aError;
1029*cdf0e10cSrcweir 
1030*cdf0e10cSrcweir     aError = RscTop::WriteCxx( rInst, fOutput, pTC, rRscId );
1031*cdf0e10cSrcweir 
1032*cdf0e10cSrcweir     pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
1033*cdf0e10cSrcweir 
1034*cdf0e10cSrcweir     for( i = 0; i < pClassData->nEntries && aError.IsOk(); i++ )
1035*cdf0e10cSrcweir     {
1036*cdf0e10cSrcweir         if( pClassData->pEntries[ i ].aName.IsId()
1037*cdf0e10cSrcweir           && pClassData->pEntries[ i ].aInst.pClass->IsCodeWriteable() )
1038*cdf0e10cSrcweir         {
1039*cdf0e10cSrcweir             aError = pClassData->pEntries[ i ].aInst.pClass->
1040*cdf0e10cSrcweir                          WriteCxx( pClassData->pEntries[ i ].aInst,
1041*cdf0e10cSrcweir                                    fOutput, pTC,
1042*cdf0e10cSrcweir                                    pClassData->pEntries[ i ].aName );
1043*cdf0e10cSrcweir         }
1044*cdf0e10cSrcweir     };
1045*cdf0e10cSrcweir 
1046*cdf0e10cSrcweir     return( aError );
1047*cdf0e10cSrcweir }
1048*cdf0e10cSrcweir 
1049*cdf0e10cSrcweir /*************** R s c C o n t W r i t e S r c ***************************/
1050*cdf0e10cSrcweir /*************************************************************************
1051*cdf0e10cSrcweir |*
1052*cdf0e10cSrcweir |*    RscContWriteSrc::RscContWriteSrc()
1053*cdf0e10cSrcweir |*
1054*cdf0e10cSrcweir |*    Beschreibung
1055*cdf0e10cSrcweir |*    Ersterstellung    MM 08.05.91
1056*cdf0e10cSrcweir |*    Letzte Aenderung  MM 08.05.91
1057*cdf0e10cSrcweir |*
1058*cdf0e10cSrcweir *************************************************************************/
1059*cdf0e10cSrcweir RscContWriteSrc::RscContWriteSrc( Atom nId, sal_uInt32 nTypeId,
1060*cdf0e10cSrcweir                                  RscTop * pSuper, sal_Bool bNoIdent )
1061*cdf0e10cSrcweir                   : RscBaseCont( nId, nTypeId, pSuper, bNoIdent )
1062*cdf0e10cSrcweir {}
1063*cdf0e10cSrcweir 
1064*cdf0e10cSrcweir /*************************************************************************
1065*cdf0e10cSrcweir |*
1066*cdf0e10cSrcweir |*    RscContWriteSrc::WriteSrc()
1067*cdf0e10cSrcweir |*
1068*cdf0e10cSrcweir |*    Beschreibung
1069*cdf0e10cSrcweir |*    Ersterstellung    MM 08.05.91
1070*cdf0e10cSrcweir |*    Letzte Aenderung  MM 08.05.91
1071*cdf0e10cSrcweir |*
1072*cdf0e10cSrcweir *************************************************************************/
1073*cdf0e10cSrcweir void RscContWriteSrc::WriteSrc( const RSCINST & rInst, FILE * fOutput,
1074*cdf0e10cSrcweir                                 RscTypCont * pTC, sal_uInt32 nTab,
1075*cdf0e10cSrcweir                                 const char * pVarName )
1076*cdf0e10cSrcweir {
1077*cdf0e10cSrcweir     sal_uInt32  i;
1078*cdf0e10cSrcweir 
1079*cdf0e10cSrcweir     RscTop::WriteSrc( rInst, fOutput, pTC, nTab, pVarName );
1080*cdf0e10cSrcweir 
1081*cdf0e10cSrcweir     fprintf( fOutput, "\n" );
1082*cdf0e10cSrcweir     for( i = 0; i < nTab; i++ )
1083*cdf0e10cSrcweir         fputc( '\t', fOutput );
1084*cdf0e10cSrcweir     fprintf( fOutput, "{\n" );
1085*cdf0e10cSrcweir 
1086*cdf0e10cSrcweir     ContWriteSrc( rInst, fOutput, pTC, nTab +1, pVarName );
1087*cdf0e10cSrcweir 
1088*cdf0e10cSrcweir     for( i = 0; i < nTab; i++ )
1089*cdf0e10cSrcweir         fputc( '\t', fOutput );
1090*cdf0e10cSrcweir     fprintf( fOutput, "}" );
1091*cdf0e10cSrcweir }
1092*cdf0e10cSrcweir 
1093*cdf0e10cSrcweir /*************** R s c C o n t *******************************************/
1094*cdf0e10cSrcweir /*************************************************************************
1095*cdf0e10cSrcweir |*
1096*cdf0e10cSrcweir |*    RscCont::RscCont()
1097*cdf0e10cSrcweir |*
1098*cdf0e10cSrcweir |*    Beschreibung
1099*cdf0e10cSrcweir |*    Ersterstellung    MM 08.05.91
1100*cdf0e10cSrcweir |*    Letzte Aenderung  MM 08.05.91
1101*cdf0e10cSrcweir |*
1102*cdf0e10cSrcweir *************************************************************************/
1103*cdf0e10cSrcweir RscCont::RscCont( Atom nId, sal_uInt32 nTypeId, RscTop * pSuper, sal_Bool bNoIdent )
1104*cdf0e10cSrcweir               : RscContWriteSrc( nId, nTypeId, pSuper, bNoIdent )
1105*cdf0e10cSrcweir {}
1106*cdf0e10cSrcweir 
1107*cdf0e10cSrcweir /*************************************************************************
1108*cdf0e10cSrcweir |*
1109*cdf0e10cSrcweir |*    RscCont::WriteRc()
1110*cdf0e10cSrcweir |*
1111*cdf0e10cSrcweir |*    Beschreibung
1112*cdf0e10cSrcweir |*    Ersterstellung    MM 08.05.91
1113*cdf0e10cSrcweir |*    Letzte Aenderung  MM 08.05.91
1114*cdf0e10cSrcweir |*
1115*cdf0e10cSrcweir *************************************************************************/
1116*cdf0e10cSrcweir ERRTYPE RscCont::WriteRc( const RSCINST & rInst, RscWriteRc & rMem,
1117*cdf0e10cSrcweir                                  RscTypCont * pTC, sal_uInt32 nDeep, sal_Bool bExtra )
1118*cdf0e10cSrcweir {
1119*cdf0e10cSrcweir     RscBaseContInst * pClassData;
1120*cdf0e10cSrcweir     ERRTYPE aError;
1121*cdf0e10cSrcweir 
1122*cdf0e10cSrcweir     aError = RscTop::WriteRc( rInst, rMem, pTC, nDeep, bExtra );
1123*cdf0e10cSrcweir 
1124*cdf0e10cSrcweir     pClassData = (RscBaseContInst *)(rInst.pData + nOffInstData);
1125*cdf0e10cSrcweir 
1126*cdf0e10cSrcweir     rMem.Put( pClassData->nEntries );
1127*cdf0e10cSrcweir 
1128*cdf0e10cSrcweir     if( aError.IsOk() )
1129*cdf0e10cSrcweir         aError = ContWriteRc( rInst, rMem, pTC, nDeep, bExtra );
1130*cdf0e10cSrcweir 
1131*cdf0e10cSrcweir     return aError;
1132*cdf0e10cSrcweir }
1133*cdf0e10cSrcweir 
1134*cdf0e10cSrcweir //==================================================================
1135*cdf0e10cSrcweir void RscCont::WriteRcAccess
1136*cdf0e10cSrcweir (
1137*cdf0e10cSrcweir     FILE * fOutput,
1138*cdf0e10cSrcweir     RscTypCont * pTC,
1139*cdf0e10cSrcweir     const char * pName
1140*cdf0e10cSrcweir )
1141*cdf0e10cSrcweir {
1142*cdf0e10cSrcweir     ContWriteRcAccess( fOutput, pTC, pName, sal_True );
1143*cdf0e10cSrcweir }
1144*cdf0e10cSrcweir 
1145*cdf0e10cSrcweir /*************************************************************************
1146*cdf0e10cSrcweir |*
1147*cdf0e10cSrcweir |*    RscContExtraData::RscContExtraData()
1148*cdf0e10cSrcweir |*
1149*cdf0e10cSrcweir |*    Beschreibung
1150*cdf0e10cSrcweir |*    Ersterstellung    MM 08.05.91
1151*cdf0e10cSrcweir |*    Letzte Aenderung  MM 08.05.91
1152*cdf0e10cSrcweir |*
1153*cdf0e10cSrcweir *************************************************************************/
1154*cdf0e10cSrcweir RscContExtraData::RscContExtraData( Atom nId, sal_uInt32 nTypeId,
1155*cdf0e10cSrcweir                              RscTop * pSuper, sal_Bool bNoIdent )
1156*cdf0e10cSrcweir                      : RscContWriteSrc( nId, nTypeId, pSuper, bNoIdent )
1157*cdf0e10cSrcweir {}
1158*cdf0e10cSrcweir 
1159*cdf0e10cSrcweir /*************************************************************************
1160*cdf0e10cSrcweir |*
1161*cdf0e10cSrcweir |*    RscContExtraData::WriteRc()
1162*cdf0e10cSrcweir |*
1163*cdf0e10cSrcweir |*    Beschreibung
1164*cdf0e10cSrcweir |*    Ersterstellung    MM 08.05.91
1165*cdf0e10cSrcweir |*    Letzte Aenderung  MM 08.05.91
1166*cdf0e10cSrcweir |*
1167*cdf0e10cSrcweir *************************************************************************/
1168*cdf0e10cSrcweir ERRTYPE RscContExtraData::WriteRc( const RSCINST & rInst, RscWriteRc & rMem,
1169*cdf0e10cSrcweir                              RscTypCont * pTC, sal_uInt32 nDeep, sal_Bool bExtra )
1170*cdf0e10cSrcweir {
1171*cdf0e10cSrcweir     ERRTYPE aError;
1172*cdf0e10cSrcweir 
1173*cdf0e10cSrcweir     if( bExtra )
1174*cdf0e10cSrcweir         aError = RscContWriteSrc::WriteRc( rInst, rMem, pTC, nDeep, bExtra );
1175*cdf0e10cSrcweir     else
1176*cdf0e10cSrcweir         aError = RscTop::WriteRc( rInst, rMem, pTC, nDeep, bExtra );
1177*cdf0e10cSrcweir 
1178*cdf0e10cSrcweir     return aError;
1179*cdf0e10cSrcweir }
1180