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 _RSCTOP_HXX 24*b1cdbd2cSJim Jagielski #define _RSCTOP_HXX 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski #include <rscerror.h> 27*b1cdbd2cSJim Jagielski #include <rsctools.hxx> 28*b1cdbd2cSJim Jagielski #include <rschash.hxx> 29*b1cdbd2cSJim Jagielski #include <rscclobj.hxx> 30*b1cdbd2cSJim Jagielski 31*b1cdbd2cSJim Jagielski /****************** T Y P E S ********************************************/ 32*b1cdbd2cSJim Jagielski typedef sal_uInt32 RSCVAR; 33*b1cdbd2cSJim Jagielski #define VAR_POINTER 0x0001 34*b1cdbd2cSJim Jagielski #define VAR_HIDDEN 0x0002 35*b1cdbd2cSJim Jagielski #define VAR_NODATAINST 0x0004 36*b1cdbd2cSJim Jagielski #define VAR_NORC 0x0008 37*b1cdbd2cSJim Jagielski #define VAR_SVDYNAMIC 0x0010 38*b1cdbd2cSJim Jagielski #define VAR_NOENUM 0x0020 39*b1cdbd2cSJim Jagielski #define VAR_EXTENDABLE 0x0040 /* Auch die Ableitung einer Klasse kann angegeben werden */ 40*b1cdbd2cSJim Jagielski 41*b1cdbd2cSJim Jagielski /****************** C L A S S E S ****************************************/ 42*b1cdbd2cSJim Jagielski /******************* R s c C l a s s *************************************/ 43*b1cdbd2cSJim Jagielski class RscTop : public RefNode 44*b1cdbd2cSJim Jagielski { 45*b1cdbd2cSJim Jagielski RscTop * pSuperClass; 46*b1cdbd2cSJim Jagielski RSCINST aDfltInst; 47*b1cdbd2cSJim Jagielski sal_uInt32 nTypId; 48*b1cdbd2cSJim Jagielski RscTop * pRefClass; 49*b1cdbd2cSJim Jagielski 50*b1cdbd2cSJim Jagielski protected: 51*b1cdbd2cSJim Jagielski RscTop( Atom nId, sal_uInt32 nTypIdent, 52*b1cdbd2cSJim Jagielski RscTop * pSuperCl = NULL ); 53*b1cdbd2cSJim Jagielski 54*b1cdbd2cSJim Jagielski public: 55*b1cdbd2cSJim Jagielski ByteString aCallPar1; // Klassenaufruf ohne Typen bis ResId 56*b1cdbd2cSJim Jagielski ByteString aCallPar2; // Klassenaufruf ohne Typen ab ResId 57*b1cdbd2cSJim Jagielski ByteString aCallParType; // Klassenaufruf mit Typen 58*b1cdbd2cSJim Jagielski SetSuperClass(RscTop * pClass)59*b1cdbd2cSJim Jagielski void SetSuperClass( RscTop * pClass ) 60*b1cdbd2cSJim Jagielski { 61*b1cdbd2cSJim Jagielski pSuperClass = pClass; 62*b1cdbd2cSJim Jagielski } GetSuperClass() const63*b1cdbd2cSJim Jagielski RscTop* GetSuperClass() const 64*b1cdbd2cSJim Jagielski { return pSuperClass; } 65*b1cdbd2cSJim Jagielski // Gibt den Typidentifier zurueck GetTypId() const66*b1cdbd2cSJim Jagielski sal_uInt32 GetTypId() const 67*b1cdbd2cSJim Jagielski { return nTypId; }; 68*b1cdbd2cSJim Jagielski // Gibt die Oberklasse zurueck 69*b1cdbd2cSJim Jagielski sal_Bool InHierarchy( RscTop * pClass ); IsCodeWriteable() const70*b1cdbd2cSJim Jagielski sal_Bool IsCodeWriteable() const 71*b1cdbd2cSJim Jagielski { 72*b1cdbd2cSJim Jagielski return( 0 != aCallParType.Len() ); 73*b1cdbd2cSJim Jagielski } 74*b1cdbd2cSJim Jagielski void SetCallPar( const ByteString & rPar1, const ByteString & rPar2, 75*b1cdbd2cSJim Jagielski const ByteString & rParType ); SetRefClass(RscTop * pRef)76*b1cdbd2cSJim Jagielski void SetRefClass( RscTop * pRef ) { pRefClass = pRef; } GetRefClass() const77*b1cdbd2cSJim Jagielski RscTop* GetRefClass() const { return pRefClass; } 78*b1cdbd2cSJim Jagielski virtual RSCCLASS_TYPE GetClassType() const = 0; 79*b1cdbd2cSJim Jagielski RSCINST GetDefault(); 80*b1cdbd2cSJim Jagielski 81*b1cdbd2cSJim Jagielski // Vorbereitung auf den dtor aufruf 82*b1cdbd2cSJim Jagielski // Da die Klassen gegenseitige Abhaengigkeiten 83*b1cdbd2cSJim Jagielski // aufweisen koennen, kann man im dtor nicht davon 84*b1cdbd2cSJim Jagielski // ausgehen, dass alle Klassenzeiger noch gueltig sind 85*b1cdbd2cSJim Jagielski virtual void Pre_dtor(); 86*b1cdbd2cSJim Jagielski 87*b1cdbd2cSJim Jagielski virtual Atom GetConstant( sal_uInt32 ); 88*b1cdbd2cSJim Jagielski 89*b1cdbd2cSJim Jagielski virtual RscTop * GetTypeClass() const; 90*b1cdbd2cSJim Jagielski 91*b1cdbd2cSJim Jagielski // Gibt die Groesse der Klasse in Bytes 92*b1cdbd2cSJim Jagielski virtual sal_uInt32 Size(); 93*b1cdbd2cSJim Jagielski 94*b1cdbd2cSJim Jagielski // Gibt die Referenz zurueck 95*b1cdbd2cSJim Jagielski virtual ERRTYPE GetRef( const RSCINST & rInst, RscId * ); 96*b1cdbd2cSJim Jagielski 97*b1cdbd2cSJim Jagielski // Gibt die Referenz zurueck 98*b1cdbd2cSJim Jagielski virtual ERRTYPE SetRef( const RSCINST & rInst, const RscId & rRefId ); 99*b1cdbd2cSJim Jagielski 100*b1cdbd2cSJim Jagielski // Variable anlegen 101*b1cdbd2cSJim Jagielski virtual ERRTYPE SetVariable( Atom nVarName, RscTop * pClass, 102*b1cdbd2cSJim Jagielski RSCINST * pDflt = NULL, 103*b1cdbd2cSJim Jagielski RSCVAR nVarType = 0, sal_uInt32 nMask = 0, 104*b1cdbd2cSJim Jagielski Atom nDataBaseName = InvalidAtom ); 105*b1cdbd2cSJim Jagielski 106*b1cdbd2cSJim Jagielski // Zaehlt alle Variablen auf 107*b1cdbd2cSJim Jagielski virtual void EnumVariables( void * pData, VarEnumCallbackProc ); 108*b1cdbd2cSJim Jagielski 109*b1cdbd2cSJim Jagielski // Liefert Instanz der Variablen zurueck 110*b1cdbd2cSJim Jagielski // pData, pClass im return koennen NULL sein 111*b1cdbd2cSJim Jagielski virtual RSCINST GetVariable( const RSCINST & rInst, Atom nVarName, 112*b1cdbd2cSJim Jagielski const RSCINST & rInitInst, 113*b1cdbd2cSJim Jagielski sal_Bool nInitDflt = sal_False, 114*b1cdbd2cSJim Jagielski RscTop * pCreateClass = NULL ); 115*b1cdbd2cSJim Jagielski virtual RSCINST GetCopyVar( const RSCINST & rInst, Atom nVarName ); 116*b1cdbd2cSJim Jagielski 117*b1cdbd2cSJim Jagielski virtual RSCINST GetTupelVar( const RSCINST & rInst, sal_uInt32 nPos, 118*b1cdbd2cSJim Jagielski const RSCINST & rInitInst ); 119*b1cdbd2cSJim Jagielski 120*b1cdbd2cSJim Jagielski // Liefert Instanz aus einem Feld zurueck 121*b1cdbd2cSJim Jagielski // pGetInst im return kann NULL sein 122*b1cdbd2cSJim Jagielski virtual ERRTYPE GetElement( const RSCINST & rInst, const RscId & rEleName, 123*b1cdbd2cSJim Jagielski RscTop *pCreateClass, const RSCINST & rCreateInst, 124*b1cdbd2cSJim Jagielski RSCINST * pGetInst ); 125*b1cdbd2cSJim Jagielski 126*b1cdbd2cSJim Jagielski // Liefert Instanz aus einem Feld zurueck 127*b1cdbd2cSJim Jagielski // pGetInst im return kann NULL sein 128*b1cdbd2cSJim Jagielski virtual ERRTYPE GetValueEle( const RSCINST & rInst, sal_Int32 lValue, 129*b1cdbd2cSJim Jagielski RscTop * pCreateClass, 130*b1cdbd2cSJim Jagielski RSCINST * pGetInst ); 131*b1cdbd2cSJim Jagielski 132*b1cdbd2cSJim Jagielski // Liefert Instanz aus einem Feld zurueck 133*b1cdbd2cSJim Jagielski // pGetInst im return kann NULL sein 134*b1cdbd2cSJim Jagielski virtual ERRTYPE GetArrayEle( const RSCINST & rInst, Atom nId, 135*b1cdbd2cSJim Jagielski RscTop * pCreateClass, 136*b1cdbd2cSJim Jagielski RSCINST * pGetInst ); 137*b1cdbd2cSJim Jagielski 138*b1cdbd2cSJim Jagielski virtual RSCINST SearchEle( const RSCINST & rInst, const RscId & rEleName, 139*b1cdbd2cSJim Jagielski RscTop * pClass ); 140*b1cdbd2cSJim Jagielski 141*b1cdbd2cSJim Jagielski // Liefert Instanz an der Position zurueck 142*b1cdbd2cSJim Jagielski virtual RSCINST GetPosEle( const RSCINST & rInst, sal_uInt32 nPos ); 143*b1cdbd2cSJim Jagielski 144*b1cdbd2cSJim Jagielski // verschiebt eine Instanz 145*b1cdbd2cSJim Jagielski virtual ERRTYPE MovePosEle( const RSCINST & rInst, sal_uInt32 nDestPos, 146*b1cdbd2cSJim Jagielski sal_uInt32 nSourcePos ); 147*b1cdbd2cSJim Jagielski 148*b1cdbd2cSJim Jagielski // aendert RscId an Position 149*b1cdbd2cSJim Jagielski virtual ERRTYPE SetPosRscId( const RSCINST & rInst, sal_uInt32 nPos, 150*b1cdbd2cSJim Jagielski const RscId & rRscId); 151*b1cdbd2cSJim Jagielski 152*b1cdbd2cSJim Jagielski // Liefert Information ueber Instanz 153*b1cdbd2cSJim Jagielski // an der Position zurueck 154*b1cdbd2cSJim Jagielski virtual SUBINFO_STRUCT GetInfoEle( const RSCINST & rInst, sal_uInt32 nPos ); 155*b1cdbd2cSJim Jagielski 156*b1cdbd2cSJim Jagielski // Anzahl der Eintraege 157*b1cdbd2cSJim Jagielski virtual sal_uInt32 GetCount( const RSCINST & rInst ); 158*b1cdbd2cSJim Jagielski 159*b1cdbd2cSJim Jagielski // Eine Zuweisung an eine Variable 160*b1cdbd2cSJim Jagielski virtual ERRTYPE SetNumber( const RSCINST & rInst, sal_Int32 lValue ); 161*b1cdbd2cSJim Jagielski 162*b1cdbd2cSJim Jagielski // Eine Zuweisung an eine Variable 163*b1cdbd2cSJim Jagielski virtual ERRTYPE SetBool( const RSCINST & rInst, sal_Bool bValue ); 164*b1cdbd2cSJim Jagielski 165*b1cdbd2cSJim Jagielski // Eine Zuweisung an eine Variable 166*b1cdbd2cSJim Jagielski virtual ERRTYPE SetConst( const RSCINST & rInst, Atom nValueId, 167*b1cdbd2cSJim Jagielski sal_Int32 nValue ); 168*b1cdbd2cSJim Jagielski 169*b1cdbd2cSJim Jagielski // Eine Zuweisung an eine Variable 170*b1cdbd2cSJim Jagielski virtual ERRTYPE SetNotConst( const RSCINST & rInst, Atom nId ); 171*b1cdbd2cSJim Jagielski 172*b1cdbd2cSJim Jagielski virtual ERRTYPE SetString( const RSCINST & rInst, const char * pStr ); 173*b1cdbd2cSJim Jagielski 174*b1cdbd2cSJim Jagielski virtual ERRTYPE GetNumber( const RSCINST & rInst, sal_Int32 * pN ); 175*b1cdbd2cSJim Jagielski 176*b1cdbd2cSJim Jagielski virtual ERRTYPE GetBool( const RSCINST & rInst, sal_Bool * pB ); 177*b1cdbd2cSJim Jagielski 178*b1cdbd2cSJim Jagielski virtual ERRTYPE GetConst( const RSCINST & rInst, Atom * pH ); 179*b1cdbd2cSJim Jagielski 180*b1cdbd2cSJim Jagielski virtual ERRTYPE GetString( const RSCINST & rInst, char ** ppStr ); 181*b1cdbd2cSJim Jagielski 182*b1cdbd2cSJim Jagielski virtual RSCINST Create( RSCINST * pInst, 183*b1cdbd2cSJim Jagielski const RSCINST & rDefInst, sal_Bool bOwnClass = sal_False ); 184*b1cdbd2cSJim Jagielski 185*b1cdbd2cSJim Jagielski // Instanz zerstoeren 186*b1cdbd2cSJim Jagielski virtual void Destroy( const RSCINST & rInst ); 187*b1cdbd2cSJim Jagielski 188*b1cdbd2cSJim Jagielski // prueft auf konsistenz 189*b1cdbd2cSJim Jagielski virtual sal_Bool IsConsistent( const RSCINST & rInst, 190*b1cdbd2cSJim Jagielski RscInconsList * pList = NULL ); 191*b1cdbd2cSJim Jagielski 192*b1cdbd2cSJim Jagielski // Alles auf Default setzen 193*b1cdbd2cSJim Jagielski virtual void SetToDefault( const RSCINST & rInst ); 194*b1cdbd2cSJim Jagielski 195*b1cdbd2cSJim Jagielski // Ist Eingabe = Default 196*b1cdbd2cSJim Jagielski virtual sal_Bool IsDefault( const RSCINST & rInst ); 197*b1cdbd2cSJim Jagielski 198*b1cdbd2cSJim Jagielski // Gleiche Werte auf Default setzen 199*b1cdbd2cSJim Jagielski virtual sal_Bool IsValueDefault( const RSCINST & rInst, CLASS_DATA pDef ); 200*b1cdbd2cSJim Jagielski 201*b1cdbd2cSJim Jagielski // Instanz auf Default setzen 202*b1cdbd2cSJim Jagielski virtual void SetDefault( const RSCINST & rInst, Atom nVarId ); 203*b1cdbd2cSJim Jagielski 204*b1cdbd2cSJim Jagielski // Default zu einer Variablen holen 205*b1cdbd2cSJim Jagielski virtual RSCINST GetDefault( Atom nVarId ); 206*b1cdbd2cSJim Jagielski 207*b1cdbd2cSJim Jagielski virtual void Delete( const RSCINST & rInst, RscTop * pClass, 208*b1cdbd2cSJim Jagielski const RscId & rId ); 209*b1cdbd2cSJim Jagielski 210*b1cdbd2cSJim Jagielski virtual void DeletePos( const RSCINST & rInst, sal_uInt32 nPos ); 211*b1cdbd2cSJim Jagielski 212*b1cdbd2cSJim Jagielski // Schreibt den Kopf und das Ende einer Resource 213*b1cdbd2cSJim Jagielski // Script Datei 214*b1cdbd2cSJim Jagielski virtual void WriteSrcHeader( const RSCINST & rInst, FILE * fOutput, 215*b1cdbd2cSJim Jagielski RscTypCont * pTC, sal_uInt32 nTab, 216*b1cdbd2cSJim Jagielski const RscId & aId, const char * ); 217*b1cdbd2cSJim Jagielski virtual void WriteSrc( const RSCINST & rInst, FILE * fOutput, 218*b1cdbd2cSJim Jagielski RscTypCont * pTC, sal_uInt32 nTab,const char * ); 219*b1cdbd2cSJim Jagielski virtual ERRTYPE WriteRcHeader( const RSCINST & rInst, RscWriteRc & aMem, 220*b1cdbd2cSJim Jagielski RscTypCont * pTC, const RscId & aId, 221*b1cdbd2cSJim Jagielski sal_uInt32 nDeep, sal_Bool bExtra ); 222*b1cdbd2cSJim Jagielski virtual ERRTYPE WriteRc( const RSCINST & rInst, RscWriteRc & aMem, 223*b1cdbd2cSJim Jagielski RscTypCont * pTC, sal_uInt32 nDeep, sal_Bool bExtra ); 224*b1cdbd2cSJim Jagielski 225*b1cdbd2cSJim Jagielski // Weiterleitung an Superklassen wird unterbunden 226*b1cdbd2cSJim Jagielski virtual ERRTYPE WriteHxxHeader( const RSCINST & rInst, FILE * fOutput, 227*b1cdbd2cSJim Jagielski RscTypCont * pTC, const RscId & rId ); 228*b1cdbd2cSJim Jagielski virtual ERRTYPE WriteHxx( const RSCINST & rInst, FILE * fOutput, 229*b1cdbd2cSJim Jagielski RscTypCont * pTC, const RscId &rId ); 230*b1cdbd2cSJim Jagielski virtual ERRTYPE WriteCxxHeader( const RSCINST & rInst, FILE * fOutput, 231*b1cdbd2cSJim Jagielski RscTypCont * pTC, const RscId &rId ); 232*b1cdbd2cSJim Jagielski virtual ERRTYPE WriteCxx( const RSCINST & rInst, FILE * fOutput, 233*b1cdbd2cSJim Jagielski RscTypCont * pTC, const RscId &rId ); 234*b1cdbd2cSJim Jagielski 235*b1cdbd2cSJim Jagielski void WriteSyntaxHeader( FILE * fOutput, RscTypCont * pTC ); 236*b1cdbd2cSJim Jagielski virtual void WriteSyntax( FILE * fOutput, RscTypCont * pTC ); 237*b1cdbd2cSJim Jagielski 238*b1cdbd2cSJim Jagielski virtual void WriteRcAccess( FILE * fOutput, RscTypCont * pTC, 239*b1cdbd2cSJim Jagielski const char * ); 240*b1cdbd2cSJim Jagielski virtual void WriteRcCtor( FILE * fOutput, RscTypCont * pTC ); 241*b1cdbd2cSJim Jagielski }; 242*b1cdbd2cSJim Jagielski 243*b1cdbd2cSJim Jagielski #endif //_RSCTOP_HXX 244