xref: /aoo4110/main/rsc/inc/rscinst.hxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski #ifndef _RSCINST_HXX
24*b1cdbd2cSJim Jagielski #define _RSCINST_HXX
25*b1cdbd2cSJim Jagielski 
26*b1cdbd2cSJim Jagielski #include <rscall.h>
27*b1cdbd2cSJim Jagielski #include <rscerror.h>
28*b1cdbd2cSJim Jagielski #include <rsctools.hxx>
29*b1cdbd2cSJim Jagielski 
30*b1cdbd2cSJim Jagielski /******************* C l a s s e s	 F o r w a r d s *********************/
31*b1cdbd2cSJim Jagielski class RscTypCont;
32*b1cdbd2cSJim Jagielski class RscCmdLine;
33*b1cdbd2cSJim Jagielski class REResourceList;
34*b1cdbd2cSJim Jagielski class RscTop;
35*b1cdbd2cSJim Jagielski class RscInstCopy;
36*b1cdbd2cSJim Jagielski 
37*b1cdbd2cSJim Jagielski /******************* F u n c t i o n   F o r w a r d s *******************/
38*b1cdbd2cSJim Jagielski Atom HashId( const char * );		  // Gibt zu einem String eine HashId
39*b1cdbd2cSJim Jagielski const char * GetHashString( Atom ); // Gibt zu einer Atom einen String
40*b1cdbd2cSJim Jagielski 									  // NULL, wenn kein Eintrag vorhanden
41*b1cdbd2cSJim Jagielski 
42*b1cdbd2cSJim Jagielski /******************* S t r u c t s ***************************************/
43*b1cdbd2cSJim Jagielski 
44*b1cdbd2cSJim Jagielski /****************** C L A S S E S ****************************************/
45*b1cdbd2cSJim Jagielski class RscInst
46*b1cdbd2cSJim Jagielski {
47*b1cdbd2cSJim Jagielski 	void			MakeCopy( RSCINST aCopyInst );
48*b1cdbd2cSJim Jagielski 	static RSCINST	GetSysLangInst( RSCINST & rInst );
49*b1cdbd2cSJim Jagielski public:
50*b1cdbd2cSJim Jagielski 	RSCINST 	aInst;
51*b1cdbd2cSJim Jagielski 
52*b1cdbd2cSJim Jagielski 				RscInst();
53*b1cdbd2cSJim Jagielski 				RscInst( const RscInst & rInst );
54*b1cdbd2cSJim Jagielski 				RscInst( RSCINST aTmpI );
55*b1cdbd2cSJim Jagielski 	RscInst&	operator =	( const RscInst& rRscInst );
56*b1cdbd2cSJim Jagielski 				~RscInst();
57*b1cdbd2cSJim Jagielski 	void		OverWrite( RscInstCopy & rInst );
IsInst() const58*b1cdbd2cSJim Jagielski 	sal_Bool		IsInst() const { return( aInst.IsInst() ); }
59*b1cdbd2cSJim Jagielski 
60*b1cdbd2cSJim Jagielski 				// Listen Methoden
61*b1cdbd2cSJim Jagielski 	ERRTYPE 	SetElement( const RscId & rName, RscInstCopy & rInst );
62*b1cdbd2cSJim Jagielski 	ERRTYPE 	SetPosEle( sal_uInt32 nPos, RscInstCopy & rInst );
63*b1cdbd2cSJim Jagielski 	ERRTYPE 	SetPosRscId( sal_uInt32 nPos, const RscId & rId );
64*b1cdbd2cSJim Jagielski 	SUBINFO_STRUCT	GetInfoEle( sal_uInt32 nPos );
65*b1cdbd2cSJim Jagielski 	sal_uInt32		GetCount();
66*b1cdbd2cSJim Jagielski 	RscInst 	GetElement( RscTop * pClass, const RscId & rName );
67*b1cdbd2cSJim Jagielski 	RscInst 	GetPosEle( sal_uInt32 nPos );
68*b1cdbd2cSJim Jagielski 	ERRTYPE 	MovePosEle( sal_uInt32 nDestPos, sal_uInt32 nSourcePos );
69*b1cdbd2cSJim Jagielski 	ERRTYPE 	DeleteElement( RscTop * pClass, const RscId & rName );
70*b1cdbd2cSJim Jagielski 	ERRTYPE 	DeletePosEle( sal_uInt32 nPos );
71*b1cdbd2cSJim Jagielski 
72*b1cdbd2cSJim Jagielski 	ERRTYPE 	SetVar( Atom nVarName, RscInstCopy & rInst );
73*b1cdbd2cSJim Jagielski 	ERRTYPE 	SetConst( Atom nVarName, Atom nConstId );
74*b1cdbd2cSJim Jagielski 	ERRTYPE 	SetBool( Atom nVarName, sal_Bool );
75*b1cdbd2cSJim Jagielski 
76*b1cdbd2cSJim Jagielski 	// Hack fuer X, Y, Width, Height
77*b1cdbd2cSJim Jagielski 	static ERRTYPE SetCorrectValues( RSCINST & rInst, RSCINST & rVarInst,
78*b1cdbd2cSJim Jagielski 									sal_Int32 lValue, sal_uInt32 nTupelIdx );
79*b1cdbd2cSJim Jagielski 	ERRTYPE 	SetNumber( Atom nVarName, sal_Int32 );
80*b1cdbd2cSJim Jagielski 
81*b1cdbd2cSJim Jagielski 	ERRTYPE 	SetString( Atom nVarName, const char * );
82*b1cdbd2cSJim Jagielski 	ERRTYPE 	SetConst( Atom nConstId );
83*b1cdbd2cSJim Jagielski 	ERRTYPE 	SetBool( sal_Bool );
84*b1cdbd2cSJim Jagielski 	ERRTYPE 	SetNumber( sal_Int32 );
85*b1cdbd2cSJim Jagielski 	ERRTYPE 	SetString( const char * );
86*b1cdbd2cSJim Jagielski 	ERRTYPE 	SetRef( const RscId & rRscId );
87*b1cdbd2cSJim Jagielski 	ERRTYPE 	SetDefault( Atom nVarName );
88*b1cdbd2cSJim Jagielski 
89*b1cdbd2cSJim Jagielski 	RscInst 	GetVar( Atom nVarName );
90*b1cdbd2cSJim Jagielski 	Atom		GetConst( Atom nVarName = InvalidAtom );
91*b1cdbd2cSJim Jagielski 	sal_uInt32		GetConstPos( Atom nVarName = InvalidAtom );
92*b1cdbd2cSJim Jagielski 	sal_Bool		GetBool( Atom nVarName = InvalidAtom );
93*b1cdbd2cSJim Jagielski 
94*b1cdbd2cSJim Jagielski 	// Hack fuer X, Y, Width, Height
95*b1cdbd2cSJim Jagielski 	static sal_Int32 GetCorrectValues( RSCINST & rInst, RSCINST & rVarInst,
96*b1cdbd2cSJim Jagielski 									sal_uInt32 nTupelIdx );
97*b1cdbd2cSJim Jagielski 	sal_Int32		GetNumber( Atom nVarName = InvalidAtom );
98*b1cdbd2cSJim Jagielski 
99*b1cdbd2cSJim Jagielski 	const char *GetString( Atom nVarName = InvalidAtom );
100*b1cdbd2cSJim Jagielski 	RscId		GetRef();
101*b1cdbd2cSJim Jagielski 	sal_Bool		IsDefault( Atom nVarName );
102*b1cdbd2cSJim Jagielski 	sal_Bool		IsConsistent( RscInconsList * pList );
103*b1cdbd2cSJim Jagielski 
104*b1cdbd2cSJim Jagielski 	Atom		GetClassEnum( Atom nVarName, sal_uInt32 nPos );
105*b1cdbd2cSJim Jagielski 	Atom		GetClassEnum( sal_uInt32 nPos );
GetClassType()106*b1cdbd2cSJim Jagielski 	RscTop *	GetClassType(){ return aInst.pClass; };
107*b1cdbd2cSJim Jagielski 	Atom		GetClassName();
108*b1cdbd2cSJim Jagielski 	void		EnumClassVariables( void * pData, VarEnumCallbackProc ) const;
109*b1cdbd2cSJim Jagielski 	ERRTYPE 	WriteRc( RscWriteRc & aMem );
110*b1cdbd2cSJim Jagielski };
111*b1cdbd2cSJim Jagielski 
112*b1cdbd2cSJim Jagielski class RscInstCopy : public RscInst {
113*b1cdbd2cSJim Jagielski 	void		MakeCopy( RSCINST aCopyInst );
114*b1cdbd2cSJim Jagielski public:
115*b1cdbd2cSJim Jagielski 				RscInstCopy();
116*b1cdbd2cSJim Jagielski 				RscInstCopy( const RscInstCopy & rInst );
117*b1cdbd2cSJim Jagielski 				RscInstCopy( const RscInst & rInst );
118*b1cdbd2cSJim Jagielski 				RscInstCopy( RSCINST aTmpI );
119*b1cdbd2cSJim Jagielski 				RscInstCopy( RscTop * pNewType, const RscInst & rInst );
120*b1cdbd2cSJim Jagielski 	RscInstCopy&	operator =	( const RscInstCopy & rRscInst );
121*b1cdbd2cSJim Jagielski 	RscInstCopy&	operator =	( const RscInst & rRscInst );
122*b1cdbd2cSJim Jagielski 				~RscInstCopy();
123*b1cdbd2cSJim Jagielski };
124*b1cdbd2cSJim Jagielski 
125*b1cdbd2cSJim Jagielski class RscDataBase
126*b1cdbd2cSJim Jagielski {
127*b1cdbd2cSJim Jagielski friend class RscHrc;
128*b1cdbd2cSJim Jagielski friend class RscSrc;
129*b1cdbd2cSJim Jagielski friend class RscInst;
130*b1cdbd2cSJim Jagielski 
131*b1cdbd2cSJim Jagielski 	RscCmdLine	* pCmdLine;
132*b1cdbd2cSJim Jagielski 	RscTypCont	* pTC;
133*b1cdbd2cSJim Jagielski 	LanguageType   nLangType;
134*b1cdbd2cSJim Jagielski public:
135*b1cdbd2cSJim Jagielski 				RscDataBase( RscError * );
136*b1cdbd2cSJim Jagielski 				~RscDataBase();
137*b1cdbd2cSJim Jagielski 
138*b1cdbd2cSJim Jagielski //	void		SetLanguage( LanguageType nTyp ) { nLangType = nTyp; }
139*b1cdbd2cSJim Jagielski 	void		SetLanguage( Atom nId );
140*b1cdbd2cSJim Jagielski 	Atom		GetLanguage() const;
141*b1cdbd2cSJim Jagielski 
142*b1cdbd2cSJim Jagielski 	ByteString	GetPath() const;
143*b1cdbd2cSJim Jagielski 	void		SetPath( const ByteString & rPath );
144*b1cdbd2cSJim Jagielski 				// Konvertiert einen Namen in einen Typ
145*b1cdbd2cSJim Jagielski 	RscTop* 	GetClassType( Atom nClassName );
146*b1cdbd2cSJim Jagielski 				// Instanz einer Klasse erzeugen
147*b1cdbd2cSJim Jagielski 	sal_Bool		MakeConsistent( RscInconsList * pList );
148*b1cdbd2cSJim Jagielski 				// Array mit Dateinamen
149*b1cdbd2cSJim Jagielski 	RscFileTab* GetFileTab();
150*b1cdbd2cSJim Jagielski 				// Eine Dateinamen-Instanz holen
151*b1cdbd2cSJim Jagielski 	RscFile *	GetFileStruct( sal_uLong lKey );
152*b1cdbd2cSJim Jagielski 
153*b1cdbd2cSJim Jagielski 	sal_uLong		AddSrcFile( const ByteString & rFileName );
154*b1cdbd2cSJim Jagielski 	sal_uLong		AddHrcFile( const ByteString & rFileName );
155*b1cdbd2cSJim Jagielski 				// Traegt die Include-Dateien in die Abhaengigkeitsliste
156*b1cdbd2cSJim Jagielski 				// von lFileKey ein
157*b1cdbd2cSJim Jagielski 	void		ScanForIncFiles( sal_uLong lFileKey );
158*b1cdbd2cSJim Jagielski 	void		RemoveFile( sal_uLong lKey );
159*b1cdbd2cSJim Jagielski 
160*b1cdbd2cSJim Jagielski 				// Suche ueber alle DEFINES
161*b1cdbd2cSJim Jagielski 	RscDefine * FindDef( const ByteString & rName );
162*b1cdbd2cSJim Jagielski 	sal_uLong		GetFileKey( const ByteString & rFileName );
163*b1cdbd2cSJim Jagielski };
164*b1cdbd2cSJim Jagielski 
165*b1cdbd2cSJim Jagielski class RscHrc
166*b1cdbd2cSJim Jagielski {
167*b1cdbd2cSJim Jagielski protected:
168*b1cdbd2cSJim Jagielski 	sal_uLong		  lFileKey; // Index der Instanz
169*b1cdbd2cSJim Jagielski 	RscDataBase * pDataBase;// Datenbasis
170*b1cdbd2cSJim Jagielski public:
171*b1cdbd2cSJim Jagielski 
172*b1cdbd2cSJim Jagielski 				// Kompilerinstanz erzeugen
173*b1cdbd2cSJim Jagielski 				RscHrc( RscDataBase * pDBase, sal_uLong lKey );
174*b1cdbd2cSJim Jagielski 				~RscHrc();
175*b1cdbd2cSJim Jagielski 
176*b1cdbd2cSJim Jagielski 				// Daten von Datei uebernehmen
177*b1cdbd2cSJim Jagielski 	ERRTYPE 	ReadFile();
178*b1cdbd2cSJim Jagielski 
GetFileKey() const179*b1cdbd2cSJim Jagielski 	sal_uLong		GetFileKey() const { return lFileKey; }
180*b1cdbd2cSJim Jagielski 
181*b1cdbd2cSJim Jagielski 	void		SetDirty( sal_Bool bSet );
182*b1cdbd2cSJim Jagielski 	sal_Bool		IsDirty();
183*b1cdbd2cSJim Jagielski 	void		SetPathName( const ByteString & );
184*b1cdbd2cSJim Jagielski 	ByteString	GetPathName();
185*b1cdbd2cSJim Jagielski 	void		SetFileName( const ByteString & );
186*b1cdbd2cSJim Jagielski 	ByteString	GetFileName();
187*b1cdbd2cSJim Jagielski 
188*b1cdbd2cSJim Jagielski 				//Depend-Datei anhaengen
189*b1cdbd2cSJim Jagielski 	void		InsertDepend( sal_uLong lKey, sal_uLong lPos );
190*b1cdbd2cSJim Jagielski 
191*b1cdbd2cSJim Jagielski 				// DefineList holen
192*b1cdbd2cSJim Jagielski 	RscDefineList * GetDefineList();
193*b1cdbd2cSJim Jagielski 				// Suche ueber all DEFINES im Zugriff
194*b1cdbd2cSJim Jagielski 	RscDefine * FindDef( const ByteString & rName );
195*b1cdbd2cSJim Jagielski 	ERRTYPE 	NewDef( const ByteString & rMacroName, sal_Int32 lValue,
196*b1cdbd2cSJim Jagielski 						sal_uLong lPos );
197*b1cdbd2cSJim Jagielski 	ERRTYPE 	NewDef( const ByteString & rMacroName, const ByteString & rMacro,
198*b1cdbd2cSJim Jagielski 						sal_uLong lPos );
199*b1cdbd2cSJim Jagielski 	ERRTYPE 	ChangeDef( const ByteString & rMacroName, sal_Int32 lValue );
200*b1cdbd2cSJim Jagielski 	ERRTYPE 	ChangeDef( const ByteString & rMacroName,
201*b1cdbd2cSJim Jagielski 						   const ByteString & rMacro );
202*b1cdbd2cSJim Jagielski 	sal_Bool		IsDefUsed( const ByteString & );
203*b1cdbd2cSJim Jagielski 	void		DeleteDef( const ByteString & rMacroName );
204*b1cdbd2cSJim Jagielski 	ERRTYPE 	ChangeDefName( const ByteString & rMacroName,
205*b1cdbd2cSJim Jagielski 							   const ByteString & rNewName );
206*b1cdbd2cSJim Jagielski 
207*b1cdbd2cSJim Jagielski 				// Dateinamen-Instanz holen
208*b1cdbd2cSJim Jagielski 	RscFile *	GetFileStruct();
209*b1cdbd2cSJim Jagielski 				//Abhaengigkeitsliste holen holen
210*b1cdbd2cSJim Jagielski 	RscDependList *   GetDependList();
211*b1cdbd2cSJim Jagielski 
212*b1cdbd2cSJim Jagielski 				// Datei schreiben
213*b1cdbd2cSJim Jagielski 	ERRTYPE 	WriteFile();
214*b1cdbd2cSJim Jagielski };
215*b1cdbd2cSJim Jagielski 
216*b1cdbd2cSJim Jagielski class RscSrc : public RscHrc {
217*b1cdbd2cSJim Jagielski public:
218*b1cdbd2cSJim Jagielski 			// Kompilerinstanz erzeugen
219*b1cdbd2cSJim Jagielski 			RscSrc( RscDataBase * pDBase, sal_uLong lKey );
220*b1cdbd2cSJim Jagielski 			~RscSrc();
221*b1cdbd2cSJim Jagielski 
222*b1cdbd2cSJim Jagielski 
223*b1cdbd2cSJim Jagielski 	RscInstCopy CreateRscInst( RscTop * pClass );
224*b1cdbd2cSJim Jagielski 				// Instanz loeschen
225*b1cdbd2cSJim Jagielski 	ERRTYPE 	DeleteRscInst( RscTop * pClass, const RscId & rInstName );
226*b1cdbd2cSJim Jagielski 				// Datenbasis nach Define Veraenderung wiederherstellen
227*b1cdbd2cSJim Jagielski 	//Instanz global zur Verfuegung stellen
228*b1cdbd2cSJim Jagielski 	ERRTYPE SetRscInst( const RscId & rInstName, RscInstCopy & );
229*b1cdbd2cSJim Jagielski 	//Instanz holen
230*b1cdbd2cSJim Jagielski 	RscInst GetRscInst( RscTop* pClass, const RscId & rInstName );
231*b1cdbd2cSJim Jagielski 
232*b1cdbd2cSJim Jagielski 	// Namen und Identifier Liste fuellen
233*b1cdbd2cSJim Jagielski 	void	FillNameIdList( REResourceList * pList );
234*b1cdbd2cSJim Jagielski 
235*b1cdbd2cSJim Jagielski 			// C++ Resourcekonstruktor schreiben
236*b1cdbd2cSJim Jagielski 	ERRTYPE WriteCxxFile( const ByteString &, const ByteString & rHxxName );
237*b1cdbd2cSJim Jagielski 	ERRTYPE WriteHxxFile( const ByteString & ); 	// C++ Klasskopf schreiben
238*b1cdbd2cSJim Jagielski };
239*b1cdbd2cSJim Jagielski 
240*b1cdbd2cSJim Jagielski #endif //_RSCINST_HXX
241