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 24*b1cdbd2cSJim Jagielski #ifndef _SBIMAGE_HXX 25*b1cdbd2cSJim Jagielski #define _SBIMAGE_HXX 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski #include "sbintern.hxx" 28*b1cdbd2cSJim Jagielski #ifndef _RTL_USTRING_HXX 29*b1cdbd2cSJim Jagielski #include <rtl/ustring.hxx> 30*b1cdbd2cSJim Jagielski #endif 31*b1cdbd2cSJim Jagielski #include <filefmt.hxx> 32*b1cdbd2cSJim Jagielski 33*b1cdbd2cSJim Jagielski // Diese Klasse liest das vom Compiler erzeugte Image ein und verwaltet 34*b1cdbd2cSJim Jagielski // den Zugriff auf die einzelnen Elemente. 35*b1cdbd2cSJim Jagielski 36*b1cdbd2cSJim Jagielski struct SbPublicEntry; 37*b1cdbd2cSJim Jagielski 38*b1cdbd2cSJim Jagielski class SbiImage { 39*b1cdbd2cSJim Jagielski friend class SbiCodeGen; // Compiler-Klassen, die die private- 40*b1cdbd2cSJim Jagielski 41*b1cdbd2cSJim Jagielski SbxArrayRef rTypes; // User defined types 42*b1cdbd2cSJim Jagielski SbxArrayRef rEnums; // Enum types 43*b1cdbd2cSJim Jagielski sal_uInt32* pStringOff; // StringId-Offsets 44*b1cdbd2cSJim Jagielski sal_Unicode* pStrings; // StringPool 45*b1cdbd2cSJim Jagielski char* pCode; // Code-Image 46*b1cdbd2cSJim Jagielski char* pLegacyPCode; // Code-Image 47*b1cdbd2cSJim Jagielski sal_Bool bError; // sal_True: Fehler 48*b1cdbd2cSJim Jagielski sal_uInt16 nFlags; // Flags (s.u.) 49*b1cdbd2cSJim Jagielski short nStrings; // Anzahl Strings 50*b1cdbd2cSJim Jagielski sal_uInt32 nStringSize; // Groesse des String-Puffers 51*b1cdbd2cSJim Jagielski sal_uInt32 nCodeSize; // Groesse des Code-Blocks 52*b1cdbd2cSJim Jagielski sal_uInt16 nLegacyCodeSize; // Groesse des Code-Blocks 53*b1cdbd2cSJim Jagielski sal_uInt16 nDimBase; // OPTION BASE-Wert 54*b1cdbd2cSJim Jagielski rtl_TextEncoding eCharSet; // Zeichensatz fuer Strings 55*b1cdbd2cSJim Jagielski // temporaere Verwaltungs-Variable: 56*b1cdbd2cSJim Jagielski short nStringIdx; // aktueller String-Index 57*b1cdbd2cSJim Jagielski sal_uInt32 nStringOff; // aktuelle Pos im Stringpuffer 58*b1cdbd2cSJim Jagielski // Routinen fuer Compiler: 59*b1cdbd2cSJim Jagielski void MakeStrings( short ); // StringPool einrichten 60*b1cdbd2cSJim Jagielski void AddString( const String& );// String zufuegen 61*b1cdbd2cSJim Jagielski void AddCode( char*, sal_uInt32 ); // Codeblock dazu 62*b1cdbd2cSJim Jagielski void AddType(SbxObject *); // User-Type mit aufnehmen 63*b1cdbd2cSJim Jagielski void AddEnum(SbxObject *); // Register enum type 64*b1cdbd2cSJim Jagielski 65*b1cdbd2cSJim Jagielski public: 66*b1cdbd2cSJim Jagielski String aName; // Makroname 67*b1cdbd2cSJim Jagielski ::rtl::OUString aOUSource; // Quellcode 68*b1cdbd2cSJim Jagielski String aComment; // Kommentar 69*b1cdbd2cSJim Jagielski sal_Bool bInit; // sal_True: Init-Code ist gelaufen 70*b1cdbd2cSJim Jagielski sal_Bool bFirstInit; // sal_True, wenn das Image das erste mal nach 71*b1cdbd2cSJim Jagielski // dem Compilieren initialisiert wird. 72*b1cdbd2cSJim Jagielski SbiImage(); 73*b1cdbd2cSJim Jagielski ~SbiImage(); 74*b1cdbd2cSJim Jagielski void Clear(); // Inhalt loeschen 75*b1cdbd2cSJim Jagielski sal_Bool Load( SvStream&, sal_uInt32& nVer ); // Loads image from stream 76*b1cdbd2cSJim Jagielski // nVer is set to version 77*b1cdbd2cSJim Jagielski // of image 78*b1cdbd2cSJim Jagielski sal_Bool Load( SvStream& ); 79*b1cdbd2cSJim Jagielski sal_Bool Save( SvStream&, sal_uInt32 = B_CURVERSION ); IsError()80*b1cdbd2cSJim Jagielski sal_Bool IsError() { return bError; } 81*b1cdbd2cSJim Jagielski GetCode() const82*b1cdbd2cSJim Jagielski const char* GetCode() const { return pCode; } GetCodeSize() const83*b1cdbd2cSJim Jagielski sal_uInt32 GetCodeSize() const { return nCodeSize; } GetSource32()84*b1cdbd2cSJim Jagielski ::rtl::OUString& GetSource32() { return aOUSource; } GetBase() const85*b1cdbd2cSJim Jagielski sal_uInt16 GetBase() const { return nDimBase; } 86*b1cdbd2cSJim Jagielski String GetString( short nId ) const; 87*b1cdbd2cSJim Jagielski //const char* GetString( short nId ) const; 88*b1cdbd2cSJim Jagielski const SbxObject* FindType (String aTypeName) const; 89*b1cdbd2cSJim Jagielski GetEnums()90*b1cdbd2cSJim Jagielski SbxArrayRef GetEnums() { return rEnums; } 91*b1cdbd2cSJim Jagielski SetFlag(sal_uInt16 n)92*b1cdbd2cSJim Jagielski void SetFlag( sal_uInt16 n ) { nFlags |= n; } GetFlag(sal_uInt16 n) const93*b1cdbd2cSJim Jagielski sal_uInt16 GetFlag( sal_uInt16 n ) const { return nFlags & n; } 94*b1cdbd2cSJim Jagielski sal_uInt16 CalcLegacyOffset( sal_Int32 nOffset ); 95*b1cdbd2cSJim Jagielski sal_uInt32 CalcNewOffset( sal_Int16 nOffset ); 96*b1cdbd2cSJim Jagielski void ReleaseLegacyBuffer(); 97*b1cdbd2cSJim Jagielski sal_Bool ExceedsLegacyLimits(); 98*b1cdbd2cSJim Jagielski 99*b1cdbd2cSJim Jagielski }; 100*b1cdbd2cSJim Jagielski 101*b1cdbd2cSJim Jagielski #define SBIMG_EXPLICIT 0x0001 // OPTION EXPLICIT ist aktiv 102*b1cdbd2cSJim Jagielski #define SBIMG_COMPARETEXT 0x0002 // OPTION COMPARE TEXT ist aktiv 103*b1cdbd2cSJim Jagielski #define SBIMG_INITCODE 0x0004 // Init-Code vorhanden 104*b1cdbd2cSJim Jagielski #define SBIMG_CLASSMODULE 0x0008 // OPTION ClassModule is active 105*b1cdbd2cSJim Jagielski 106*b1cdbd2cSJim Jagielski #endif 107