blob: 68b68540cdb0e6feb3b998e5f9fdda9d126c4192 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef _SB_INTERN_HXX
#define _SB_INTERN_HXX
#include <basic/sbxfac.hxx>
#include <unotools/transliterationwrapper.hxx>
#include "sb.hxx"
namespace utl
{
class TransliterationWrapper;
}
class SbUnoFactory;
class SbTypeFactory;
class SbOLEFactory;
class SbFormFactory;
class SbiInstance;
class SbModule;
class SbiFactory : public SbxFactory
{
public:
virtual SbxBase* Create( sal_uInt16 nSbxId, sal_uInt32 = SBXCR_SBX );
virtual SbxObject* CreateObject( const String& );
};
typedef ::std::vector< String > StringVector;
struct SbClassData
{
SbxArrayRef mxIfaces;
// types this module depends on because of use in Dim As New <type>
// needed for initialization order of class modules
StringVector maRequiredTypes;
SbClassData( void );
~SbClassData( void )
{ clear(); }
void clear( void );
};
// #115824: Factory class to create class objects (type command)
// Implementation: sb.cxx
class SbClassFactory : public SbxFactory
{
SbxObjectRef xClassModules;
public:
SbClassFactory( void );
virtual ~SbClassFactory();
void AddClassModule( SbModule* pClassModule );
void RemoveClassModule( SbModule* pClassModule );
virtual SbxBase* Create( sal_uInt16 nSbxId, sal_uInt32 = SBXCR_SBX );
virtual SbxObject* CreateObject( const String& );
SbModule* FindClass( const String& rClassName );
};
// Stack fuer die im Fehlerfall abgebaute SbiRuntime Kette
class SbErrorStackEntry
{
public:
SbErrorStackEntry(SbMethodRef aM, xub_StrLen nL, xub_StrLen nC1, xub_StrLen nC2)
: aMethod(aM), nLine(nL), nCol1(nC1), nCol2(nC2) {}
SbMethodRef aMethod;
xub_StrLen nLine;
xub_StrLen nCol1, nCol2;
};
SV_DECL_PTRARR_DEL(SbErrorStack, SbErrorStackEntry*, 1, 1)
struct SbiGlobals
{
SbiInstance* pInst; // alle aktiven Runtime-Instanzen
SbiFactory* pSbFac; // StarBASIC-Factory
SbUnoFactory* pUnoFac; // Factory fuer Uno-Structs bei DIM AS NEW
SbTypeFactory* pTypeFac; // Factory for user defined types
SbClassFactory* pClassFac; // Factory for user defined classes (based on class modules)
SbOLEFactory* pOLEFac; // Factory for OLE types
SbFormFactory* pFormFac; // Factory for user forms
SbModule* pMod; // aktuell aktives Modul
SbModule* pCompMod; // aktuell compiliertes Modul
short nInst; // Anzahl BASICs
Link aErrHdl; // globaler Error-Handler
Link aBreakHdl; // globaler Break-Handler
SbError nCode; // aktueller Fehlercode
xub_StrLen nLine; // aktuelle Zeile
xub_StrLen nCol1,nCol2; // aktuelle Spalten (von,bis)
sal_Bool bCompiler; // Flag fuer Compiler-Error
sal_Bool bGlobalInitErr; // Beim GlobalInit trat ein Compiler-Fehler auf
sal_Bool bRunInit; // sal_True, wenn RunInit vom Basic aktiv ist
String aErrMsg; // Puffer fuer GetErrorText()
SbLanguageMode eLanguageMode; // Flag fuer Visual-Basic-Script-Modus
SbErrorStack* pErrStack; // Stack fuer die im Fehlerfall abgebaute SbiRuntime Kette
::utl::TransliterationWrapper* pTransliterationWrapper; // For StrComp
sal_Bool bBlockCompilerError;
BasicManager* pAppBasMgr;
StarBASIC* pMSOMacroRuntimLib; // Lib containing MSO Macro Runtime API entry symbols
SbiGlobals();
~SbiGlobals();
};
// Utility-Makros und -Routinen
SbiGlobals* GetSbData();
#define pINST GetSbData()->pInst
#define pMOD GetSbData()->pMod
#define pCMOD GetSbData()->pCompMod
#define pSBFAC GetSbData()->pSbFac
#define pUNOFAC GetSbData()->pUnoFac
#define pTYPEFAC GetSbData()->pTypeFac
#define pCLASSFAC GetSbData()->pClassFac
#define pOLEFAC GetSbData()->pOLEFac
#define pFORMFAC GetSbData()->pFormFac
#endif