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