diff options
author | Jens-Heiner Rechtien <hr@openoffice.org> | 2000-09-18 15:18:56 +0000 |
---|---|---|
committer | Jens-Heiner Rechtien <hr@openoffice.org> | 2000-09-18 15:18:56 +0000 |
commit | c25ec0608a167bcf1d891043f02273761c351701 (patch) | |
tree | 32c3e19f0b663e37ad1910e8fddeac200ad3856d /basic/source/classes |
initial import
Diffstat (limited to 'basic/source/classes')
-rw-r--r-- | basic/source/classes/disas.cxx | 701 | ||||
-rw-r--r-- | basic/source/classes/image.cxx | 431 | ||||
-rw-r--r-- | basic/source/classes/makefile.mk | 93 | ||||
-rw-r--r-- | basic/source/classes/propacc.cxx | 435 | ||||
-rw-r--r-- | basic/source/classes/sb.cxx | 1028 | ||||
-rw-r--r-- | basic/source/classes/sb.src | 3747 | ||||
-rw-r--r-- | basic/source/classes/sbintern.cxx | 109 | ||||
-rw-r--r-- | basic/source/classes/sbunoobj.cxx | 2500 | ||||
-rw-r--r-- | basic/source/classes/sbxmod.cxx | 1984 |
9 files changed, 11028 insertions, 0 deletions
diff --git a/basic/source/classes/disas.cxx b/basic/source/classes/disas.cxx new file mode 100644 index 000000000000..74c3922f0ab0 --- /dev/null +++ b/basic/source/classes/disas.cxx @@ -0,0 +1,701 @@ +/************************************************************************* + * + * $RCSfile: disas.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 16:12:09 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#include <stdio.h> +#include <string.h> + +#ifndef _STREAM_HXX //autogen +#include <tools/stream.hxx> +#endif +#pragma hdrstop +#include <svtools/sbx.hxx> +#include "sb.hxx" +#include "iosys.hxx" +#include "disas.hxx" +// Makro MEMBER() +#include "macfix.hxx" + +#include "segmentc.hxx" +#pragma SW_SEGMENT_CLASS( SBDISAS, SBDISAS_CODE ) + +static const char* pOp1[] = { + "NOP", + + // Operatoren + // die folgenden Operatoren sind genauso angeordnet + // wie der enum SbxVarOp + "EXP", "MUL", "DIV", "MOD", "PLUS", "MINUS", "NEG", + "EQ", "NE", "LT", "GT", "LE", "GE", + "IDIV", "AND", "OR", "XOR", "EQV", "IMP", "NOT", + "CAT", + // Ende enum SbxVarOp + "LIKE", "IS", + // Laden/speichern + "ARGC", // neuen Argv einrichten + "ARGV", // TOS ==> aktueller Argv + "INPUT", // Input ==> TOS + "LINPUT", // Line Input ==> TOS + "GET", // TOS anfassen + "SET", // Speichern Objekt TOS ==> TOS-1 + "PUT", // TOS ==> TOS-1 + "CONST", // TOS ==> TOS-1, dann ReadOnly + "DIM", // DIM + "REDIM", // REDIM + "REDIMP", // REDIM PRESERVE + "ERASE", // TOS loeschen + // Verzweigen + "STOP", // Programmende + "INITFOR", // FOR-Variable initialisieren + "NEXT", // FOR-Variable inkrementieren + "CASE", // Anfang CASE + "ENDCASE", // Ende CASE + "STDERR", // Standard-Fehlerbehandlung + "NOERROR", // keine Fehlerbehandlung + "LEAVE", // UP verlassen + // E/A + "CHANNEL", // TOS = Kanalnummer + "PRINT", // print TOS + "PRINTF", // print TOS in field + "WRITE", // write TOS + "RENAME", // Rename Tos+1 to Tos + "PROMPT", // TOS = Prompt for Input + "RESTART", // Restartpunkt definieren + "STDIO", // E/A-Kanal 0 einstellen + // Sonstiges + "EMPTY", // Leeren Ausdruck auf Stack + "ERROR", // TOS = Fehlercode + "LSET", // Speichern Objekt TOS ==> TOS-1 + "RSET" // Speichern Objekt TOS ==> TOS-1 +}; + +static const char* pOp2[] = { + "NUMBER", // Laden einer numerischen Konstanten (+ID) + "STRING", // Laden einer Stringkonstanten (+ID) + "CONST", // Immediate Load (+Wert) + "ARGN", // Speichern eines named Args in Argv (+StringID) + "PAD", // String auf feste Laenge bringen (+Laenge) + // Verzweigungen + "JUMP", // Sprung (+Target) + "JUMP.T", // TOS auswerten, bedingter Sprung (+Target) + "JUMP.F", // TOS auswerten, bedingter Sprung (+Target) + "ONJUMP", // TOS auswerten, Sprung in JUMP-Tabelle (+MaxVal) + "GOSUB", // UP-Aufruf (+Target) + "RETURN", // UP-Return (+0 oder Target) + "TESTFOR", // FOR-Variable testen, inkrementieren (+Endlabel) + "CASETO", // Tos+1 <= Case <= Tos, 2xremove (+Target) + "ERRHDL", // Fehler-Handler (+Offset) + "RESUME", // Resume nach Fehlern (+0 or 1 or Label) + // E/A + "CLOSE", // (+Kanal/0) + "PRCHAR", // (+char) + // Objekte + "CLASS", // Klassennamen testen (+StringId) + "LIB", // Libnamen fuer Declare-Procs setzen (+StringId) + // Neues ab Beta 3 + "BASED", // TOS wird um BASE erhoeht, BASE davor gepusht + "ARGTYP", // Letzten Parameter in Argv konvertieren (+Typ) +}; + +static const char* pOp3[] = { + // Alle Opcodes mit zwei Operanden + "RTL", // Laden aus RTL (+StringID+Typ) + "FIND", // Laden (+StringID+Typ) + "ELEM", // Laden Element (+StringID+Typ) + "PARAM", // Parameter (+Offset+Typ) + // Verzweigen + "CALL", // DECLARE-Methode rufen (+StringID+Typ) + "CALL.C", // Cdecl-DECLARE-Methode rufen (+StringID+Typ) + "CASEIS", // Case-Test (+Test-Opcode+False-Target) + "STMNT", // Beginn eines Statements (+Line+Col) + // E/A + "OPEN", // (+SvStreamFlags+Flags) + // Objekte und Variable + "LOCAL", // Lokale Variable (+StringID+Typ) + "PUBLIC", // Modulglobale Variable (+StringID+Typ) + "GLOBAL", // Globale Variable (+StringID+Typ) + "CREATE", // Objekt kreieren (+StringId+StringId) + "STATIC", // Objekt kreieren (+StringId+StringId) + "TCREATE", // User defined Objekt kreieren (+StringId+StringId) + "DCREATE", // User defined Objekt-Array kreieren (+StringId+StringId) +}; + +static const char** pOps[3] = { pOp1, pOp2, pOp3 }; + +typedef void( SbiDisas::*Func )( String& ); // Verarbeitungsroutine + +static const Func pOperand2[] = { + MEMBER(SbiDisas::StrOp), // Laden einer numerischen Konstanten (+ID) + MEMBER(SbiDisas::StrOp), // Laden einer Stringkonstanten (+ID) + MEMBER(SbiDisas::ImmOp), // Immediate Load (+Wert) + MEMBER(SbiDisas::StrOp), // Speichern eines benannten Arguments(+ID) + MEMBER(SbiDisas::ImmOp), // String auf feste Laenge bringen (+Laenge) + // Verzweigungen + MEMBER(SbiDisas::LblOp), // Sprung (+Target) + MEMBER(SbiDisas::LblOp), // TOS auswerten), bedingter Sprung (+Target) + MEMBER(SbiDisas::LblOp), // TOS auswerten), bedingter Sprung (+Target) + MEMBER(SbiDisas::OnOp), // TOS auswerten), Sprung in JUMP-Tabelle (+MaxVal) + MEMBER(SbiDisas::LblOp), // UP-Aufruf (+Target) + MEMBER(SbiDisas::ReturnOp), // UP-Return (+0 oder Target) + MEMBER(SbiDisas::LblOp), // FOR-Variable testen), inkrementieren (+Endlabel) + MEMBER(SbiDisas::LblOp), // Tos+1 <= Case <= Tos), 2xremove (+Target) + MEMBER(SbiDisas::LblOp), // Fehler-Handler (+Offset) + MEMBER(SbiDisas::ResumeOp), // Resume nach Fehlern (+0 or 1 or Label) + // E/A + MEMBER(SbiDisas::CloseOp), // (+Kanal/0) + MEMBER(SbiDisas::CharOp), // (+char) + // Objekte + MEMBER(SbiDisas::StrOp), // Klassennamen testen (+StringId) + MEMBER(SbiDisas::StrOp), // Libnamen fuer Declare-Procs setzen (+StringId) + MEMBER(SbiDisas::ImmOp), // TOS wird um BASE erhoeht, BASE davor gepusht + MEMBER(SbiDisas::TypeOp), // Letzten Parameter in Argv konvertieren (+Typ) +}; + +static const Func pOperand3[] = { + // Alle Opcodes mit zwei Operanden + MEMBER(SbiDisas::VarOp), // Laden aus RTL (+StringID+Typ) + MEMBER(SbiDisas::VarOp), // Laden (+StringID+Typ) + MEMBER(SbiDisas::VarOp), // Laden Element (+StringID+Typ) + MEMBER(SbiDisas::OffOp), // Parameter (+Offset+Typ) + // Verzweigen + MEMBER(SbiDisas::VarOp), // DECLARE-Methode rufen (+StringID+Typ) + MEMBER(SbiDisas::VarOp), // CDecl-DECLARE-Methode rufen (+StringID+Typ) + MEMBER(SbiDisas::CaseOp), // Case-Test (+Test-Opcode+False-Target) + MEMBER(SbiDisas::StmntOp), // Statement (+Zeilen+Spalte) + // E/A + MEMBER(SbiDisas::StrmOp), // (+SvStreamFlags+Flags) + // Objekte + MEMBER(SbiDisas::VarDefOp), // Lokale Variable definieren (+StringID+Typ) + MEMBER(SbiDisas::VarDefOp), // Modulglobale Variable definieren (+StringID+Typ) + MEMBER(SbiDisas::VarDefOp), // Globale Variable definieren (+StringID+Typ) + MEMBER(SbiDisas::Str2Op), // Objekt kreieren (+StringId+StringId) + MEMBER(SbiDisas::VarDefOp), // Statische Variable definieren (+StringID+Typ) + MEMBER(SbiDisas::Str2Op), // User defined Objekt kreieren (+StringId+StringId) + MEMBER(SbiDisas::Str2Op), // User defined Objekt-Array kreieren (+StringId+StringId) +}; + +static const char* _crlf() +{ +#if defined (MAC) + return "\n"; +#elif defined (UNX) || defined( PM2 ) + return "\n"; +#else + return "\r\n"; +#endif +} + +// Diese Methode ist hier, damit die Datei als eigenes Segment geladen werden +// kann. + +BOOL SbModule::Disassemble( String& rText ) +{ + rText.Erase(); + if( pImage ) + { + SbiDisas aDisas( this, pImage ); + aDisas.Disas( rText ); + } + return BOOL( rText.Len() != 0 ); +} + +SbiDisas::SbiDisas( SbModule* p, const SbiImage* q ) : rImg( *q ), pMod( p ) +{ + memset( cLabels, 0, 8192 ); + nLine = nOff = nPC = nOp1 = nOp2 = nParts = 0; + eOp = _NOP; + // Label-Bits setzen + USHORT nPos; + nOff = 0; + while( Fetch() ) + { + BOOL bLbl = FALSE; + switch( eOp ) + { + case _RESUME: if( nOp1 <= 1 ) break; + case _RETURN: if( !nOp1 ) break; + case _JUMP: + case _JUMPT: + case _JUMPF: + case _GOSUB: + case _TESTFOR: + case _CASEIS: + case _CASETO: + case _ERRHDL: nPos = nOp1; bLbl = TRUE; break; + } + if( bLbl ) + cLabels[ nPos >> 3 ] |= ( 1 << ( nPos & 7 ) ); + } + nOff = 0; + // Die Publics noch dazu + for( USHORT i = 0; i < pMod->GetMethods()->Count(); i++ ) + { + SbMethod* pMeth = PTR_CAST(SbMethod,pMod->GetMethods()->Get( i )); + if( pMeth ) + { + nPos = pMeth->GetId(); + cLabels[ nPos >> 3 ] |= ( 1 << ( nPos & 7 ) ); + } + } +} + +// Aktuellen Opcode auslesen + +BOOL SbiDisas::Fetch() +{ + nPC = nOff; + if( nOff >= rImg.GetCodeSize() ) + return FALSE; + const char* p = rImg.GetCode() + nOff; + eOp = (SbiOpcode) ( *p++ & 0xFF ); + if( eOp <= SbOP0_END ) + { + nOp1 = nOp2 = 0; + nParts = 1; + nOff++; + return TRUE; + } + else if( eOp <= SbOP1_END ) + { + nOff += 3; + if( nOff > rImg.GetCodeSize() ) + return FALSE; + nOp1 = *p++ & 0xFF; nOp1 |= *p << 8; + nParts = 2; + return TRUE; + } + else if( eOp <= SbOP2_END ) + { + nOff += 5; + if( nOff > rImg.GetCodeSize() ) + return FALSE; + nOp1 = *p++ & 0xFF; nOp1 |= *p++ << 8; + nOp2 = *p++ & 0xFF; nOp2 |= *p << 8; + nParts = 3; + return TRUE; + } + else + return FALSE; +} + +void SbiDisas::Disas( SvStream& r ) +{ + String aText; + nOff = 0; + while( DisasLine( aText ) ) + { + ByteString aByteText( aText, gsl_getSystemTextEncoding() ); + r.WriteLine( aByteText ); + } +} + +void SbiDisas::Disas( String& r ) +{ + r.Erase(); + String aText; + nOff = 0; + while( DisasLine( aText ) ) + { + r += aText; + r.AppendAscii( _crlf() ); + } + aText.ConvertLineEnd(); +} + +#ifdef HP9000 +const char* SbiDisas_DisasLine_pMask[] = { + "%04X ", + "%04X %02X ", + "%04X %02X %04X ", + "%04X %02X %04X %04X " }; +#define pMask SbiDisas_DisasLine_pMask +#endif +BOOL SbiDisas::DisasLine( String& rText ) +{ + char cBuf[ 30 ]; +#ifndef HP9000 + const char* pMask[] = { + "%04X ", + "%04X %02X ", + "%04X %02X %04X ", + "%04X %02X %04X %04X " }; +#endif + rText.Erase(); + if( !Fetch() ) + return FALSE; + // Neue Zeile? + if( eOp == _STMNT && (short) nOp1 != nLine ) + { + // Zeile raussuchen + USHORT n = 0, l = nLine = nOp1; + while( --l ) { + n = rImg.aSource.SearchAscii( "\n", n ); + if( n == STRING_NOTFOUND ) break; + else n++; + } + // Stelle anzeigen + if( n != STRING_NOTFOUND ) + { + USHORT n2 = rImg.aSource.SearchAscii( "\n", n ); + if( n2 == STRING_NOTFOUND ) n2 = rImg.aSource.Len() - n; + String s( rImg.aSource.Copy( n, n2 - n + 1 ) ); + BOOL bDone; + do { + bDone = TRUE; + n = s.Search( '\r' ); + if( n != STRING_NOTFOUND ) bDone = FALSE, s.Erase( n, 1 ); + n = s.Search( '\n' ); + if( n != STRING_NOTFOUND ) bDone = FALSE, s.Erase( n, 1 ); + } while( !bDone ); +// sprintf( cBuf, pMask[ 0 ], nPC ); +// rText += cBuf; + rText.AppendAscii( "; " ); + rText += s; + rText.AppendAscii( _crlf() ); + } + } + // Label? + const char* p = ""; + if( cLabels[ nPC >> 3 ] & ( 1 << ( nPC & 7 ) ) ) + { + // Public? + ByteString aByteMethName; + for( USHORT i = 0; i < pMod->GetMethods()->Count(); i++ ) + { + SbMethod* pMeth = PTR_CAST(SbMethod,pMod->GetMethods()->Get( i )); + if( pMeth ) + { + aByteMethName = ByteString( pMeth->GetName(), gsl_getSystemTextEncoding() ); + if( pMeth->GetId() == nPC ) + { + p = aByteMethName.GetBuffer(); + break; + } + if( pMeth->GetId() >= nPC ) + break; + } + } + sprintf( cBuf, pMask[ 0 ], nPC ); + rText.AppendAscii( cBuf ); + if( p && *p ) + { + rText.AppendAscii( p ); + } + else + { + sprintf( cBuf, "Lbl%04X", nPC ); + rText.AppendAscii( cBuf ); + } + rText += ':'; + rText.AppendAscii( _crlf() ); + } + sprintf( cBuf, pMask[ nParts ], nPC, (USHORT) eOp, nOp1, nOp2 ); + rText.AppendAscii( cBuf ); + short n = eOp; + if( eOp >= SbOP2_START ) + n -= SbOP2_START; + else if( eOp >= SbOP1_START ) + n -= SbOP1_START; + rText += '\t'; + rText.AppendAscii( pOps[ nParts-1 ][ n ] ); + rText += '\t'; + switch( nParts ) + { + case 2: (this->*( pOperand2[ n ] ) )( rText ); break; + case 3: (this->*( pOperand3[ n ] ) )( rText ); break; + } + return TRUE; +} +#ifdef HP9000 +#undef pMask +#endif + + +// Auslesen aus StringPool + +void SbiDisas::StrOp( String& rText ) +{ + String aStr = rImg.GetString( nOp1 ); + const char* p = ByteString( aStr, gsl_getSystemTextEncoding() ).GetBuffer(); + if( p ) + { + rText += '"'; + rText.AppendAscii( p ); + rText += '"'; + } + else + { + rText.AppendAscii( "?String? " ); + rText += nOp1; + } +} + +void SbiDisas::Str2Op( String& rText ) +{ + StrOp( rText ); + rText += ','; + String s; + nOp1 = nOp2; + StrOp( s ); + rText += s; +} + +// Immediate Operand + +void SbiDisas::ImmOp( String& rText ) +{ + rText += nOp1; +} + +// OnGoto Operand + +void SbiDisas::OnOp( String& rText ) +{ + rText += nOp1 & 0x7FFF; + if( nOp1 & 0x800 ) + rText.AppendAscii( "\t; Gosub" ); +} + +// Label + +void SbiDisas::LblOp( String& rText ) +{ + char cBuf[ 10 ]; + sprintf( cBuf, "Lbl%04X", nOp1 ); + rText.AppendAscii( cBuf ); +} + +// 0 oder Label + +void SbiDisas::ReturnOp( String& rText ) +{ + if( nOp1 ) + LblOp( rText ); +} + +// 0, 1 oder Label + +void SbiDisas::ResumeOp( String& rText ) +{ + switch( nOp1 ) + { + case 1: rText.AppendAscii( "NEXT" ); break; + case 2: LblOp( rText ); + } +} + +// Prompt ausgeben +// FALSE/TRUE + +void SbiDisas::PromptOp( String& rText ) +{ + if( nOp1 ) + rText.AppendAscii( "\"? \"" ); +} + +// 0 oder 1 + +void SbiDisas::CloseOp( String& rText ) +{ + rText.AppendAscii( nOp1 ? "Channel" : "All" ); +} + +// Zeichen ausgeben + +void SbiDisas::CharOp( String& rText ) +{ + const char* p = NULL; + switch( nOp1 ) + { + case 7: p = "'\\a'"; break; + case 9: p = "'\\t'"; break; + case 10: p = "'\\n'"; break; + case 12: p = "'\\f'"; break; + case 13: p = "'\\r'"; break; + } + if( p ) rText.AppendAscii( p ); + else if( nOp1 >= ' ' ) + rText += '\'', + rText += (char) nOp1, + rText += '\''; + else + rText.AppendAscii( "char " ), + rText += nOp1; +} + +// Variable ausgeben: String-ID und Typ + +void SbiDisas::VarOp( String& rText ) +{ + rText += rImg.GetString( nOp1 & 0x7FFF ); + rText.AppendAscii( "\t; " ); + // Der Typ + USHORT n = nOp1; + nOp1 = nOp2; + TypeOp( rText ); + if( n & 0x8000 ) + rText.AppendAscii( ", Args" ); +} + +// Variable definieren: String-ID und Typ + +void SbiDisas::VarDefOp( String& rText ) +{ + rText += rImg.GetString( nOp1 ); + rText.AppendAscii( "\t; " ); + // Der Typ + USHORT n = nOp1; + nOp1 = nOp2; + TypeOp( rText ); +} + +// Variable ausgeben: Offset und Typ + +void SbiDisas::OffOp( String& rText ) +{ + rText += ( nOp1 & 0x7FFF ); + rText.AppendAscii( "\t; " ); + // Der Typ + USHORT n = nOp1; + nOp1 = nOp2; + TypeOp( rText ); + if( n & 0x8000 ) + rText.AppendAscii( ", Args" ); +} + +// Datentyp +#ifdef HP9000 +static char* SbiDisas_TypeOp_pTypes[13] = { + "Empty","Null","Integer","Long","Single","Double", + "Currency","Date","String","Object","Error","Boolean", + "Variant" }; +#define pTypes SbiDisas_TypeOp_pTypes +#endif +void SbiDisas::TypeOp( String& rText ) +{ + // AB 19.1.96: Typ kann Flag fr BYVAL enthalten (StepARGTYP) + if( nOp1 & 0x8000 ) + { + nOp1 &= 0x7FFF; // Flag wegfiltern + rText.AppendAscii( "BYVAL " ); + } + if( nOp1 < 13 ) + { +#ifndef HP9000 + static char* pTypes[13] = { + "Empty","Null","Integer","Long","Single","Double", + "Currency","Date","String","Object","Error","Boolean", + "Variant" }; +#endif + rText.AppendAscii( pTypes[ nOp1 ] ); + } + else + { + rText.AppendAscii( "type " ); + rText += nOp1; + } +} +#ifdef HP9000 +#undef pTypes +#endif + +// TRUE-Label, Bedingungs-Opcode + +void SbiDisas::CaseOp( String& rText ) +{ + LblOp( rText ); + rText += ','; + rText.AppendAscii( pOp1[ nOp2 - SbxEQ + _EQ ] ); +} + +// Zeile, Spalte + +void SbiDisas::StmntOp( String& rText ) +{ + rText += nOp1; + rText += ','; + USHORT nCol = nOp2 & 0xFF; + USHORT nFor = nOp2 / 0x100; + rText += nCol; + rText.AppendAscii( " (For-Level: " ); + rText += nFor; + rText += ')'; +} + +// open mode, flags + +void SbiDisas::StrmOp( String& rText ) +{ + char cBuf[ 10 ]; + sprintf( cBuf, "%04X", nOp1 ); + rText.AppendAscii( cBuf ); + if( nOp2 & SBSTRM_INPUT ) + rText.AppendAscii( ", Input" ); + if( nOp2 & SBSTRM_OUTPUT ) + rText.AppendAscii( ", Output" ); + if( nOp2 & SBSTRM_APPEND ) + rText.AppendAscii( ", Append" ); + if( nOp2 & SBSTRM_RANDOM ) + rText.AppendAscii( ", Random" ); + if( nOp2 & SBSTRM_BINARY ) + rText.AppendAscii( ", Binary" ); +} + + diff --git a/basic/source/classes/image.cxx b/basic/source/classes/image.cxx new file mode 100644 index 000000000000..b857afd4fe09 --- /dev/null +++ b/basic/source/classes/image.cxx @@ -0,0 +1,431 @@ +/************************************************************************* + * + * $RCSfile: image.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 16:12:09 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef _STREAM_HXX //autogen +#include <tools/stream.hxx> +#endif +#pragma hdrstop +#include <svtools/sbx.hxx> +#include "sb.hxx" +#include <string.h> // memset() etc +#include "image.hxx" +#include "filefmt.hxx" + +#include "segmentc.hxx" +#pragma SW_SEGMENT_CLASS( SBASIC, SBASIC_CODE ) + +SbiImage::SbiImage() +{ + rTypes = new SbxArray; + pStringOff = NULL; + pStrings = NULL; + pCode = NULL; + nFlags = + nStrings = + nStringSize= + nCodeSize = + nDimBase = 0; + bInit = + bError = FALSE; + eCharSet = gsl_getSystemTextEncoding(); +} + +SbiImage::~SbiImage() +{ + Clear(); +} + +void SbiImage::Clear() +{ + delete pStringOff; + delete pStrings; + delete pCode; + pStringOff = NULL; + pStrings = NULL; + pCode = NULL; + nFlags = + nStrings = + nStringSize= + nCodeSize = 0; + eCharSet = gsl_getSystemTextEncoding(); + nDimBase = 0; + bError = FALSE; +} + +/************************************************************************** +* +* Service-Routinen fuer das Laden und Speichern +* +**************************************************************************/ + +BOOL SbiGood( SvStream& r ) +{ + return BOOL( !r.IsEof() && r.GetError() == SVSTREAM_OK ); +} + +// Oeffnen eines Records + +ULONG SbiOpenRecord( SvStream& r, UINT16 nSignature, UINT16 nElem ) +{ + ULONG nPos = r.Tell(); + r << nSignature << (INT32) 0 << nElem; + return nPos; +} + +// Schliessen eines Records + +void SbiCloseRecord( SvStream& r, ULONG nOff ) +{ + ULONG nPos = r.Tell(); + r.Seek( nOff + 2 ); + r << (INT32) ( nPos - nOff - 8 ); + r.Seek( nPos ); +} + +/************************************************************************** +* +* Laden und Speichern +* +**************************************************************************/ + +// Falls die Versionsnummer nicht passt, werden die binaeren Teile +// nicht geladen, wohl aber Source, Kommentar und Name. + +BOOL SbiImage::Load( SvStream& r ) +{ + UINT16 nSign, nCount; + UINT32 nLen, nOff; + + Clear(); + ULONG nStart = r.Tell(); + // Master-Record einlesen + r >> nSign >> nLen >> nCount; + ULONG nLast = r.Tell() + nLen; + UINT32 nVersion = 0; // Versionsnummer + UINT32 nCharSet; // System-Zeichensatz + UINT32 lDimBase; + UINT16 nReserved1; + UINT32 nReserved2; + UINT32 nReserved3; + BOOL bBadVer = FALSE; + if( nSign == B_MODULE ) + { + r >> nVersion >> nCharSet >> lDimBase + >> nFlags >> nReserved1 >> nReserved2 >> nReserved3; + eCharSet = (CharSet) nCharSet; + bBadVer = BOOL( nVersion != B_CURVERSION ); + nDimBase = (USHORT) lDimBase; + } + + ULONG nNext; + while( ( nNext = r.Tell() ) < nLast ) + { + short i; + + r >> nSign >> nLen >> nCount; + nNext += nLen + 8; + if( r.GetError() == SVSTREAM_OK ) + switch( nSign ) + { + case B_NAME: + r.ReadByteString( aName, eCharSet ); + //r >> aName; + break; + case B_COMMENT: + r.ReadByteString( aComment, eCharSet ); + //r >> aComment; + break; + case B_SOURCE: + r.ReadByteString( aSource, eCharSet ); + //r >> aSource; + break; + case B_PCODE: + if( bBadVer ) break; + pCode = new char[ nLen ]; + nCodeSize = (USHORT) nLen; + r.Read( pCode, nCodeSize ); + break; + case B_PUBLICS: + case B_POOLDIR: + case B_SYMPOOL: + case B_LINERANGES: + break; + case B_STRINGPOOL: + if( bBadVer ) break; + MakeStrings( nCount ); + for( i = 0; i < nStrings && SbiGood( r ); i++ ) + { + r >> nOff; + pStringOff[ i ] = (USHORT) nOff; + } + r >> nLen; + if( SbiGood( r ) ) + { + delete pStrings; + pStrings = new sal_Unicode[ nLen ]; + nStringSize = (USHORT) nLen; + + char* pByteStrings = new char[ nLen ]; + r.Read( pByteStrings, nStringSize ); + for( short i = 0; i < nStrings; i++ ) + { + USHORT nOff = pStringOff[ i ]; + String aStr( pByteStrings + nOff, eCharSet ); + memcpy( pStrings + nOff, aStr.GetBuffer(), (aStr.Len() + 1) * sizeof( sal_Unicode ) ); + } + delete pByteStrings; + } break; + case B_MODEND: + goto done; + default: + break; + } + else + break; + r.Seek( nNext ); + } +done: + r.Seek( nLast ); + //if( eCharSet != ::GetSystemCharSet() ) + //ConvertStrings(); + if( !SbiGood( r ) ) + bError = TRUE; + return BOOL( !bError ); +} + +BOOL SbiImage::Save( SvStream& r ) +{ + // Erst mal der Header: + ULONG nStart = SbiOpenRecord( r, B_MODULE, 1 ); + ULONG nPos; + r << (INT32) B_CURVERSION + << (INT32) eCharSet + << (INT32) nDimBase + << (INT16) nFlags + << (INT16) 0 + << (INT32) 0 + << (INT32) 0; + + // Name? + if( aName.Len() && SbiGood( r ) ) + { + nPos = SbiOpenRecord( r, B_NAME, 1 ); + r.WriteByteString( aName, eCharSet ); + //r << aName; + SbiCloseRecord( r, nPos ); + } + // Kommentar? + if( aComment.Len() && SbiGood( r ) ) + { + nPos = SbiOpenRecord( r, B_COMMENT, 1 ); + r.WriteByteString( aComment, eCharSet ); + //r << aComment; + SbiCloseRecord( r, nPos ); + } + // Source? + if( aSource.Len() && SbiGood( r ) ) + { + nPos = SbiOpenRecord( r, B_SOURCE, 1 ); + r.WriteByteString( aSource, eCharSet ); + //r << aSource; + SbiCloseRecord( r, nPos ); + } + // Binaere Daten? + if( pCode && SbiGood( r ) ) + { + nPos = SbiOpenRecord( r, B_PCODE, 1 ); + r.Write( pCode, nCodeSize ); + SbiCloseRecord( r, nPos ); + } + // String-Pool? + if( nStrings ) + { + nPos = SbiOpenRecord( r, B_STRINGPOOL, nStrings ); + // Fuer jeden String: + // UINT32 Offset des Strings im Stringblock + for( short i = 0; i < nStrings && SbiGood( r ); i++ ) + r << (UINT32) pStringOff[ i ]; + + // Danach der String-Block + char* pByteStrings = new char[ nStringSize ]; + for( i = 0; i < nStrings; i++ ) + { + USHORT nOff = pStringOff[ i ]; + ByteString aStr( pStrings + nOff, eCharSet ); + memcpy( pByteStrings + nOff, aStr.GetBuffer(), (aStr.Len() + 1) * sizeof( char ) ); + } + r << (UINT32) nStringSize; + r.Write( pByteStrings, nStringSize ); + delete pByteStrings; + SbiCloseRecord( r, nPos ); + } + // Und die Gesamtlaenge setzen + SbiCloseRecord( r, nStart ); + if( !SbiGood( r ) ) + bError = TRUE; + return BOOL( !bError ); +} + +/************************************************************************** +* +* Routinen, die auch vom Compiler gerufen werden +* +**************************************************************************/ + +void SbiImage::MakeStrings( short nSize ) +{ + nStrings = nStringIdx = nStringOff = 0; + nStringSize = 1024; + pStrings = new sal_Unicode[ nStringSize ]; + pStringOff = new UINT16[ nSize ]; + if( pStrings && pStringOff ) + { + nStrings = nSize; + memset( pStringOff, 0, nSize * sizeof( UINT16 ) ); + memset( pStrings, 0, nStringSize * sizeof( sal_Unicode ) ); + } + else + bError = TRUE; +} + +// Hinzufuegen eines Strings an den StringPool. Der String-Puffer +// waechst dynamisch in 1K-Schritten + +// AB 12.5.2000 Aus Zeitgruenden vorerst weiter auf char-Basis +// TODO: Auch hier auf Unicode umstellen, d.h. sal_Unicode-Array +void SbiImage::AddString( const String& r ) +{ + if( nStringIdx >= nStrings ) + bError = TRUE; + if( !bError ) + { + UINT16 len = r.Len() + 1; + long needed = (long) nStringOff + len; + if( needed > 0xFF00L ) + bError = TRUE; // out of mem! + else if( (USHORT) needed > nStringSize ) + { + sal_Unicode* p = new sal_Unicode[ nStringSize + 1024 ]; + if( p ) + { + memcpy( p, pStrings, nStringSize * sizeof( sal_Unicode ) ); + delete pStrings; + pStrings = p; + nStringSize += 1024; + } + else + bError = TRUE; + } + if( !bError ) + { + pStringOff[ nStringIdx++ ] = nStringOff; + //ByteString aByteStr( r, eCharSet ); + memcpy( pStrings + nStringOff, r.GetBuffer(), len * sizeof( sal_Unicode ) ); + nStringOff += len; + // war das der letzte String? Dann die Groesse + // des Puffers aktualisieren + if( nStringIdx >= nStrings ) + nStringSize = nStringOff; + } + } +} + +// Codeblock hinzufuegen +// Der Block wurde vom Compiler aus der Klasse SbBuffer herausgeholt +// und ist bereits per new angelegt. Ausserdem enthaelt er alle Integers +// im Big Endian-Format, kann also direkt gelesen/geschrieben werden. + +void SbiImage::AddCode( char* p, USHORT s ) +{ + pCode = p; + nCodeSize = s; +} + +void SbiImage::AddType(SbxObject* pObject) // User-Type mit aufnehmen +{ + SbxObject *pCopyObject = new SbxObject(*pObject); + rTypes->Insert (pCopyObject,rTypes->Count()); +} + +/************************************************************************** +* +* Zugriffe auf das Image +* +**************************************************************************/ + +// IDs zaehlen ab 1!! + +String SbiImage::GetString( short nId ) const +{ + if( nId && nId <= nStrings ) + { + USHORT nOff = pStringOff[ --nId ]; + String aStr( pStrings + nOff ); + return aStr; + } + return String(); +} + +const SbxObject* SbiImage::FindType (String aTypeName) const +{ + return (SbxObject *)rTypes->Find(aTypeName,SbxCLASS_OBJECT); +} + diff --git a/basic/source/classes/makefile.mk b/basic/source/classes/makefile.mk new file mode 100644 index 000000000000..da2218d70b77 --- /dev/null +++ b/basic/source/classes/makefile.mk @@ -0,0 +1,93 @@ +#************************************************************************* +# +# $RCSfile: makefile.mk,v $ +# +# $Revision: 1.1.1.1 $ +# +# last change: $Author: hr $ $Date: 2000-09-18 16:12:09 $ +# +# The Contents of this file are made available subject to the terms of +# either of the following licenses +# +# - GNU Lesser General Public License Version 2.1 +# - Sun Industry Standards Source License Version 1.1 +# +# Sun Microsystems Inc., October, 2000 +# +# GNU Lesser General Public License Version 2.1 +# ============================================= +# Copyright 2000 by Sun Microsystems, Inc. +# 901 San Antonio Road, Palo Alto, CA 94303, USA +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License version 2.1, as published by the Free Software Foundation. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA +# +# +# Sun Industry Standards Source License Version 1.1 +# ================================================= +# The contents of this file are subject to the Sun Industry Standards +# Source License Version 1.1 (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.openoffice.org/license.html. +# +# Software provided under this License is provided on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, +# WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, +# MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. +# See the License for the specific provisions governing your rights and +# obligations concerning the Software. +# +# The Initial Developer of the Original Code is: Sun Microsystems, Inc. +# +# Copyright: 2000 by Sun Microsystems, Inc. +# +# All Rights Reserved. +# +# Contributor(s): _______________________________________ +# +# +# +#************************************************************************* + +PRJ=..$/.. + +PRJNAME=BASIC +TARGET=classes + +# --- Settings ----------------------------------------------------------- + +ENABLE_EXCEPTIONS=TRUE + +.INCLUDE : svpre.mk +.INCLUDE : settings.mk +.INCLUDE : sv.mk + + + +# --- Allgemein ----------------------------------------------------------- + +SLOFILES= \ + $(SLO)$/sb.obj \ + $(SLO)$/sbxmod.obj \ + $(SLO)$/image.obj \ + $(SLO)$/sbintern.obj \ + $(SLO)$/sbunoobj.obj \ + $(SLO)$/propacc.obj \ + $(SLO)$/disas.obj + +SRCFILES= sb.src + +# --- Targets ------------------------------------------------------------- + +.INCLUDE : target.mk diff --git a/basic/source/classes/propacc.cxx b/basic/source/classes/propacc.cxx new file mode 100644 index 000000000000..d28282379bd6 --- /dev/null +++ b/basic/source/classes/propacc.cxx @@ -0,0 +1,435 @@ +/************************************************************************* + * + * $RCSfile: propacc.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 16:12:09 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#include "propacc.hxx" + +#include <tools/urlobj.hxx> +#include <tools/errcode.hxx> +#include <svtools/svarray.hxx> +#include <svtools/sbx.hxx> +#include <sbstar.hxx> +#include <sbunoobj.hxx> + +using namespace com::sun::star::uno; +using namespace com::sun::star::lang; +using namespace com::sun::star::beans; +using namespace cppu; +using namespace rtl; + + +//======================================================================== + +// Deklaration Konvertierung von Sbx nach Uno mit bekannter Zielklasse +Any sbxToUnoValue( SbxVariable* pVar, const Reference< XIdlClass >& xIdlTargetClass ); +Reference<XIdlClass> TypeToIdlClass( const Type& rType ); + +//======================================================================== + +#ifdef WNT +#define CDECL _cdecl +#endif +#ifdef OS2 +#define CDECL _Optlink +#endif +#if defined(UNX) || defined(MAC) +#define CDECL +#endif + +int CDECL SbCompare_PropertyValues_Impl( const void *arg1, const void *arg2 ) +{ + return ((PropertyValue*)arg1)->Name.compareTo( ((PropertyValue*)arg2)->Name ); +} + +int CDECL SbCompare_UString_PropertyValue_Impl( const void *arg1, const void *arg2 ) +{ + const OUString *pArg1 = (OUString*) arg1; + const PropertyValue **pArg2 = (const PropertyValue**) arg2; + return pArg1->compareTo( (*pArg2)->Name ); +} + +int CDECL SbCompare_Properties_Impl( const void *arg1, const void *arg2 ) +{ + return ((Property*)arg1)->Name.compareTo( ((Property*)arg2)->Name ); +} + +int CDECL SbCompare_UString_Property_Impl( const void *arg1, const void *arg2 ) +{ + const OUString *pArg1 = (OUString*) arg1; + const Property *pArg2 = (Property*) arg2; + return pArg1->compareTo( pArg2->Name ); +} + +//---------------------------------------------------------------------------- + +SbPropertyValues::SbPropertyValues() +{ +} + +//---------------------------------------------------------------------------- + +SbPropertyValues::~SbPropertyValues() +{ + _xInfo = Reference< XPropertySetInfo >(); + + for ( USHORT n = 0; n < _aPropVals.Count(); ++n ) + delete _aPropVals.GetObject( n ); +} + +//---------------------------------------------------------------------------- + +Reference< XPropertySetInfo > SbPropertyValues::getPropertySetInfo(void) throw( RuntimeException ) +{ + // create on demand? + if ( !_xInfo.is() ) + { + SbPropertySetInfo *pInfo = new SbPropertySetInfo( _aPropVals ); + ((SbPropertyValues*)this)->_xInfo = (XPropertySetInfo*)pInfo; + } + return _xInfo; +} + +//------------------------------------------------------------------------- + +INT32 SbPropertyValues::GetIndex_Impl( const OUString &rPropName ) const +{ + PropertyValue **ppPV; + ppPV = (PropertyValue **) + bsearch( &rPropName, _aPropVals.GetData(), _aPropVals.Count(), + sizeof( PropertyValue* ), + SbCompare_UString_PropertyValue_Impl ); + return ppPV ? ( (ppPV-_aPropVals.GetData()) / sizeof(ppPV) ) : USHRT_MAX; +} + +//---------------------------------------------------------------------------- + +void SbPropertyValues::setPropertyValue( + const OUString& aPropertyName, + const Any& aValue) +{ + USHORT nIndex = GetIndex_Impl( aPropertyName ); + PropertyValue *pPropVal = _aPropVals.GetObject(nIndex); + pPropVal->Value = aValue; +} + +//---------------------------------------------------------------------------- + +Any SbPropertyValues::getPropertyValue( + const OUString& aPropertyName) throw( UnknownPropertyException, WrappedTargetException, RuntimeException ) +{ + USHORT nIndex = GetIndex_Impl( aPropertyName ); + if ( nIndex != USHRT_MAX ) + return _aPropVals.GetObject(nIndex)->Value; + return Any(); +} + +//---------------------------------------------------------------------------- + +void SbPropertyValues::addPropertyChangeListener( + const OUString& aPropertyName, + const Reference< XPropertyChangeListener >& ) +{ +} + +//---------------------------------------------------------------------------- + +void SbPropertyValues::removePropertyChangeListener( + const OUString& aPropertyName, + const Reference< XPropertyChangeListener >& ) +{ +} + +//---------------------------------------------------------------------------- + +void SbPropertyValues::addVetoableChangeListener( + const OUString& aPropertyName, + const Reference< XVetoableChangeListener >& ) +{ +} + +//---------------------------------------------------------------------------- + +void SbPropertyValues::removeVetoableChangeListener( + const OUString& aPropertyName, + const Reference< XVetoableChangeListener >& ) +{ +} + +//---------------------------------------------------------------------------- + +Sequence< PropertyValue > SbPropertyValues::getPropertyValues(void) +{ + Sequence<PropertyValue> aRet( _aPropVals.Count()); + for ( USHORT n = 0; n < _aPropVals.Count(); ++n ) + aRet.getArray()[n] = *_aPropVals.GetObject(n); + return aRet; +} + +//---------------------------------------------------------------------------- + +void SbPropertyValues::setPropertyValues(const Sequence< PropertyValue >& rPropertyValues ) +{ + if ( _aPropVals.Count() ) + throw PropertyExistException(); + + const PropertyValue *pPropVals = rPropertyValues.getConstArray(); + for ( sal_Int16 n = 0; n < rPropertyValues.getLength(); ++n ) + { + PropertyValue *pPropVal = new PropertyValue(pPropVals[n]); + _aPropVals.Insert( pPropVal, n ); + } +} + +//============================================================================ +//PropertySetInfoImpl + +PropertySetInfoImpl::PropertySetInfoImpl() +{ +} + +INT32 PropertySetInfoImpl::GetIndex_Impl( const OUString &rPropName ) const +{ + Property *pP; + pP = (Property*) + bsearch( &rPropName, _aProps.getConstArray(), _aProps.getLength(), + sizeof( Property ), + SbCompare_UString_Property_Impl ); + return pP ? ( (pP-_aProps.getConstArray()) / sizeof(pP) ) : -1; +} + +Sequence< Property > PropertySetInfoImpl::getProperties(void) +{ + return _aProps; +} + +Property PropertySetInfoImpl::getPropertyByName(const OUString& Name) throw( RuntimeException ) +{ + USHORT nIndex = GetIndex_Impl( Name ); + if( USHRT_MAX != nIndex ) + return _aProps.getConstArray()[ nIndex ]; + return Property(); +} + +sal_Bool PropertySetInfoImpl::hasPropertyByName(const OUString& Name) throw( RuntimeException ) +{ + USHORT nIndex = GetIndex_Impl( Name ); + return USHRT_MAX != nIndex; +} + + +//============================================================================ + +SbPropertySetInfo::SbPropertySetInfo() +{ +} + +//---------------------------------------------------------------------------- + +SbPropertySetInfo::SbPropertySetInfo( const SbPropertyValueArr_Impl &rPropVals ) +{ + aImpl._aProps.realloc( rPropVals.Count() ); + for ( USHORT n = 0; n < rPropVals.Count(); ++n ) + { + Property &rProp = aImpl._aProps.getArray()[n]; + const PropertyValue &rPropVal = *rPropVals.GetObject(n); + rProp.Name = rPropVal.Name; + rProp.Handle = rPropVal.Handle; + rProp.Type = getCppuVoidType(); + rProp.Attributes = 0; + } +} + +//---------------------------------------------------------------------------- + +SbPropertySetInfo::~SbPropertySetInfo() +{ +} + +//------------------------------------------------------------------------- + +Sequence< Property > SbPropertySetInfo::getProperties(void) throw( RuntimeException ) +{ + return aImpl.getProperties(); +} + +Property SbPropertySetInfo::getPropertyByName(const OUString& Name) + throw( RuntimeException ) +{ + return aImpl.getPropertyByName( Name ); +} + +BOOL SbPropertySetInfo::hasPropertyByName(const OUString& Name) + throw( RuntimeException ) +{ + return aImpl.hasPropertyByName( Name ); +} + + +//---------------------------------------------------------------------------- + +SbPropertyContainer::SbPropertyContainer() +{ +} + +//---------------------------------------------------------------------------- + +SbPropertyContainer::~SbPropertyContainer() +{ +} + +//---------------------------------------------------------------------------- +void SbPropertyContainer::addProperty(const OUString& Name, + INT16 Attributes, + const Any& DefaultValue) + throw( PropertyExistException, IllegalTypeException, + IllegalArgumentException, RuntimeException ) +{ +} + +//---------------------------------------------------------------------------- +void SbPropertyContainer::removeProperty(const OUString& Name) + throw( UnknownPropertyException, RuntimeException ) +{ +} + +//---------------------------------------------------------------------------- +// XPropertySetInfo +Sequence< Property > SbPropertyContainer::getProperties(void) +{ + return aImpl.getProperties(); +} + +Property SbPropertyContainer::getPropertyByName(const OUString& Name) + throw( RuntimeException ) +{ + return aImpl.getPropertyByName( Name ); +} + +BOOL SbPropertyContainer::hasPropertyByName(const OUString& Name) + throw( RuntimeException ) +{ + return aImpl.hasPropertyByName( Name ); +} + +//---------------------------------------------------------------------------- + +Sequence< PropertyValue > SbPropertyContainer::getPropertyValues(void) +{ + return Sequence<PropertyValue>(); +} + +//---------------------------------------------------------------------------- + +void SbPropertyContainer::setPropertyValues(const Sequence< PropertyValue >& PropertyValues_) +{ +} + +//---------------------------------------------------------------------------- + +void RTL_Impl_CreatePropertySet( StarBASIC* pBasic, SbxArray& rPar, BOOL bWrite ) +{ + // Wir brauchen mindestens 1 Parameter + if ( rPar.Count() < 2 ) + { + StarBASIC::Error( SbERR_BAD_ARGUMENT ); + return; + } + + // Klassen-Name der struct holen + String aServiceName( RTL_CONSTASCII_USTRINGPARAM("stardiv.uno.beans.PropertySet") ); + +#if 0 + // Service suchen und instanzieren + Reference< XMultiServiceFactory > xServiceManager = getProcessServiceFactory(); + Reference< XInterface > xInterface; + if( xProv.is() ) + xInterface = xProv->newInstance(); +#else + Reference< XInterface > xInterface = (OWeakObject*) new SbPropertyValues(); +#endif + + SbxVariableRef refVar = rPar.Get(0); + if( xInterface.is() ) + { + // PropertyValues setzen + Any aArgAsAny = sbxToUnoValue( rPar.Get(1), + TypeToIdlClass( getCppuType( (Sequence<PropertyValue>*)0 ) ) ); + Sequence<PropertyValue> *pArg = + (Sequence<PropertyValue>*) aArgAsAny.getValue(); + Reference< XPropertyAccess > xPropAcc = Reference< XPropertyAccess >::query( xInterface ); + xPropAcc->setPropertyValues( *pArg ); + + // SbUnoObject daraus basteln und zurueckliefern + Any aAny; + aAny <<= xInterface; + SbUnoObjectRef xUnoObj = new SbUnoObject( aServiceName, aAny ); + if( xUnoObj->getUnoAny().getValueType().getTypeClass() != TypeClass_VOID ) + { + // Objekt zurueckliefern + refVar->PutObject( (SbUnoObject*)xUnoObj ); + return; + } + } + + // Objekt konnte nicht erzeugt werden + refVar->PutObject( NULL ); +} + + diff --git a/basic/source/classes/sb.cxx b/basic/source/classes/sb.cxx new file mode 100644 index 000000000000..6b3cd5c011ba --- /dev/null +++ b/basic/source/classes/sb.cxx @@ -0,0 +1,1028 @@ +/************************************************************************* + * + * $RCSfile: sb.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 16:12:10 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#include <stdio.h> // sprintf() + +#pragma hdrstop +#include "sb.hxx" +#ifdef VCL +#include <vcl/rcid.h> +#include <vcl/config.hxx> +#endif + +#ifndef _STREAM_HXX //autogen +#include <tools/stream.hxx> +#endif +#ifndef __RSC //autogen +#include <tools/errinf.hxx> +#endif +#ifndef _SBXCLASS_HXX //autogen +#include <svtools/sbx.hxx> +#endif +#ifndef _LIST_HXX //autogen +#include <tools/list.hxx> +#endif +#ifndef _SHL_HXX //autogen +#include <tools/shl.hxx> +#endif +#ifndef _TOOLS_RC_HXX //autogen +#include <tools/rc.hxx> +#endif +#ifndef _SV_SVAPP_HXX //autogen +#include <vcl/svapp.hxx> +#endif +#include "sbunoobj.hxx" +#include "sbjsmeth.hxx" +#include "sbjsmod.hxx" +#include "sbintern.hxx" +#include "disas.hxx" +#include "runtime.hxx" +#include "sbuno.hxx" +#include "stdobj.hxx" +#include "filefmt.hxx" +#include "sb.hrc" +#include <basrid.hxx> + +#pragma SW_SEGMENT_CLASS( SBASIC, SBASIC_CODE ) + +SV_IMPL_VARARR(SbTextPortions,SbTextPortion) + +TYPEINIT1(StarBASIC,SbxObject) + +#define RTLNAME "@SBRTL" + + +//======================================================================== +// Array zur Umrechnung SFX <-> VB-Fehlercodes anlegen + +struct SFX_VB_ErrorItem +{ + USHORT nErrorVB; + SbError nErrorSFX; +}; + +const SFX_VB_ErrorItem __FAR_DATA SFX_VB_ErrorTab[] = +{ + { 2, SbERR_SYNTAX }, + { 3, SbERR_NO_GOSUB }, + { 4, SbERR_REDO_FROM_START }, + { 5, SbERR_BAD_ARGUMENT }, + { 6, SbERR_MATH_OVERFLOW }, + { 7, SbERR_NO_MEMORY }, + { 8, SbERR_ALREADY_DIM }, + { 9, SbERR_OUT_OF_RANGE }, + { 10, SbERR_DUPLICATE_DEF }, + { 11, SbERR_ZERODIV }, + { 12, SbERR_VAR_UNDEFINED }, + { 13, SbERR_CONVERSION }, + { 14, SbERR_BAD_PARAMETER }, + { 18, SbERR_USER_ABORT }, + { 20, SbERR_BAD_RESUME }, + { 28, SbERR_STACK_OVERFLOW }, + { 35, SbERR_PROC_UNDEFINED }, + { 48, SbERR_BAD_DLL_LOAD }, + { 49, SbERR_BAD_DLL_CALL }, + { 51, SbERR_INTERNAL_ERROR }, + { 52, SbERR_BAD_CHANNEL }, + { 53, SbERR_FILE_NOT_FOUND }, + { 54, SbERR_BAD_FILE_MODE }, + { 55, SbERR_FILE_ALREADY_OPEN }, + { 57, SbERR_IO_ERROR }, + { 58, SbERR_FILE_EXISTS }, + { 59, SbERR_BAD_RECORD_LENGTH }, + { 61, SbERR_DISK_FULL }, + { 62, SbERR_READ_PAST_EOF }, + { 63, SbERR_BAD_RECORD_NUMBER }, + { 67, SbERR_TOO_MANY_FILES }, + { 68, SbERR_NO_DEVICE }, + { 70, SbERR_ACCESS_DENIED }, + { 71, SbERR_NOT_READY }, + { 73, SbERR_NOT_IMPLEMENTED }, + { 74, SbERR_DIFFERENT_DRIVE }, + { 75, SbERR_ACCESS_ERROR }, + { 76, SbERR_PATH_NOT_FOUND }, + { 91, SbERR_NO_OBJECT }, + { 93, SbERR_BAD_PATTERN }, + { 94, SBERR_IS_NULL }, + { 250, SbERR_DDE_ERROR }, + { 280, SbERR_DDE_WAITINGACK }, + { 281, SbERR_DDE_OUTOFCHANNELS }, + { 282, SbERR_DDE_NO_RESPONSE }, + { 283, SbERR_DDE_MULT_RESPONSES }, + { 284, SbERR_DDE_CHANNEL_LOCKED }, + { 285, SbERR_DDE_NOTPROCESSED }, + { 286, SbERR_DDE_TIMEOUT }, + { 287, SbERR_DDE_USER_INTERRUPT }, + { 288, SbERR_DDE_BUSY }, + { 289, SbERR_DDE_NO_DATA }, + { 290, SbERR_DDE_WRONG_DATA_FORMAT }, + { 291, SbERR_DDE_PARTNER_QUIT }, + { 292, SbERR_DDE_CONV_CLOSED }, + { 293, SbERR_DDE_NO_CHANNEL }, + { 294, SbERR_DDE_INVALID_LINK }, + { 295, SbERR_DDE_QUEUE_OVERFLOW }, + { 296, SbERR_DDE_LINK_ALREADY_EST }, + { 297, SbERR_DDE_LINK_INV_TOPIC }, + { 298, SbERR_DDE_DLL_NOT_FOUND }, + { 323, SbERR_CANNOT_LOAD }, + { 341, SbERR_BAD_INDEX }, + { 366, SbERR_NO_ACTIVE_OBJECT }, + { 380, SbERR_BAD_PROP_VALUE }, + { 382, SbERR_PROP_READONLY }, + { 394, SbERR_PROP_WRITEONLY }, + { 420, SbERR_INVALID_OBJECT }, + { 423, SbERR_NO_METHOD }, + { 424, SbERR_NEEDS_OBJECT }, + { 425, SbERR_INVALID_USAGE_OBJECT }, + { 430, SbERR_NO_OLE }, + { 438, SbERR_BAD_METHOD }, + { 440, SbERR_OLE_ERROR }, + { 445, SbERR_BAD_ACTION }, + { 446, SbERR_NO_NAMED_ARGS }, + { 447, SbERR_BAD_LOCALE }, + { 448, SbERR_NAMED_NOT_FOUND }, + { 449, SbERR_NOT_OPTIONAL }, + { 450, SbERR_WRONG_ARGS }, + { 451, SbERR_NOT_A_COLL }, + { 452, SbERR_BAD_ORDINAL }, + { 453, SbERR_DLLPROC_NOT_FOUND }, + { 460, SbERR_BAD_CLIPBD_FORMAT }, + { 951, SbERR_UNEXPECTED }, + { 952, SbERR_EXPECTED }, + { 953, SbERR_SYMBOL_EXPECTED }, + { 954, SbERR_VAR_EXPECTED }, + { 955, SbERR_LABEL_EXPECTED }, + { 956, SbERR_LVALUE_EXPECTED }, + { 957, SbERR_VAR_DEFINED }, + { 958, SbERR_PROC_DEFINED }, + { 959, SbERR_LABEL_DEFINED }, + { 960, SbERR_UNDEF_VAR }, + { 961, SbERR_UNDEF_ARRAY }, + { 962, SbERR_UNDEF_PROC }, + { 963, SbERR_UNDEF_LABEL }, + { 964, SbERR_UNDEF_TYPE }, + { 965, SbERR_BAD_EXIT }, + { 966, SbERR_BAD_BLOCK }, + { 967, SbERR_BAD_BRACKETS }, + { 968, SbERR_BAD_DECLARATION }, + { 969, SbERR_BAD_PARAMETERS }, + { 970, SbERR_BAD_CHAR_IN_NUMBER }, + { 971, SbERR_MUST_HAVE_DIMS }, + { 972, SbERR_NO_IF }, + { 973, SbERR_NOT_IN_SUBR }, + { 974, SbERR_NOT_IN_MAIN }, + { 975, SbERR_WRONG_DIMS }, + { 976, SbERR_BAD_OPTION }, + { 977, SbERR_CONSTANT_REDECLARED }, + { 978, SbERR_PROG_TOO_LARGE }, + { 979, SbERR_NO_STRINGS_ARRAYS }, + { 1000, SbERR_PROPERTY_NOT_FOUND }, + { 1001, SbERR_METHOD_NOT_FOUND }, + { 1002, SbERR_ARG_MISSING }, + { 1003, SbERR_BAD_NUMBER_OF_ARGS }, + { 1004, SbERR_METHOD_FAILED }, + { 1005, SbERR_SETPROP_FAILED }, + { 1006, SbERR_GETPROP_FAILED }, + { 0xFFFF, 0xFFFFFFFFL } // End-Marke +}; + +//////////////////////////////////////////////////////////////////////////// + +// Die StarBASIC-Factory hat einen Hack. Wenn ein SbModule eingerichtet wird, +// wird der Pointer gespeichert und an nachfolgende SbProperties/SbMethods +// uebergeben. Dadurch wird die Modul-Relationship wiederhergestellt. Das +// klappt aber nur, wenn ein Modul geladen wird. Fuer getrennt geladene +// Properties kann es Probleme geben! + +SbxBase* SbiFactory::Create( UINT16 nSbxId, UINT32 nCreator ) +{ + if( nCreator == SBXCR_SBX ) + { + String aEmpty; + switch( nSbxId ) + { + case SBXID_BASIC: + return new StarBASIC( NULL ); + case SBXID_BASICMOD: + return new SbModule( aEmpty ); + case SBXID_BASICPROP: + return new SbProperty( aEmpty, SbxVARIANT, NULL ); + case SBXID_BASICMETHOD: + return new SbMethod( aEmpty, SbxVARIANT, NULL ); + case SBXID_JSCRIPTMOD: + return new SbJScriptModule( aEmpty ); + case SBXID_JSCRIPTMETH: + return new SbJScriptMethod( aEmpty, SbxVARIANT, NULL ); + } + } + return NULL; +} + +SbxObject* SbiFactory::CreateObject( const String& rClass ) +{ + if( rClass.EqualsIgnoreCaseAscii( "StarBASIC" ) ) + return new StarBASIC( NULL ); + else + if( rClass.EqualsIgnoreCaseAscii( "StarBASICModule" ) ) + { + String aEmpty; + return new SbModule( aEmpty ); + } + else + return NULL; +} + +//////////////////////////////////////////////////////////////////////////// + +StarBASIC::StarBASIC( StarBASIC* p ) + : SbxObject( String( RTL_CONSTASCII_USTRINGPARAM("StarBASIC") ) ) +{ + SetParent( p ); + pLibInfo = NULL; + bNoRtl = bBreak = FALSE; + pModules = new SbxArray; + +#ifdef DBG_UTIL + Config LangConfig( String( RTL_CONSTASCII_USTRINGPARAM("d:\\LANGUAGE.INI") ) ); + LangConfig.SetGroup( "main" ); + ByteString aStr = LangConfig.ReadKey( "language","basic" ); + if( aStr == "vbscript" ) + SetGlobalLanguageMode( SB_LANG_VBSCRIPT ); + else + if( aStr == "javascript" ) + SetGlobalLanguageMode( SB_LANG_JAVASCRIPT ); +#endif + + if( !GetSbData()->nInst++ ) + { + pSBFAC = new SbiFactory; + AddFactory( pSBFAC ); + pUNOFAC = new SbUnoFactory; + AddFactory( pUNOFAC ); + } + pRtl = new SbiStdObject( String( RTL_CONSTASCII_USTRINGPARAM(RTLNAME) ), this ); + // Suche ueber StarBASIC ist immer global + SetFlag( SBX_GBLSEARCH ); +} + +// #51727 SetModified ueberladen, damit der Modified- +// Zustand nicht an den Parent weitergegeben wird. +void StarBASIC::SetModified( BOOL b ) +{ + SbxBase::SetModified( b ); +} + +//*** + +StarBASIC::~StarBASIC() +{ + if( !--GetSbData()->nInst ) + { + RemoveFactory( pSBFAC ); + pSBFAC = NULL; + RemoveFactory( pUNOFAC ); + pUNOFAC = NULL; + +#ifdef DBG_UTIL + // SbiData braucht am Programm-Ende nicht abgeraeumt werden, + // aber wir wollen keine MLK's beim Purify + // Wo sollte es sonst geschehen??? + SbiGlobals** pp = (SbiGlobals**) ::GetAppData( SHL_SBC ); + SbiGlobals* p = *pp; + if( p ) + { + delete p; + *pp = 0; + } +#endif + } +} + +// operator new() wird hier versenkt, damit jeder eine Instanz +// anlegen kann, ohne neu zu bilden. + +void* StarBASIC::operator new( size_t n ) +{ + if( n < sizeof( StarBASIC ) ) + { +// DBG_ASSERT( FALSE, "Warnung: inkompatibler BASIC-Stand!" ); + n = sizeof( StarBASIC ); + } + return ::operator new( n ); +} + +void StarBASIC::operator delete( void* p ) +{ + ::operator delete( p ); +} + +/************************************************************************** +* +* Erzeugen/Verwalten von Modulen +* +**************************************************************************/ + +SbModule* StarBASIC::MakeModule( const String& rName, const String& rSrc ) +{ + SbModule* p = new SbModule( rName ); + p->SetSource( rSrc ); + p->SetParent( this ); + pModules->Insert( p, pModules->Count() ); + SetModified( TRUE ); + return p; +} + +void StarBASIC::Insert( SbxVariable* pVar ) +{ + if( pVar->IsA( TYPE(SbModule) ) ) + { + pModules->Insert( pVar, pModules->Count() ); + pVar->SetParent( this ); + StartListening( pVar->GetBroadcaster(), TRUE ); + } + else + { + BOOL bWasModified = IsModified(); + SbxObject::Insert( pVar ); + if( !bWasModified && pVar->IsSet( SBX_DONTSTORE ) ) + SetModified( FALSE ); + } +} + +void StarBASIC::Remove( SbxVariable* pVar ) +{ + if( pVar->IsA( TYPE(SbModule) ) ) + { + pModules->Remove( pVar ); + pVar->SetParent( 0 ); + EndListening( pVar->GetBroadcaster() ); + } + else + SbxObject::Remove( pVar ); +} + +BOOL StarBASIC::Compile( SbModule* pMod ) +{ + return pMod ? pMod->Compile() : FALSE; +} + +BOOL StarBASIC::Disassemble( SbModule* pMod, String& rText ) +{ + rText.Erase(); + if( pMod ) + pMod->Disassemble( rText ); + return BOOL( rText.Len() != 0 ); +} + +void StarBASIC::Clear() +{ + while( pModules->Count() ) + pModules->Remove( pModules->Count() - 1 ); +} + +SbModule* StarBASIC::FindModule( const String& rName ) +{ + for( USHORT i = 0; i < pModules->Count(); i++ ) + { + SbModule* p = (SbModule*) pModules->Get( i ); + if( p->GetName().EqualsIgnoreCaseAscii( rName ) ) + return p; + } + return NULL; +} + +// Init-Code aller Module ausfuehren (auch in inserteten Bibliotheken) +void StarBASIC::InitAllModules( void ) +{ + // Eigene Module initialisieren + for ( USHORT nMod = 0; nMod < pModules->Count(); nMod++ ) + { + SbModule* pModule = (SbModule*)pModules->Get( nMod ); + if( !pModule->IsCompiled() ) + pModule->Compile(); + pModule->RunInit(); + } + // Alle Objekte ueberpruefen, ob es sich um ein Basic handelt + // Wenn ja, auch dort initialisieren + for ( USHORT nObj = 0; nObj < pObjs->Count(); nObj++ ) + { + SbxVariable* pVar = pObjs->Get( nObj ); + StarBASIC* pBasic = PTR_CAST(StarBASIC,pVar); + if( pBasic ) + pBasic->InitAllModules(); + } +} + +// #43011 Fuer das TestTool, um globale Variablen loeschen zu koennen +void StarBASIC::ClearGlobalVars( void ) +{ + SbxArrayRef xProps( GetProperties() ); + USHORT nPropCount = xProps->Count(); + for ( USHORT nProp = 0 ; nProp < nPropCount ; ++nProp ) + { + SbxBase* pVar = xProps->Get( nProp ); + pVar->Clear(); + } + SetModified( TRUE ); +} + + +// Diese Implementation sucht erst innerhalb der Runtime-Library, dann +// nach einem Element innerhalb eines Moduls. Dieses Element kann eine +// Public-Variable oder ein Entrypoint sein. Wenn nicht gefunden, wird, +// falls nach einer Methode gesucht wird und ein Modul mit dem angege- +// benen Namen gefunden wurde, der Entrypoint "Main" gesucht. Wenn das +// auch nicht klappt, laeuft die traditionelle Suche ueber Objekte an. + +SbxVariable* StarBASIC::Find( const String& rName, SbxClassType t ) +{ + SbxVariable* pRes = NULL; + SbModule* pNamed = NULL; + // "Extended" search in Runtime Lib + // aber nur, wenn SbiRuntime nicht das Flag gesetzt hat + if( !bNoRtl ) + { + if( t == SbxCLASS_DONTCARE || t == SbxCLASS_OBJECT ) + { + if( rName.EqualsIgnoreCaseAscii( RTLNAME ) ) + pRes = pRtl; + } + if( !pRes ) + pRes = ((SbiStdObject*) (SbxObject*) pRtl)->Find( rName, t ); + if( pRes ) + pRes->SetFlag( SBX_EXTFOUND ); + } + // Module durchsuchen + if( !pRes ) + for( USHORT i = 0; i < pModules->Count(); i++ ) + { + SbModule* p = (SbModule*) pModules->Get( i ); + if( p->IsVisible() ) + { + // Modul merken fuer Main()-Aufruf + // oder stimmt etwa der Name ueberein?!? + if( p->GetName().EqualsIgnoreCaseAscii( rName ) ) + { + if( t == SbxCLASS_OBJECT || t == SbxCLASS_DONTCARE ) + { + pRes = p; break; + } + pNamed = p; + } + // Sonst testen, ob das Element vorhanden ist + // GBLSEARCH-Flag rausnehmen (wg. Rekursion) + USHORT nGblFlag = p->GetFlags() & SBX_GBLSEARCH; + p->ResetFlag( SBX_GBLSEARCH ); + pRes = p->Find( rName, t ); + p->SetFlag( nGblFlag ); + if( pRes ) + break; + } + } + if( !pRes && pNamed && ( t == SbxCLASS_METHOD || t == SbxCLASS_DONTCARE ) ) + pRes = pNamed->Find( String( RTL_CONSTASCII_USTRINGPARAM("Main") ), SbxCLASS_METHOD ); + if( !pRes ) + pRes = SbxObject::Find( rName, t ); + return pRes; +} + +BOOL StarBASIC::Call( const String& rName, SbxArray* pParam ) +{ + BOOL bRes = SbxObject::Call( rName, pParam ); + if( !bRes ) + { + SbxError eErr = SbxBase::GetError(); + SbxBase::ResetError(); + if( eErr != SbxERR_OK ) + RTError( (SbError)eErr, 0, 0, 0 ); + } + return bRes; +} + +// Find-Funktion ueber Name (z.B. Abfrage aus BASIC-IDE) +SbxBase* StarBASIC::FindSBXInCurrentScope( const String& rName ) +{ + if( !pINST ) + return NULL; + if( !pINST->pRun ) + return NULL; + return pINST->pRun->FindElementExtern( rName ); +} + +// Alte Schnittstelle vorerst erhalten +SbxVariable* StarBASIC::FindVarInCurrentScopy +( const String& rName, USHORT& rStatus ) +{ + rStatus = 1; // Annahme: Nichts gefunden + SbxVariable* pVar = NULL; + SbxBase* pSbx = FindSBXInCurrentScope( rName ); + if( pSbx ) + { + if( !pSbx->ISA(SbxMethod) && !pSbx->ISA(SbxObject) ) + pVar = PTR_CAST(SbxVariable,pSbx); + } + if( pVar ) + rStatus = 0; // doch gefunden + return pVar; +} + +void StarBASIC::Stop() +{ + SbiInstance* p = pINST; + while( p ) + { + p->Stop(); + p = p->pNext; + } +} + +BOOL StarBASIC::IsRunning() +{ + return BOOL( pINST != NULL ); +} + +/************************************************************************** +* +* Objekt-Factories etc. +* +**************************************************************************/ + +// Aktivierung eines Objekts. Aktive Objekte muessen nicht mehr +// von BASIC aus ueber den Namen angesprochen werden. Ist +// NULL angegeben, wird alles aktiviert. + +void StarBASIC::ActivateObject( const String* pName, BOOL bActivate ) +{ + if( pName ) + { + SbxObject* p = (SbxObject*) SbxObject::Find( *pName, SbxCLASS_OBJECT ); + if( p ) + if( bActivate ) + p->SetFlag( SBX_EXTSEARCH ); + else + p->ResetFlag( SBX_EXTSEARCH ); + } + else + { + for( USHORT i = 0; i < GetObjects()->Count(); i++ ) + { + SbxObject* p = (SbxObject*) GetObjects()->Get( i ); + if( bActivate ) + p->SetFlag( SBX_EXTSEARCH ); + else + p->ResetFlag( SBX_EXTSEARCH ); + } + } +} + +/************************************************************************** +* +* Debugging und Fehlerbehandlung +* +**************************************************************************/ + +SbMethod* StarBASIC::GetActiveMethod( USHORT nLevel ) +{ + if( pINST ) + return pINST->GetCaller( nLevel ); + else + return NULL; +} + +SbModule* StarBASIC::GetActiveModule() +{ + if( pINST && !IsCompilerError() ) + return pINST->GetActiveModule(); + else + return pCMOD; +} + +USHORT StarBASIC::BreakPoint( USHORT l, USHORT c1, USHORT c2 ) +{ + SetErrorData( 0, l, c1, c2 ); + bBreak = TRUE; + if( GetSbData()->aBreakHdl.IsSet() ) + return (USHORT) GetSbData()->aBreakHdl.Call( this ); + else + return BreakHdl(); +} + +USHORT StarBASIC::StepPoint( USHORT l, USHORT c1, USHORT c2 ) +{ + SetErrorData( 0, l, c1, c2 ); + bBreak = FALSE; + if( GetSbData()->aBreakHdl.IsSet() ) + return (USHORT) GetSbData()->aBreakHdl.Call( this ); + else + return BreakHdl(); +} + +USHORT __EXPORT StarBASIC::BreakHdl() +{ + return (USHORT) ( aBreakHdl.IsSet() + ? aBreakHdl.Call( this ) : SbDEBUG_CONTINUE ); +} + +// Abfragen fuer den Error-Handler und den Break-Handler: +USHORT StarBASIC::GetLine() { return GetSbData()->nLine; } +USHORT StarBASIC::GetCol1() { return GetSbData()->nCol1; } +USHORT StarBASIC::GetCol2() { return GetSbData()->nCol2; } + +// Spezifisch fuer den Error-Handler: +SbError StarBASIC::GetErrorCode() { return GetSbData()->nCode; } +const String& StarBASIC::GetErrorText() { return GetSbData()->aErrMsg; } +BOOL StarBASIC::IsCompilerError() { return GetSbData()->bCompiler; } +void StarBASIC::SetGlobalLanguageMode( SbLanguageMode eLanguageMode ) +{ + GetSbData()->eLanguageMode = eLanguageMode; +} +SbLanguageMode StarBASIC::GetGlobalLanguageMode() +{ + return GetSbData()->eLanguageMode; +} +// Lokale Einstellung +SbLanguageMode StarBASIC::GetLanguageMode() +{ + // Globale Einstellung nehmen? + if( eLanguageMode == SB_LANG_GLOBAL ) + return GetSbData()->eLanguageMode; + else + return eLanguageMode; +} + +// AB: 29.3.96 +// Das Mapping zwischen alten und neuen Fehlercodes erfolgt, indem die Tabelle +// SFX_VB_ErrorTab[] durchsucht wird. Dies ist zwar nicht besonders performant, +// verbraucht aber viel weniger Speicher als entsprechende switch-Bloecke. +// Die Umrechnung von Fehlercodes muss nicht schnell sein, daher auch keine +// binaere Suche bei VB-Error -> SFX-Error. + +// Neue Fehler-Codes auf alte, Sbx-Kompatible zurueckmappen +USHORT StarBASIC::GetVBErrorCode( SbError nError ) +{ + USHORT nRet = 0; + + // Suchschleife + const SFX_VB_ErrorItem* pErrItem; + USHORT nIndex = 0; + do + { + pErrItem = SFX_VB_ErrorTab + nIndex; + if( pErrItem->nErrorSFX == nError ) + { + nRet = pErrItem->nErrorVB; + break; + } + nIndex++; + } + while( pErrItem->nErrorVB != 0xFFFF ); // bis End-Marke + return nRet; +} + +SbError StarBASIC::GetSfxFromVBError( USHORT nError ) +{ + SbError nRet = 0L; + + // Suchschleife + const SFX_VB_ErrorItem* pErrItem; + USHORT nIndex = 0; + do + { + pErrItem = SFX_VB_ErrorTab + nIndex; + if( pErrItem->nErrorVB == nError ) + { + nRet = pErrItem->nErrorSFX; + break; + } + else if( pErrItem->nErrorVB > nError ) + break; // kann nicht mehr gefunden werden + + nIndex++; + } + while( pErrItem->nErrorVB != 0xFFFF ); // bis End-Marke + return nRet; +} + +// Error- / Break-Daten setzen +void StarBASIC::SetErrorData +( SbError nCode, USHORT nLine, USHORT nCol1, USHORT nCol2 ) +{ + SbiGlobals& aGlobals = *GetSbData(); + aGlobals.nCode = nCode; + aGlobals.nLine = nLine; + aGlobals.nCol1 = nCol1; + aGlobals.nCol2 = nCol2; +} + +//---------------------------------------------------------------- +// Hilfsklasse zum Zugriff auf String SubResourcen einer Resource. +// Quelle: sfx2\source\doc\docfile.cxx (TLX) +struct BasicStringList_Impl : private Resource +{ + ResId aResId; + + BasicStringList_Impl( ResId& rErrIdP, USHORT nId) + : Resource( rErrIdP ),aResId(nId){} + ~BasicStringList_Impl() { FreeResource(); } + + String GetString(){ return String( aResId ); } + BOOL IsErrorTextAvailable( void ) + { return IsAvailableRes(aResId.SetRT(RSC_STRING)); } +}; +//---------------------------------------------------------------- + +// #60175 Flag, das bei Basic-Fehlern das Anziehen der SFX-Resourcen verhindert +static BOOL bStaticSuppressSfxResource = FALSE; + +void StarBASIC::StaticSuppressSfxResource( BOOL bSuppress ) +{ + bStaticSuppressSfxResource = bSuppress; +} + +void StarBASIC::MakeErrorText( SbError nId, const String& aMsg ) +{ + if( bStaticSuppressSfxResource ) + { + GetSbData()->aErrMsg = String( RTL_CONSTASCII_USTRINGPARAM("No resource: Error message not available") ); + return; + } + + USHORT nOldID = GetVBErrorCode( nId ); + + // Hilfsklasse instanzieren + BasicResId aId( RID_BASIC_START ); + BasicStringList_Impl aMyStringList( aId, USHORT(nId & ERRCODE_RES_MASK) ); + + if( aMyStringList.IsErrorTextAvailable() ) + { + // Merge Message mit Zusatztext + String aMsg1 = aMyStringList.GetString(); + // Argument-Platzhalter durch %s ersetzen + String aSrgStr( RTL_CONSTASCII_USTRINGPARAM("$(ARG1)") ); + USHORT nResult = aMsg1.Search( aSrgStr ); + + if( nResult != STRING_NOTFOUND ) + { + aMsg1.Erase( nResult, aSrgStr.Len() ); + aMsg1.Insert( aMsg, nResult ); + } + GetSbData()->aErrMsg = aMsg1; + } + else + { + String aStdMsg( RTL_CONSTASCII_USTRINGPARAM("Fehler ") ); + aStdMsg += String::CreateFromInt32( nOldID); + aStdMsg += String( RTL_CONSTASCII_USTRINGPARAM(": Kein Fehlertext verfuegbar!") ); + GetSbData()->aErrMsg = aStdMsg; + } +} + +BOOL StarBASIC::CError + ( SbError code, const String& rMsg, USHORT l, USHORT c1, USHORT c2 ) +{ + // Compiler-Fehler waehrend der Laufzeit -> Programm anhalten + if( IsRunning() ) + Stop(); + + // #45741# Falls der Wait-Cursor gesetzt ist, jetzt zuruecksetzen + if( GetSbData()->bCompWait ) + { + Application::LeaveWait(); + GetSbData()->bCompWait = FALSE; + } + + // Flag setzen, damit GlobalRunInit den Fehler mitbekommt + GetSbData()->bGlobalInitErr = TRUE; + + // Fehlertext basteln + MakeErrorText( code, rMsg ); + + // Umsetzung des Codes fuer String-Transport in SFX-Error + if( rMsg.Len() ) + code = (ULONG)*new StringErrorInfo( code, String(rMsg) ); + + SetErrorData( code, l, c1, c2 ); + GetSbData()->bCompiler = TRUE; + BOOL bRet; + if( GetSbData()->aErrHdl.IsSet() ) + bRet = (BOOL) GetSbData()->aErrHdl.Call( this ); + else + bRet = ErrorHdl(); + GetSbData()->bCompiler = FALSE; // nur TRUE fuer Error-Handler + return bRet; +} + +BOOL StarBASIC::RTError + ( SbError code, USHORT l, USHORT c1, USHORT c2 ) +{ + return RTError( code, String(), l, c1, c2 ); +} + +BOOL StarBASIC::RTError( SbError code, const String& rMsg, USHORT l, USHORT c1, USHORT c2 ) +{ + SbError c = code; + if( (c & ERRCODE_CLASS_MASK) == ERRCODE_CLASS_COMPILER ) + c = 0; + MakeErrorText( c, rMsg ); + + // Umsetzung des Codes fuer String-Transport in SFX-Error + if( rMsg.Len() ) + code = (ULONG)*new StringErrorInfo( code, String(rMsg) ); + + SetErrorData( code, l, c1, c2 ); + if( GetSbData()->aErrHdl.IsSet() ) + return (BOOL) GetSbData()->aErrHdl.Call( this ); + else + return ErrorHdl(); +} + +void StarBASIC::Error( SbError n ) +{ + Error( n, String() ); +} + +void StarBASIC::Error( SbError n, const String& rMsg ) +{ + if( pINST ) + pINST->Error( n, rMsg ); +} + +void StarBASIC::FatalError( SbError n ) +{ + if( pINST ) + pINST->FatalError( n ); +} + +SbError StarBASIC::GetErr() +{ + if( pINST ) + return pINST->GetErr(); + else + return 0; +} + +// #66536 Zusatz-Message fuer RTL-Funktion Error zugreifbar machen +String StarBASIC::GetErrorMsg() +{ + if( pINST ) + return pINST->GetErrorMsg(); + else + return String(); +} + +USHORT StarBASIC::GetErl() +{ + if( pINST ) + return pINST->GetErl(); + else + return 0; +} + +BOOL __EXPORT StarBASIC::ErrorHdl() +{ + return (BOOL) ( aErrorHdl.IsSet() + ? aErrorHdl.Call( this ) : FALSE ); +} + +Link StarBASIC::GetGlobalErrorHdl() +{ + return GetSbData()->aErrHdl; +} + +void StarBASIC::SetGlobalErrorHdl( const Link& rLink ) +{ + GetSbData()->aErrHdl = rLink; +} + + +Link StarBASIC::GetGlobalBreakHdl() +{ + return GetSbData()->aBreakHdl; +} + +void StarBASIC::SetGlobalBreakHdl( const Link& rLink ) +{ + GetSbData()->aBreakHdl = rLink; +} + +/************************************************************************** +* +* Laden und Speichern +* +**************************************************************************/ + +BOOL StarBASIC::LoadData( SvStream& r, USHORT nVer ) +{ + if( !SbxObject::LoadData( r, nVer ) ) + return FALSE; + UINT16 nMod; + pModules->Clear(); + r >> nMod; + for( USHORT i = 0; i < nMod; i++ ) + { + SbModule* pMod = (SbModule*) SbxBase::Load( r ); + if( !pMod ) + return FALSE; + else if( pMod->ISA(SbJScriptModule) ) + { + // Ref zuweisen, damit pMod deleted wird + SbModuleRef xRef = pMod; + } + else + { + pMod->SetParent( this ); + pModules->Put( pMod, i ); + } + } + // HACK fuer SFX-Mist! + SbxVariable* p = Find( String( RTL_CONSTASCII_USTRINGPARAM("FALSE") ), SbxCLASS_PROPERTY ); + if( p ) + Remove( p ); + p = Find( String( RTL_CONSTASCII_USTRINGPARAM("TRUE") ), SbxCLASS_PROPERTY ); + if( p ) + Remove( p ); + // Ende des Hacks! + // Suche ueber StarBASIC ist immer global + DBG_ASSERT( IsSet( SBX_GBLSEARCH ), "Basic ohne GBLSEARCH geladen" ); + SetFlag( SBX_GBLSEARCH ); + return TRUE; +} + +BOOL StarBASIC::StoreData( SvStream& r ) const +{ + if( !SbxObject::StoreData( r ) ) + return FALSE; + r << (UINT16) pModules->Count(); + for( USHORT i = 0; i < pModules->Count(); i++ ) + { + SbModule* p = (SbModule*) pModules->Get( i ); + if( !p->Store( r ) ) + return FALSE; + } + return TRUE; +} + +BOOL StarBASIC::LoadOldModules( SvStream& r ) +{ + return FALSE; +} + + diff --git a/basic/source/classes/sb.src b/basic/source/classes/sb.src new file mode 100644 index 000000000000..ba78c4a83d89 --- /dev/null +++ b/basic/source/classes/sb.src @@ -0,0 +1,3747 @@ +/************************************************************************* + * + * $RCSfile: sb.src,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 16:12:10 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ +#define __RSC +#ifndef _ERRCODE_HXX //autogen +#include <tools/errcode.hxx> +#endif +#include "sb.hrc" +#include "sberrors.hxx" + +Resource RID_BASIC_START +{ + String SbERR_SYNTAX & ERRCODE_RES_MASK + { + Text = "Syntaxfehler" ; + Text [ ENGLISH ] = "Syntax error" ; + Text [ norwegian ] = "Syntax error" ; + Text [ italian ] = "Errore di sintassi" ; + Text [ portuguese_brazilian ] = "Syntax error" ; + Text [ portuguese ] = "Erro de sintaxe" ; + Text [ french ] = "Erreur de syntaxe" ; + Text [ dutch ] = "Fout in syntaxis" ; + Text [ spanish ] = "Error de sintaxis" ; + Text [ danish ] = "Syntaksfejl" ; + Text [ swedish ] = "Syntaxfel" ; + Text [ finnish ] = "Syntax error" ; + Text [ english_us ] = "Syntax error" ; + Text[ chinese_simplified ] = ""; + Text[ russian ] = " "; + Text[ polish ] = "Bd skadni"; + Text[ japanese ] = " װ"; + Text[ chinese_traditional ] = "yk~"; + Text[ arabic ] = " "; + Text[ dutch ] = "Fout in syntaxis"; + Text[ chinese_simplified ] = ""; + Text[ greek ] = " "; + Text[ korean ] = "ؽ "; + Text[ turkish ] = "Szdizim hatas"; + Text[ language_user1 ] = " "; + }; + String SbERR_NO_GOSUB & ERRCODE_RES_MASK + { + Text = "Return ohne Gosub" ; + Text [ ENGLISH ] = "Return without Gosub" ; + Text [ norwegian ] = "Return without Gosub" ; + Text [ italian ] = "Return senza Gosub" ; + Text [ portuguese_brazilian ] = "Return without Gosub" ; + Text [ portuguese ] = "Retorno sem Gosub" ; + Text [ french ] = "Return sans Gosub" ; + Text [ dutch ] = "Return zonder Gosub" ; + Text [ spanish ] = "Retorno sin Gosub" ; + Text [ danish ] = "Return uden Gosub" ; + Text [ swedish ] = "Return utan Gosub" ; + Text [ finnish ] = "Return without Gosub" ; + Text [ english_us ] = "Return without Gosub" ; + Text[ chinese_simplified ] = "Return Gosub"; + Text[ russian ] = " Gosub"; + Text[ polish ] = "Powrt bez Gosub"; + Text[ japanese ] = "Return without Gosub"; + Text[ chinese_traditional ] = "Return a Gosub"; + Text[ arabic ] = "Gosub Return"; + Text[ dutch ] = "Return zonder Gosub"; + Text[ chinese_simplified ] = "Return Gosub"; + Text[ greek ] = "Return Gosub"; + Text[ korean ] = "Gosub "; + Text[ turkish ] = "Gosub olmadan return"; + Text[ language_user1 ] = " "; + }; + String SbERR_REDO_FROM_START & ERRCODE_RES_MASK + { + Text = "Inkorrekte Eingabe, bitte wiederholen" ; + Text [ ENGLISH ] = "Incorrect data, please retry" ; + Text [ norwegian ] = "Incorrect data, please retry" ; + Text [ italian ] = "Digitazione errata, riprovare" ; + Text [ portuguese_brazilian ] = "Incorrect data, please retry" ; + Text [ portuguese ] = "Entrada incorrecta, tente novamente" ; + Text [ french ] = "Saisie incorrecte, veuillez recommencer" ; + Text [ dutch ] = "Incorrecte gegevens, herhalen a.u.b." ; + Text [ spanish ] = "Entrada incorrecta. Intntelo otra vez" ; + Text [ danish ] = "Forkert input, gentag venligst" ; + Text [ swedish ] = "Felaktig inmatning, var vnlig upprepa" ; + Text [ finnish ] = "Incorrect data, please retry" ; + Text [ english_us ] = "Incorrect entry; please retry" ; + Text[ chinese_simplified ] = "Чظ"; + Text[ russian ] = " , , "; + Text[ polish ] = "Niepoprawny wpis, prosz ponowi"; + Text[ japanese ] = "Ȃ͂łA蒼ĉ"; + Text[ chinese_traditional ] = "JLġMЭơC"; + Text[ arabic ] = " "; + Text[ dutch ] = "Incorrecte gegevens, herhalen a.u.b."; + Text[ chinese_simplified ] = "Чظ"; + Text[ greek ] = " , "; + Text[ korean ] = " ߸Ǿϴ. ٽ ֽʽÿ."; + Text[ turkish ] = "Giri yanl, ltfen yeniden girin"; + Text[ language_user1 ] = " "; + }; + String SbERR_BAD_ARGUMENT & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Ungltiger Prozeduraufruf : Ungltiger Prozeduraufruf */ + Text = "Ungltiger Prozeduraufruf" ; + Text [ ENGLISH ] = "Invalid procedure call" ; + Text [ norwegian ] = "Invalid procedure call" ; + Text [ italian ] = "Richiamo di procedura non valido" ; + Text [ portuguese_brazilian ] = "Invalid procedure call" ; + Text [ portuguese ] = "Chamada de procedimento no vlida" ; + Text [ french ] = "Appel de procdure incorrect" ; + Text [ dutch ] = "Ongeldige oproep van procedure" ; + Text [ spanish ] = "Inicio del proceso no vlido" ; + Text [ danish ] = "Ugyldigt procedurekald" ; + Text [ swedish ] = "Ogiltigt proceduranrop" ; + Text [ finnish ] = "Invalid procedure call" ; + Text [ english_us ] = "Invalid procedure call" ; + Text[ chinese_simplified ] = "Чĵù"; + Text[ russian ] = " "; + Text[ polish ] = "Nieprawidowa procedura wywoania"; + Text[ japanese ] = "ۼެ̌Ăяo"; + Text[ chinese_traditional ] = "եιL{L"; + Text[ arabic ] = " "; + Text[ dutch ] = "Ongeldige oproep van procedure"; + Text[ chinese_simplified ] = "Чĵù"; + Text[ greek ] = " "; + Text[ korean ] = "߸ ν ȣ"; + Text[ turkish ] = "Geersiz yordam ars"; + Text[ language_user1 ] = " "; + }; + String SbERR_MATH_OVERFLOW & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? berlauf : berlauf */ + Text = "berlauf" ; + Text [ ENGLISH ] = "Overflow" ; + Text [ norwegian ] = "Overflow" ; + Text [ italian ] = "Overflow" ; + Text [ portuguese_brazilian ] = "Overflow" ; + Text [ portuguese ] = "Transbordo" ; + Text [ french ] = "Dbordement" ; + Text [ dutch ] = "Overflow" ; + Text [ spanish ] = "Desbordamiento" ; + Text [ danish ] = "Overlb" ; + Text [ swedish ] = "Spill" ; + Text [ finnish ] = "Overflow" ; + Text [ english_us ] = "Overflow" ; + Text[ chinese_simplified ] = "ֵ"; + Text[ russian ] = ""; + Text[ polish ] = "Przepenienie"; + Text[ japanese ] = "ް۰"; + Text[ chinese_traditional ] = ""; + Text[ arabic ] = ""; + Text[ dutch ] = "Overflow"; + Text[ chinese_simplified ] = "ֵ"; + Text[ greek ] = ""; + Text[ korean ] = "ħ"; + Text[ turkish ] = "Tama"; + Text[ language_user1 ] = " "; + }; + String SbERR_NO_MEMORY & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Nicht gengend Speicher : Nicht gengend Speicher */ + Text = "Nicht gengend Speicher" ; + Text [ ENGLISH ] = "Out of memory" ; + Text [ norwegian ] = "Out of memory" ; + Text [ italian ] = "Memoria insufficiente" ; + Text [ portuguese_brazilian ] = "Out of memory" ; + Text [ portuguese ] = "Memria insuficiente" ; + Text [ french ] = "Mmoire insuffisante" ; + Text [ dutch ] = "Niet voldoende geheugen" ; + Text [ spanish ] = "No hay memoria suficiente" ; + Text [ danish ] = "Ikke tilstrkkelig hukommelse" ; + Text [ swedish ] = "Inte tillrckligt med minne" ; + Text [ finnish ] = "Out of memory" ; + Text [ english_us ] = "Not enough memory" ; + Text[ chinese_simplified ] = "ڴ治"; + Text[ russian ] = " "; + Text[ polish ] = "Za mao pamici"; + Text[ japanese ] = "\\ȋeʂ܂"; + Text[ chinese_traditional ] = "O餣"; + Text[ arabic ] = " "; + Text[ dutch ] = "Niet voldoende geheugen"; + Text[ chinese_simplified ] = "ڴ治"; + Text[ greek ] = " "; + Text[ korean ] = " "; + Text[ turkish ] = "Bellek yeterli deil"; + Text[ language_user1 ] = " "; + }; + String SbERR_ALREADY_DIM & ERRCODE_RES_MASK + { + Text = "Array bereits dimensioniert" ; + Text [ ENGLISH ] = "Array already dimensioned" ; + Text [ norwegian ] = "Array already dimensioned" ; + Text [ italian ] = "Array gi dimensionato" ; + Text [ portuguese_brazilian ] = "Array already dimensioned" ; + Text [ portuguese ] = "A matriz j foi dimensionada" ; + Text [ french ] = "Array dj dimensionn" ; + Text [ dutch ] = "Array reeds gedimensioneerd" ; + Text [ spanish ] = "Array ya dimensionado" ; + Text [ danish ] = "Array er allerede dimensioneret" ; + Text [ swedish ] = "Array redan dimensionerad" ; + Text [ finnish ] = "Array already dimensioned" ; + Text [ english_us ] = "Array already dimensioned" ; + Text[ chinese_simplified ] = "Ѿ߶"; + Text[ russian ] = " "; + Text[ polish ] = "Macierz ju zostaa zwymiarowana"; + Text[ japanese ] = "z͂łɎĂ܂"; + Text[ chinese_traditional ] = "CwgQwث"; + Text[ arabic ] = " "; + Text[ dutch ] = "Array reeds gedimensioneerd"; + Text[ chinese_simplified ] = "Ѿ߶"; + Text[ greek ] = " "; + Text[ korean ] = "迭 ũⰡ ̹ "; + Text[ turkish ] = "Dizi boyutlandrlm durumda"; + Text[ language_user1 ] = " "; + }; + String SbERR_OUT_OF_RANGE & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Index auerhalb des definierten Bereichs : Index auerhalb des definierten Bereichs */ + Text = "Index auerhalb des definierten Bereichs" ; + Text [ ENGLISH ] = "Subscript out of range" ; + Text [ norwegian ] = "Subscript out of range" ; + Text [ italian ] = "Indice al di fuori dell'area definita" ; + Text [ portuguese_brazilian ] = "Subscript out of range" ; + Text [ portuguese ] = "ndice fora da rea definida" ; + Text [ french ] = "Index en dehors de la plage dfinie" ; + Text [ dutch ] = "Index buiten gedefinieerd bereik" ; + Text [ spanish ] = "El ndice se encuentra fuera del rea definida" ; + Text [ danish ] = "Indeks udenfor det definerede omrde" ; + Text [ swedish ] = "Index utanfr definierat omrde" ; + Text [ finnish ] = "Subscript out of range" ; + Text [ english_us ] = "Index out of defined range" ; + Text[ chinese_simplified ] = "巶Χ֮"; + Text[ russian ] = " "; + Text[ polish ] = "Indeks poza zdefiniowanym obszarem"; + Text[ japanese ] = "`ꂽ͈͊O̲ޯ"; + Text[ chinese_traditional ] = "wqd~"; + Text[ arabic ] = " "; + Text[ dutch ] = "Index buiten gedefinieerd bereik"; + Text[ chinese_simplified ] = "巶Χ֮"; + Text[ greek ] = " ."; + Text[ korean ] = "ǵ ε"; + Text[ turkish ] = "Dizin tanmlanan araln dnda"; + Text[ language_user1 ] = " "; + }; + String SbERR_DUPLICATE_DEF & ERRCODE_RES_MASK + { + Text = "Doppelt vorhandene Definition" ; + Text [ ENGLISH ] = "Duplicate definition" ; + Text [ norwegian ] = "Duplicate definition" ; + Text [ italian ] = "Definizione doppia" ; + Text [ portuguese_brazilian ] = "Duplicate definition" ; + Text [ portuguese ] = "Definio dupla" ; + Text [ french ] = "Dfinition faisant double emploi" ; + Text [ dutch ] = "Definitie dubbel voorhanden" ; + Text [ spanish ] = "La definicin existe dos veces" ; + Text [ danish ] = "Dobbelt foreliggende definition" ; + Text [ swedish ] = "Dubbelt frekommande definition" ; + Text [ finnish ] = "Duplicate definition" ; + Text [ english_us ] = "Duplicate definition" ; + Text[ chinese_simplified ] = "˫ض"; + Text[ russian ] = " "; + Text[ polish ] = "Zduplikowana definicja"; + Text[ japanese ] = "d`"; + Text[ chinese_traditional ] = "sbwq"; + Text[ arabic ] = " "; + Text[ dutch ] = "Definitie dubbel voorhanden"; + Text[ chinese_simplified ] = "˫ض"; + Text[ greek ] = " "; + Text[ korean ] = "ߺ "; + Text[ turkish ] = "ift tanmlama"; + Text[ language_user1 ] = " "; + }; + String SbERR_ZERODIV & ERRCODE_RES_MASK + { + Text = "Division durch Null" ; + Text [ ENGLISH ] = "Division by zero" ; + Text [ norwegian ] = "Division by zero" ; + Text [ italian ] = "Diviso zero" ; + Text [ portuguese_brazilian ] = "Division by zero" ; + Text [ portuguese ] = "Dividir por zero" ; + Text [ french ] = "Division par zro" ; + Text [ dutch ] = "Deling door nul" ; + Text [ spanish ] = "Divisin por cero" ; + Text [ danish ] = "Divider med nul" ; + Text [ swedish ] = "Division med noll" ; + Text [ finnish ] = "Division by zero" ; + Text [ english_us ] = "Division by zero" ; + Text[ chinese_simplified ] = ""; + Text[ russian ] = " "; + Text[ polish ] = "Dzielenie przez zero"; + Text[ japanese ] = "ۂɂ鏜Z"; + Text[ chinese_traditional ] = "_s"; + Text[ arabic ] = " "; + Text[ dutch ] = "Deling door nul"; + Text[ chinese_simplified ] = ""; + Text[ greek ] = " "; + Text[ korean ] = "0 "; + Text[ turkish ] = "Sfra blme"; + Text[ language_user1 ] = " "; + }; + String SbERR_VAR_UNDEFINED & ERRCODE_RES_MASK + { + Text = "Variable nicht definiert" ; + Text [ ENGLISH ] = "Variable not defined" ; + Text [ norwegian ] = "Variable not defined" ; + Text [ italian ] = "Variabile non definita" ; + Text [ portuguese_brazilian ] = "Variable not defined" ; + Text [ portuguese ] = "Varivel no definida" ; + Text [ french ] = "Variable indfinie" ; + Text [ dutch ] = "Variabele niet gedefinieerd" ; + Text [ spanish ] = "Variable no definida" ; + Text [ danish ] = "Variablen er ikke defineret" ; + Text [ swedish ] = "Variabel inte definierad" ; + Text [ finnish ] = "Variable not defined" ; + Text [ english_us ] = "Variable not defined" ; + Text[ chinese_simplified ] = "ûж"; + Text[ russian ] = " "; + Text[ polish ] = "Zmienna nie zdefiniowana"; + Text[ japanese ] = "ϐ͒`Ă܂"; + Text[ chinese_traditional ] = "Swqܼ"; + Text[ arabic ] = " "; + Text[ dutch ] = "Variabele niet gedefinieerd"; + Text[ chinese_simplified ] = "ûж"; + Text[ greek ] = " "; + Text[ korean ] = " "; + Text[ turkish ] = "Deiken tanmlanmad"; + Text[ language_user1 ] = " "; + }; + String SbERR_CONVERSION & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Datentypen unvertrglich : Datentypen unvertrglich */ + Text = "Datentypen unvertrglich" ; + Text [ ENGLISH ] = "Data type mismatch" ; + Text [ norwegian ] = "Data type mismatch" ; + Text [ italian ] = "Tipi di dati non compatibili" ; + Text [ portuguese_brazilian ] = "Data type mismatch" ; + Text [ portuguese ] = "Tipos de dados incompatveis" ; + Text [ french ] = "Types de donnes incompatibles" ; + Text [ dutch ] = "Gegevenstypen passen niet bij elkaar" ; + Text [ spanish ] = "Los tipos de datos no coinciden" ; + Text [ danish ] = "Datatyper er uforenelige" ; + Text [ swedish ] = "Datatyper passar inte ihop" ; + Text [ finnish ] = "Data type mismatch" ; + Text [ english_us ] = "Data type mismatch" ; + Text[ chinese_simplified ] = "Ͳƥ"; + Text[ russian ] = " "; + Text[ polish ] = "Niezgodne typy danych"; + Text[ japanese ] = "ް̎ނ͋܂"; + Text[ chinese_traditional ] = "ǰt"; + Text[ arabic ] = " "; + Text[ dutch ] = "Gegevenstypen passen niet bij elkaar"; + Text[ chinese_simplified ] = "Ͳƥ"; + Text[ greek ] = " "; + Text[ korean ] = " Ÿ ʽϴ."; + Text[ turkish ] = "Veri tipleri arasnda uyumazlk"; + Text[ language_user1 ] = " "; + }; + String SbERR_BAD_PARAMETER & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Ungltiger Parameter : Ungltiger Parameter */ + Text = "Ungltiger Parameter" ; + Text [ ENGLISH ] = "Bad parameter" ; + Text [ norwegian ] = "Bad parameter" ; + Text [ italian ] = "Parametro non valido" ; + Text [ portuguese_brazilian ] = "Bad parameter" ; + Text [ portuguese ] = "Parmetro no vlido" ; + Text [ french ] = "Paramtre incorrect" ; + Text [ dutch ] = "Ongeldige parameter" ; + Text [ spanish ] = "Parmetro no vlido" ; + Text [ danish ] = "Ugyldig parameter" ; + Text [ swedish ] = "Ogiltig parameter" ; + Text [ finnish ] = "Bad parameter" ; + Text [ english_us ] = "Invalid parameter" ; + Text[ chinese_simplified ] = "Ч"; + Text[ russian ] = " "; + Text[ polish ] = "Nieprawidowy parametr"; + Text[ japanese ] = "Ұ"; + Text[ chinese_traditional ] = "UܼƵL"; + Text[ arabic ] = " "; + Text[ dutch ] = "Ongeldige parameter"; + Text[ chinese_simplified ] = "Ч"; + Text[ greek ] = " "; + Text[ korean ] = "߸ ۶"; + Text[ turkish ] = "Geersiz parametre"; + Text[ language_user1 ] = " "; + }; + String SbERR_USER_ABORT & ERRCODE_RES_MASK + { + Text = "Der Ablauf wurde durch den Benutzer unterbrochen" ; + Text [ ENGLISH ] = "User interrupt occurred" ; + Text [ norwegian ] = "User interrupt occurred" ; + Text [ italian ] = "Processo interrotto dall'utente" ; + Text [ portuguese_brazilian ] = "User interrupt occurred" ; + Text [ portuguese ] = "O processo foi interrompido pelo utilizador" ; + Text [ french ] = "Processus interrompu par l'utilisateur" ; + Text [ dutch ] = "Onderbreking door gebruiker" ; + Text [ spanish ] = "El proceso ha sido interrumpido por el usuario" ; + Text [ danish ] = "Processen blev afbrudt af brugeren" ; + Text [ swedish ] = "Anvndaren avslutade frloppet" ; + Text [ finnish ] = "User interrupt occurred" ; + Text [ english_us ] = "Process interrupted by user" ; + Text[ chinese_simplified ] = "ʹж̡"; + Text[ russian ] = " "; + Text[ polish ] = "Proces zosta przerwany przez uytkownika"; + Text[ japanese ] = "հްɂĒf܂"; + Text[ chinese_traditional ] = "ϥΪ̤_BL{C"; + Text[ arabic ] = " "; + Text[ dutch ] = "Onderbreking door gebruiker"; + Text[ chinese_simplified ] = "ʹж̡"; + Text[ greek ] = " "; + Text[ korean ] = "ڿ μ ͷƮ"; + Text[ turkish ] = "Sre kullanc tarafndan kesildi"; + Text[ language_user1 ] = " "; + }; + String SbERR_BAD_RESUME & ERRCODE_RES_MASK + { + Text = "Resume ohne Fehler" ; + Text [ ENGLISH ] = "Resume without error" ; + Text [ norwegian ] = "Resume without error" ; + Text [ italian ] = "Resume senza errori" ; + Text [ portuguese_brazilian ] = "Resume without error" ; + Text [ portuguese ] = "Resumo sem erros" ; + Text [ french ] = "Rsum sans erreur" ; + Text [ dutch ] = "Resume zonder fouten" ; + Text [ spanish ] = "Resumen sin error" ; + Text [ danish ] = "Resume uden fejl" ; + Text [ swedish ] = "Resume utan fel" ; + Text [ finnish ] = "Resume without error" ; + Text [ english_us ] = "Resume without error" ; + Text[ chinese_simplified ] = "Resume error"; + Text[ russian ] = " "; + Text[ polish ] = "Resume bez bdu"; + Text[ japanese ] = "Resume without error"; + Text[ chinese_traditional ] = "Resume a error"; + Text[ arabic ] = " "; + Text[ dutch ] = "Resume zonder fouten"; + Text[ chinese_simplified ] = "Resume error"; + Text[ greek ] = " "; + Text[ korean ] = " ٽ "; + Text[ turkish ] = "Resume ohne Fehler"; + Text[ language_user1 ] = " "; + }; + String SbERR_STACK_OVERFLOW & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Nicht gengend Stapelspeicher : Nicht gengend Stapelspeicher */ + Text = "Nicht gengend Stapelspeicher" ; + Text [ ENGLISH ] = "Out of stack space" ; + Text [ norwegian ] = "Out of stack space" ; + Text [ italian ] = "Memoria stack non sufficiente" ; + Text [ portuguese_brazilian ] = "Out of stack space" ; + Text [ portuguese ] = "Memria tampo insuficiente" ; + Text [ french ] = "Mmoire tampon insuffisante" ; + Text [ dutch ] = "Niet genoeg stack" ; + Text [ spanish ] = "Desbordamiento de pila" ; + Text [ danish ] = "Ikke nok stakhukommelse" ; + Text [ swedish ] = "Inte tillrckligt med stapelminne" ; + Text [ finnish ] = "Out of stack space" ; + Text [ english_us ] = "Not enough stack memory" ; + Text[ chinese_simplified ] = "ջʽڴ治"; + Text[ russian ] = " "; + Text[ polish ] = "Za mao pamici stosowej"; + Text[ japanese ] = "s\\Ƚ"; + Text[ chinese_traditional ] = "|O餣"; + Text[ arabic ] = " "; + Text[ dutch ] = "Niet genoeg stack"; + Text[ chinese_simplified ] = "ջʽڴ治"; + Text[ greek ] = " "; + Text[ korean ] = "stack "; + Text[ turkish ] = "Yn bellek yeterli deil"; + Text[ language_user1 ] = " "; + }; + String SbERR_PROC_UNDEFINED & ERRCODE_RES_MASK + { + Text = "Sub- oder Function-Prozedur nicht definiert" ; + Text [ ENGLISH ] = "Sub or Function not defined" ; + Text [ norwegian ] = "Sub or Function not defined" ; + Text [ italian ] = "Procedura sub o di funzione non definita" ; + Text [ portuguese_brazilian ] = "Sub or Function not defined" ; + Text [ portuguese ] = "Procedimento de funo ou subordinado no definidos" ; + Text [ french ] = "La sous-procdure ou procdure fonctionnelle n'est pas dfinie" ; + Text [ dutch ] = "Sub- of functieprocedure niet gedefinieerd" ; + Text [ spanish ] = "Procedimiento de funcin o subordinado no definido" ; + Text [ danish ] = "Under- eller funktionsproceduren er ikke defineret" ; + Text [ swedish ] = "Sub- eller funktionsproceduren inte definierad" ; + Text [ finnish ] = "Sub or Function not defined" ; + Text [ english_us ] = "Sub-procedure or function procedure not defined" ; + Text[ chinese_simplified ] = "ûжֹ̻"; + Text[ russian ] = " "; + Text[ polish ] = "Nie zdefiniowano procedury podrzdnej lub funkcyjnej"; + Text[ japanese ] = "Sub܂Functionۼެ͒`Ă܂"; + Text[ chinese_traditional ] = "SwqL{ΨƹL{"; + Text[ arabic ] = " "; + Text[ dutch ] = "Sub- of functieprocedure niet gedefinieerd"; + Text[ chinese_simplified ] = "ûжֹ̻"; + Text[ greek ] = " (Sub) (Function)"; + Text[ korean ] = " ν Ǵ ν"; + Text[ turkish ] = "Alt yordam ya da ilev yordam tanmlanmad"; + Text[ language_user1 ] = " "; + }; + String SbERR_BAD_DLL_LOAD & ERRCODE_RES_MASK + { + Text = "Fehler beim Laden einer DLL-Datei" ; + Text [ ENGLISH ] = "Error in loading DLL" ; + Text [ norwegian ] = "Error in loading DLL" ; + Text [ italian ] = "Errore nel caricamento del file DLL" ; + Text [ portuguese_brazilian ] = "Error in loading DLL" ; + Text [ portuguese ] = "Erro ao carregar um ficheiro DLL" ; + Text [ french ] = "Erreur lors du chargement d'un fichier DLL" ; + Text [ dutch ] = "Fout bei laden van DLL-bestand" ; + Text [ spanish ] = "Error al cargar un archivo DDL" ; + Text [ danish ] = "Fejl ved indlsning af DLL-fil" ; + Text [ swedish ] = "Fel vid laddning av DLL-fil" ; + Text [ finnish ] = "Error in loading DLL" ; + Text [ english_us ] = "Error loading DLL file" ; + Text[ chinese_simplified ] = "װ DLL ļʱ"; + Text[ russian ] = " DLL"; + Text[ polish ] = "Bd przy adowaniu pliku DLL"; + Text[ japanese ] = "DLĻق̓ǂݍ݂̍ۂ̴װ"; + Text[ chinese_traditional ] = "˸DLLɮɵoͿ~"; + Text[ arabic ] = "DLL "; + Text[ dutch ] = "Fout bei laden van DLL-bestand"; + Text[ chinese_simplified ] = "װ DLL ļʱ"; + Text[ greek ] = " DLL"; + Text[ korean ] = "DLL ε "; + Text[ turkish ] = "DLL dosyasn ykleme srasnda hata"; + Text[ language_user1 ] = " "; + }; + String SbERR_BAD_DLL_CALL & ERRCODE_RES_MASK + { + Text = "Falsche DLL-Aufrufkonvention" ; + Text [ ENGLISH ] = "Bad DLL calling convention" ; + Text [ norwegian ] = "Bad DLL calling convention" ; + Text [ italian ] = "Convenzione di richiamo DLL errata" ; + Text [ portuguese_brazilian ] = "Bad DLL calling convention" ; + Text [ portuguese ] = "Conveno da chamada DLL incorrecta" ; + Text [ french ] = "Convention d'appel DLL incorrecte" ; + Text [ dutch ] = "Foutieve DLL-oproepconventie" ; + Text [ spanish ] = "Convencin de la llamada DLL incorrecta" ; + Text [ danish ] = "Forkert DLL-kaldkonvention" ; + Text [ swedish ] = "Fel DLL-anropningskonvention" ; + Text [ finnish ] = "Bad DLL calling convention" ; + Text [ english_us ] = "Wrong DLL call convention" ; + Text[ chinese_simplified ] = " DLLԼ"; + Text[ russian ] = " DLL"; + Text[ polish ] = "Nieprawidowa konwencja wywoania DLL"; + Text[ japanese ] = "ȂDLLĂяo"; + Text[ chinese_traditional ] = "~DLLեάw"; + Text[ arabic ] = " DLL "; + Text[ dutch ] = "Foutieve DLL-oproepconventie"; + Text[ chinese_simplified ] = " DLLԼ"; + Text[ greek ] = " DLL"; + Text[ korean ] = "Ʋ DLL ȣ "; + Text[ turkish ] = "Yanl DLL ar kural"; + Text[ language_user1 ] = " "; + }; + String SbERR_INTERNAL_ERROR & ERRCODE_RES_MASK + { + Text = "Interner Fehler $(ARG1)" ; + Text [ ENGLISH ] = "Internal error $(ARG1)" ; + Text [ norwegian ] = "Internal error $(ARG1)" ; + Text [ italian ] = "Errore interno $(ARG1)" ; + Text [ portuguese_brazilian ] = "Internal error $(ARG1)" ; + Text [ portuguese ] = "Erro interno $(ARG1)" ; + Text [ french ] = "Erreur interne $(ARG1)" ; + Text [ dutch ] = "Interne fout $(ARG1)" ; + Text [ spanish ] = "Error interno $(ARG1)" ; + Text [ danish ] = "Intern fejl $(ARG1)" ; + Text [ swedish ] = "Internt fel $(ARG1)" ; + Text [ finnish ] = "Internal error $(ARG1)" ; + Text [ english_us ] = "Internal error $(ARG1)" ; + Text[ chinese_simplified ] = "ڲ $(ARG1)"; + Text[ russian ] = " $(ARG1)"; + Text[ polish ] = "Bd wewntrzny $(ARG1)"; + Text[ japanese ] = "װ$(ARG1)"; + Text[ chinese_traditional ] = "~$(ARG1)"; + Text[ arabic ] = "$(ARG1) "; + Text[ dutch ] = "Interne fout $(ARG1)"; + Text[ chinese_simplified ] = "ڲ $(ARG1)"; + Text[ greek ] = " $(ARG1)"; + Text[ korean ] = " $(ARG1)"; + Text[ turkish ] = "Dahili hata $(ARG1)"; + Text[ language_user1 ] = " "; + }; + String SbERR_BAD_CHANNEL & ERRCODE_RES_MASK + { + Text = "Dateiname oder -nummer falsch" ; + Text [ ENGLISH ] = "Bad file name or number" ; + Text [ norwegian ] = "Bad file name or number" ; + Text [ italian ] = "Nome file o numero file errato" ; + Text [ portuguese_brazilian ] = "Bad file name or number" ; + Text [ portuguese ] = "Nome ou nmero do ficheiro incorrecto" ; + Text [ french ] = "Nom ou numro de fichier incorrect" ; + Text [ dutch ] = "Foutieve bestandsnaam of -nummer" ; + Text [ spanish ] = "Nombre o nmero incorrecto de archivo" ; + Text [ danish ] = "Forkert filnavn eller -nummer" ; + Text [ swedish ] = "Ogiltigt filnamn eller filnummer" ; + Text [ finnish ] = "Bad file name or number" ; + Text [ english_us ] = "Invalid file name or file number" ; + Text[ chinese_simplified ] = "Чļ"; + Text[ russian ] = " "; + Text[ polish ] = "Nazwa pliku lub numer nieprawidowe"; + Text[ japanese ] = "̧ٖ܂̧ٔԍ܂"; + Text[ chinese_traditional ] = "LĪɮשθX"; + Text[ arabic ] = " "; + Text[ dutch ] = "Foutieve bestandsnaam of -nummer"; + Text[ chinese_simplified ] = "Чļ"; + Text[ greek ] = " "; + Text[ korean ] = "߸ ̸ Ǵ ȣ"; + Text[ turkish ] = "Dosya ad ya da numaras yanl"; + Text[ language_user1 ] = " "; + }; + String SbERR_FILE_NOT_FOUND & ERRCODE_RES_MASK + { + Text = "Datei nicht gefunden" ; + Text [ ENGLISH ] = "File not found" ; + Text [ norwegian ] = "File not found" ; + Text [ italian ] = "File non trovato" ; + Text [ portuguese_brazilian ] = "File not found" ; + Text [ portuguese ] = "O ficheiro no foi encontrado" ; + Text [ french ] = "Fichier introuvable" ; + Text [ dutch ] = "Bestand niet gevonden" ; + Text [ spanish ] = "No se encuentra el archivo" ; + Text [ danish ] = "Filen blev ikke fundet" ; + Text [ swedish ] = "Filen hittades inte" ; + Text [ finnish ] = "File not found" ; + Text [ english_us ] = "File not found" ; + Text[ chinese_simplified ] = "ûҵļ"; + Text[ russian ] = " "; + Text[ polish ] = "pliku nie znaleziono"; + Text[ japanese ] = "̧ق͌܂"; + Text[ chinese_traditional ] = "Sɮ"; + Text[ arabic ] = " "; + Text[ dutch ] = "Bestand niet gevonden"; + Text[ chinese_simplified ] = "ûҵļ"; + Text[ greek ] = " "; + Text[ korean ] = " ϴ."; + Text[ turkish ] = "Dosya bulunamad"; + Text[ language_user1 ] = " "; + }; + String SbERR_BAD_FILE_MODE & ERRCODE_RES_MASK + { + Text = "Dateimodus falsch" ; + Text [ ENGLISH ] = "Bad file mode" ; + Text [ norwegian ] = "Bad file mode" ; + Text [ italian ] = "Modo file errato" ; + Text [ portuguese_brazilian ] = "Bad file mode" ; + Text [ portuguese ] = "Modo do ficheiro incorrecto" ; + Text [ french ] = "Mode de fichier incorrect" ; + Text [ dutch ] = "Foutieve bestandsmodus" ; + Text [ spanish ] = "Modo de archivo incorrecto" ; + Text [ danish ] = "Forkert filtilstand" ; + Text [ swedish ] = "Fel fillge" ; + Text [ finnish ] = "Bad file mode" ; + Text [ english_us ] = "Incorrect file mode" ; + Text[ chinese_simplified ] = "ļģʽ"; + Text[ russian ] = " "; + Text[ polish ] = "Niepoprawny tryb pliku"; + Text[ japanese ] = "̧ Ӱނ܂@@@@@@@@@@@@@"; + Text[ chinese_traditional ] = "~ɮҦ"; + Text[ arabic ] = " "; + Text[ dutch ] = "Foutieve bestandsmodus"; + Text[ chinese_simplified ] = "ļģʽ"; + Text[ greek ] = " "; + Text[ korean ] = "߸ "; + Text[ turkish ] = "Dosya kipi yanl"; + Text[ language_user1 ] = " "; + }; + String SbERR_FILE_ALREADY_OPEN & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Datei bereits geffnet : Datei bereits geffnet */ + Text = "Datei bereits geffnet" ; + Text [ ENGLISH ] = "File already open" ; + Text [ norwegian ] = "File already open" ; + Text [ italian ] = "File gi aperto" ; + Text [ portuguese_brazilian ] = "File already open" ; + Text [ portuguese ] = "O ficheiro j est aberto" ; + Text [ french ] = "Fichier dj ouvert" ; + Text [ dutch ] = "Bestand reeds geopend" ; + Text [ spanish ] = "El archivo ya est abierto" ; + Text [ danish ] = "Filen er allerede ben" ; + Text [ swedish ] = "Filen r redan ppen" ; + Text [ finnish ] = "File already open" ; + Text [ english_us ] = "File already open" ; + Text[ chinese_simplified ] = "Ѿļ"; + Text[ russian ] = " "; + Text[ polish ] = "Plik ju otworzony"; + Text[ japanese ] = "̧ق͂łɊJĂ܂"; + Text[ chinese_traditional ] = "wg}ɮ"; + Text[ arabic ] = " "; + Text[ dutch ] = "Bestand reeds geopend"; + Text[ chinese_simplified ] = "Ѿļ"; + Text[ greek ] = " "; + Text[ korean ] = " ̹ ֽϴ."; + Text[ turkish ] = "Dosya ak durumda"; + Text[ language_user1 ] = " "; + }; + String SbERR_IO_ERROR & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Gerte-E/A-Fehler : Gerte-E/A-Fehler */ + Text = "Gerte-E/A-Fehler" ; + Text [ ENGLISH ] = "Device I/O error" ; + Text [ norwegian ] = "Device I/O error" ; + Text [ italian ] = "Errore di I/O" ; + Text [ portuguese_brazilian ] = "Device I/O error" ; + Text [ portuguese ] = "Erro perifrico I/O" ; + Text [ french ] = "Erreur de priphrique E/S" ; + Text [ dutch ] = "Fout in-/uitvoerapparatuur" ; + Text [ spanish ] = "Error de dispositivo E/S" ; + Text [ danish ] = "I/O-fejl i enhed" ; + Text [ swedish ] = "Apparat I/O-fel" ; + Text [ finnish ] = "Device I/O error" ; + Text [ english_us ] = "Device I/O error" ; + Text[ chinese_simplified ] = "豸I/O"; + Text[ russian ] = " /"; + Text[ polish ] = "Bd We/Wy urzdzenia"; + Text[ japanese ] = "ި I/O װ"; + Text[ chinese_traditional ] = "]ƵoI/O~"; + Text[ arabic ] = " "; + Text[ dutch ] = "Fout in-/uitvoerapparatuur"; + Text[ chinese_simplified ] = "豸I/O"; + Text[ greek ] = " /"; + Text[ korean ] = "̽ I/O "; + Text[ turkish ] = "Cihaz I/O hatas"; + Text[ language_user1 ] = " "; + }; + String SbERR_FILE_EXISTS & ERRCODE_RES_MASK + { + Text = "Datei bereits vorhanden" ; + Text [ ENGLISH ] = "File already exists" ; + Text [ norwegian ] = "File already exists" ; + Text [ italian ] = "File gi esistente" ; + Text [ portuguese_brazilian ] = "File already exists" ; + Text [ portuguese ] = "O ficheiro j existe" ; + Text [ french ] = "Fichier existant dj" ; + Text [ dutch ] = "Bestand bestaat reeds" ; + Text [ spanish ] = "El archivo ya existe" ; + Text [ danish ] = "Filen eksisterer allerede" ; + Text [ swedish ] = "Filen existerar redan" ; + Text [ finnish ] = "File already exists" ; + Text [ english_us ] = "File already exists" ; + Text[ chinese_simplified ] = "ļѾ"; + Text[ russian ] = " "; + Text[ polish ] = "Plik ju istnieje"; + Text[ japanese ] = "̧ق͂łɂ܂"; + Text[ chinese_traditional ] = "ɮפwgsb"; + Text[ arabic ] = " "; + Text[ dutch ] = "Bestand bestaat reeds"; + Text[ chinese_simplified ] = "ļѾ"; + Text[ greek ] = " "; + Text[ korean ] = " ̹ մϴ."; + Text[ turkish ] = "Dosya mevcut durumda"; + Text[ language_user1 ] = " "; + }; + String SbERR_BAD_RECORD_LENGTH & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Falsche Datensatzlnge : Falsche Datensatzlnge */ + Text = "Falsche Datensatzlnge" ; + Text [ ENGLISH ] = "Bad record length" ; + Text [ norwegian ] = "Bad record length" ; + Text [ italian ] = "Lunghezza record di dati errata" ; + Text [ portuguese_brazilian ] = "Bad record length" ; + Text [ portuguese ] = "Comprimento do registo de dados incorrecto" ; + Text [ french ] = "Longueur d'enregistrement incorrecte" ; + Text [ dutch ] = "Foutieve record-lengte" ; + Text [ spanish ] = "Longitud errnea del registro de datos" ; + Text [ danish ] = "Forkert datapostlngde" ; + Text [ swedish ] = "Felaktig datapostlngd" ; + Text [ finnish ] = "Bad record length" ; + Text [ english_us ] = "Incorrect record length" ; + Text[ chinese_simplified ] = "Ŀȴ"; + Text[ russian ] = " "; + Text[ polish ] = "Niepoprawna dugo rekordw"; + Text[ japanese ] = "Ȃںނ̒"; + Text[ chinese_traditional ] = "~ƶت"; + Text[ arabic ] = " "; + Text[ dutch ] = "Foutieve record-lengte"; + Text[ chinese_simplified ] = "Ŀȴ"; + Text[ greek ] = " "; + Text[ korean ] = "߸ ڵ "; + Text[ turkish ] = "Yanl veri kmesi uzunluu"; + Text[ language_user1 ] = " "; + }; + String SbERR_DISK_FULL & ERRCODE_RES_MASK + { + Text = "Diskette/Festplatte voll" ; + Text [ ENGLISH ] = "Disk full" ; + Text [ norwegian ] = "Disk full" ; + Text [ italian ] = "Dischetto o disco rigido pieno" ; + Text [ portuguese_brazilian ] = "Disk full" ; + Text [ portuguese ] = "Disquete ou disco rgido cheios" ; + Text [ french ] = "Disquette/disque dur plein(e)" ; + Text [ dutch ] = "Diskette/harde schijf vol" ; + Text [ spanish ] = "Disquete o disco duro lleno" ; + Text [ danish ] = "Disketten/harddisken er fuld" ; + Text [ swedish ] = "Diskett eller hrddisk full" ; + Text [ finnish ] = "Disk full" ; + Text [ english_us ] = "Disk or hard drive full" ; + Text[ chinese_simplified ] = "̻Ӳ"; + Text[ russian ] = " "; + Text[ polish ] = "Dyskietka/Dysk twardy s pene"; + Text[ japanese ] = "ۯ߰ި܂ʰިς"; + Text[ chinese_traditional ] = "nϽLκϽLw"; + Text[ arabic ] = " / "; + Text[ dutch ] = "Diskette/harde schijf vol"; + Text[ chinese_simplified ] = "̻Ӳ"; + Text[ greek ] = "/ "; + Text[ korean ] = "/ ϵ ũ á"; + Text[ turkish ] = "Disket/disk dolu"; + Text[ language_user1 ] = " "; + }; + String SbERR_READ_PAST_EOF & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Lesen ber das Ende der Datei hinaus : Lesen ber das Ende der Datei hinaus */ + Text = "Lesen ber das Ende der Datei hinaus" ; + Text [ ENGLISH ] = "Input past end of file" ; + Text [ norwegian ] = "Input past end of file" ; + Text [ italian ] = "Lettura oltre la fine del file" ; + Text [ portuguese_brazilian ] = "Input past end of file" ; + Text [ portuguese ] = "Ler para alm do fim de ficheiro" ; + Text [ french ] = "Lecture au-del de la fin du fichier" ; + Text [ dutch ] = "Lezen overschrijdt bestandseinde" ; + Text [ spanish ] = "Seguir leyendo tras el final del archivo" ; + Text [ danish ] = "Ls ud over filens slutning" ; + Text [ swedish ] = "Lsning utver filens slut" ; + Text [ finnish ] = "Input past end of file" ; + Text [ english_us ] = "Reading exceeds EOF" ; + Text[ chinese_simplified ] = "ȡļΧ"; + Text[ russian ] = " "; + Text[ polish ] = "Odczyt przekracza koniec pliku"; + Text[ japanese ] = "EOF ނzǂݎ"; + Text[ chinese_traditional ] = "ŪWXɮd"; + Text[ arabic ] = " "; + Text[ dutch ] = "Lezen overschrijdt bestandseinde"; + Text[ chinese_simplified ] = "ȡļΧ"; + Text[ greek ] = " "; + Text[ korean ] = " ʰϿ "; + Text[ turkish ] = "Okuma dosya sonunu ayor"; + Text[ language_user1 ] = " "; + }; + String SbERR_BAD_RECORD_NUMBER & ERRCODE_RES_MASK + { + Text = "Datensatznummer falsch" ; + Text [ ENGLISH ] = "Bad record number" ; + Text [ norwegian ] = "Bad record number" ; + Text [ italian ] = "Numero record errato" ; + Text [ portuguese_brazilian ] = "Bad record number" ; + Text [ portuguese ] = "Nmero do registo de dados incorrecto" ; + Text [ french ] = "Numro d'enregistrement incorrect" ; + Text [ dutch ] = "Foutief record-nummer" ; + Text [ spanish ] = "Nmero errneo de registro de datos" ; + Text [ danish ] = "Forkert datapostnummer" ; + Text [ swedish ] = "Felaktigt datapostnummer" ; + Text [ finnish ] = "Bad record number" ; + Text [ english_us ] = "Incorrect record number" ; + Text[ chinese_simplified ] = "Ŀ"; + Text[ russian ] = " "; + Text[ polish ] = "Niepoprawna dugo rekordw"; + Text[ japanese ] = "ںނ̔ԍ܂"; + Text[ chinese_traditional ] = "ƶظX~"; + Text[ arabic ] = " "; + Text[ dutch ] = "Foutief record-nummer"; + Text[ chinese_simplified ] = "Ŀ"; + Text[ greek ] = " "; + Text[ korean ] = "߸ ڵ ȣ"; + Text[ turkish ] = "Veri kmesi numaras yanl"; + Text[ language_user1 ] = " "; + }; + String SbERR_TOO_MANY_FILES & ERRCODE_RES_MASK + { + Text = "Zu viele Dateien" ; + Text [ ENGLISH ] = "Too many files" ; + Text [ norwegian ] = "Too many files" ; + Text [ italian ] = "Troppi file" ; + Text [ portuguese_brazilian ] = "Too many files" ; + Text [ portuguese ] = "Demasiados ficheiros" ; + Text [ french ] = "Trop de fichiers" ; + Text [ dutch ] = "Teveel bestanden" ; + Text [ spanish ] = "Demasiados archivos" ; + Text [ danish ] = "Der er for mange filer" ; + Text [ swedish ] = "Fr mnga filer" ; + Text [ finnish ] = "Too many files" ; + Text [ english_us ] = "Too many files" ; + Text[ chinese_simplified ] = "̫ļ"; + Text[ russian ] = " "; + Text[ polish ] = "Za duo plikw"; + Text[ japanese ] = "̧ق܂"; + Text[ chinese_traditional ] = "Ӧhɮ"; + Text[ arabic ] = " "; + Text[ dutch ] = "Teveel bestanden"; + Text[ chinese_simplified ] = "̫ļ"; + Text[ greek ] = " "; + Text[ korean ] = "ϵ ʹ "; + Text[ turkish ] = "Dosya says fazla"; + Text[ language_user1 ] = " "; + }; + String SbERR_NO_DEVICE & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Gert nicht verfgbar : Gert nicht verfgbar */ + Text = "Gert nicht verfgbar" ; + Text [ ENGLISH ] = "Device not available" ; + Text [ norwegian ] = "Device not available" ; + Text [ italian ] = "Apparecchio non disponibile" ; + Text [ portuguese_brazilian ] = "Device not available" ; + Text [ portuguese ] = "Aparelho no disponvel" ; + Text [ french ] = "Priphrique indisponible" ; + Text [ dutch ] = "Apparatuur niet beschikbaar" ; + Text [ spanish ] = "El dispositivo no est disponible" ; + Text [ danish ] = "Enheden er ikke tilgngelig" ; + Text [ swedish ] = "Enhet ej tillgnglig" ; + Text [ finnish ] = "Device not available" ; + Text [ english_us ] = "Device not available" ; + Text[ chinese_simplified ] = "豸"; + Text[ russian ] = " "; + Text[ polish ] = "Urzdzenie niedostpne"; + Text[ japanese ] = "ި͂܂"; + Text[ chinese_traditional ] = "]Ƥsb"; + Text[ arabic ] = " "; + Text[ dutch ] = "Apparatuur niet beschikbaar"; + Text[ chinese_simplified ] = "豸"; + Text[ greek ] = " "; + Text[ korean ] = "̽ Ұ"; + Text[ turkish ] = "Cihaz kullanlabilir durumda deil"; + Text[ language_user1 ] = " "; + }; + String SbERR_ACCESS_DENIED & ERRCODE_RES_MASK + { + Text = "Zugriff verweigert" ; + Text [ ENGLISH ] = "Permission denied" ; + Text [ norwegian ] = "Permission denied" ; + Text [ italian ] = "Accesso negato" ; + Text [ portuguese_brazilian ] = "Permission denied" ; + Text [ portuguese ] = "Acesso recusado" ; + Text [ french ] = "Accs refus" ; + Text [ dutch ] = "Toegang geweigerd" ; + Text [ spanish ] = "Acceso denegado" ; + Text [ danish ] = "Adgang ngtet" ; + Text [ swedish ] = "tkomst nekad" ; + Text [ finnish ] = "Permission denied" ; + Text [ english_us ] = "Access denied" ; + Text[ chinese_simplified ] = "ܾȡ"; + Text[ russian ] = " "; + Text[ polish ] = "Dostp zabroniony"; + Text[ japanese ] = "ł܂"; + Text[ chinese_traditional ] = "ڵŪ"; + Text[ arabic ] = " "; + Text[ dutch ] = "Toegang geweigerd"; + Text[ chinese_simplified ] = "ܾȡ"; + Text[ greek ] = " "; + Text[ korean ] = " ź"; + Text[ turkish ] = "Eriim engellendi"; + Text[ language_user1 ] = " "; + }; + String SbERR_NOT_READY & ERRCODE_RES_MASK + { + Text = "Diskette nicht bereit" ; + Text [ ENGLISH ] = "Disk not ready" ; + Text [ norwegian ] = "Disk not ready" ; + Text [ italian ] = "Dischetto non pronto" ; + Text [ portuguese_brazilian ] = "Disk not ready" ; + Text [ portuguese ] = "A disquete no est pronta" ; + Text [ french ] = "La disquette n'est pas prte" ; + Text [ dutch ] = "Diskette niet bereid" ; + Text [ spanish ] = "El disquete no est preparado" ; + Text [ danish ] = "Disketten er ikke klar" ; + Text [ swedish ] = "Disketten r inte beredd" ; + Text [ finnish ] = "Disk not ready" ; + Text [ english_us ] = "Disk not ready" ; + Text[ chinese_simplified ] = "̻û"; + Text[ russian ] = " "; + Text[ polish ] = "Dyskietka nie gotowa"; + Text[ japanese ] = "ި͗pӂłĂ܂"; + Text[ chinese_traditional ] = "nϽL٨SdzƦn"; + Text[ arabic ] = " "; + Text[ dutch ] = "Diskette niet bereid"; + Text[ chinese_simplified ] = "̻û"; + Text[ greek ] = " "; + Text[ korean ] = "ũ غ ʾҽϴ."; + Text[ turkish ] = "Disket hazr deil"; + Text[ language_user1 ] = " "; + }; + String SbERR_NOT_IMPLEMENTED & ERRCODE_RES_MASK + { + Text = "Nicht implementiert" ; + Text [ ENGLISH ] = "Feature not implemented" ; + Text [ norwegian ] = "Feature not implemented" ; + Text [ italian ] = "Non implementato" ; + Text [ portuguese_brazilian ] = "Feature not implemented" ; + Text [ portuguese ] = "No implementado" ; + Text [ french ] = "Non implant" ; + Text [ dutch ] = "Niet gemplementeerd" ; + Text [ spanish ] = "No implementado" ; + Text [ danish ] = "Ikke implementeret" ; + Text [ swedish ] = "Ej implementerad" ; + Text [ finnish ] = "Feature not implemented" ; + Text [ english_us ] = "Not implemented" ; + Text[ chinese_simplified ] = "δʵʩ"; + Text[ russian ] = " "; + Text[ polish ] = "Nie zaimplementowane"; + Text[ japanese ] = "Ă܂"; + Text[ chinese_traditional ] = "|I"; + Text[ arabic ] = " "; + Text[ dutch ] = "Niet gemplementeerd"; + Text[ chinese_simplified ] = "δʵʩ"; + Text[ greek ] = " "; + Text[ korean ] = " ʾ"; + Text[ turkish ] = "Uygulanmad"; + Text[ language_user1 ] = " "; + }; + String SbERR_DIFFERENT_DRIVE & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Umbenennen auf verschiedenen Laufwerken nicht mglich : Umbenennen auf verschiedenen Laufwerken nicht mglich */ + Text = "Umbenennen auf verschiedenen Laufwerken nicht mglich" ; + Text [ ENGLISH ] = "No rename with different drive" ; + Text [ norwegian ] = "No rename with different drive" ; + Text [ italian ] = "Impossibile rinominare su drive diversi" ; + Text [ portuguese_brazilian ] = "No rename with different drive" ; + Text [ portuguese ] = "Impossvel mudar nome em vrias unidades" ; + Text [ french ] = "Impossible de renommer sur des lecteurs diffrents" ; + Text [ dutch ] = "Namen wijzigen op verschillende stations niet mogelijk" ; + Text [ spanish ] = "No se puede cambiar nombre en distintas unidades" ; + Text [ danish ] = "Omdbning p forskellige drev er ikke mulig" ; + Text [ swedish ] = "Omjligt att byta namn p olika enheter" ; + Text [ finnish ] = "No rename with different drive" ; + Text [ english_us ] = "Renaming on different drives impossible" ; + Text[ chinese_simplified ] = "ɲͬ"; + Text[ russian ] = " "; + Text[ polish ] = "Zmiana nazwy na rnych dyskach jest niemoliwa"; + Text[ japanese ] = "ײނ̖O̕ύX͂ł܂"; + Text[ chinese_traditional ] = "LksRWPϽL"; + Text[ arabic ] = " "; + Text[ dutch ] = "Namen wijzigen op verschillende stations niet mogelijk"; + Text[ chinese_simplified ] = "ɲͬ"; + Text[ greek ] = " "; + Text[ korean ] = "ٸ ̹ ο ̸ Ұմϴ."; + Text[ turkish ] = "Farkl srclerde yeniden adlandrma yaplamaz"; + Text[ language_user1 ] = " "; + }; + String SbERR_ACCESS_ERROR & ERRCODE_RES_MASK + { + Text = "Pfad/Datei-Zugriffsfehler" ; + Text [ ENGLISH ] = "Path/File access error" ; + Text [ norwegian ] = "Path/File access error" ; + Text [ italian ] = "Errore di accesso al percorso/file" ; + Text [ portuguese_brazilian ] = "Path/File access error" ; + Text [ portuguese ] = "Atalho/Erro de acesso ao ficheiro" ; + Text [ french ] = "Erreur d'accs au chemin/fichier" ; + Text [ dutch ] = "Fout bij toegang op pad/bestand" ; + Text [ spanish ] = "Error de acceso a la ruta o al archivo" ; + Text [ danish ] = "Sti/fil adgangsfejl" ; + Text [ swedish ] = "Skvg/fil tkomstfel" ; + Text [ finnish ] = "Path/File access error" ; + Text [ english_us ] = "Path/File access error" ; + Text[ chinese_simplified ] = "ȡ·/ļʱ"; + Text[ russian ] = " "; + Text[ polish ] = "Bd dostpu do cieki/pliku"; + Text[ japanese ] = "߽܂̧قւ̱װ"; + Text[ chinese_traditional ] = "Ū|/ɮɵoͿ~"; + Text[ arabic ] = " /"; + Text[ dutch ] = "Fout bij toegang op pad/bestand"; + Text[ chinese_simplified ] = "ȡ·/ļʱ"; + Text[ greek ] = " /"; + Text[ korean ] = "н/ "; + Text[ turkish ] = "Veri yolu/eriim hatas"; + Text[ language_user1 ] = " "; + }; + String SbERR_PATH_NOT_FOUND & ERRCODE_RES_MASK + { + Text = "Pfad nicht gefunden" ; + Text [ ENGLISH ] = "Path not found" ; + Text [ norwegian ] = "Path not found" ; + Text [ italian ] = "Percorso non trovato" ; + Text [ portuguese_brazilian ] = "Path not found" ; + Text [ portuguese ] = "Atalho no encontrado" ; + Text [ french ] = "Chemin introuvable" ; + Text [ dutch ] = "Pad niet gevonden" ; + Text [ spanish ] = "No se encontr la ruta" ; + Text [ danish ] = "Stien blev ikke fundet" ; + Text [ swedish ] = "Skvgen hittades inte" ; + Text [ finnish ] = "Path not found" ; + Text [ english_us ] = "Path not found" ; + Text[ chinese_simplified ] = "ûҵ·"; + Text[ russian ] = " "; + Text[ polish ] = "cieka nie zostaa znaleziona"; + Text[ japanese ] = "߽܂"; + Text[ chinese_traditional ] = "S|"; + Text[ arabic ] = " "; + Text[ dutch ] = "Pad niet gevonden"; + Text[ chinese_simplified ] = "ûҵ·"; + Text[ greek ] = " "; + Text[ korean ] = "н ߰ߵ ʾҽϴ."; + Text[ turkish ] = "Veri yolu bulunamad"; + Text[ language_user1 ] = " "; + }; + String SbERR_NO_OBJECT & ERRCODE_RES_MASK + { + Text = "Objektvariable nicht belegt" ; + Text [ ENGLISH ] = "Object variable not set" ; + Text [ norwegian ] = "Object variable not set" ; + Text [ italian ] = "Variabile dell'oggetto non impostata" ; + Text [ portuguese_brazilian ] = "Object variable not set" ; + Text [ portuguese ] = "Varivel do objecto no configurada" ; + Text [ french ] = "Variable d'objet non configure" ; + Text [ dutch ] = "Objectvariabele niet gereserveerd" ; + Text [ spanish ] = "La variable del objeto no se ha establecido" ; + Text [ danish ] = "Objektvariablen er ikke optaget" ; + Text [ swedish ] = "Objektvariablerna inte bestmda" ; + Text [ finnish ] = "Object variable not set" ; + Text [ english_us ] = "Object variable not set" ; + Text[ chinese_simplified ] = "û趨"; + Text[ russian ] = " "; + Text[ polish ] = "Nie osadzono zmiennej obiektu"; + Text[ japanese ] = "ުĕϐ͐ݒłĂ܂"; + Text[ chinese_traditional ] = "٨S]wܶq"; + Text[ arabic ] = " "; + Text[ dutch ] = "Objectvariabele niet gereserveerd"; + Text[ chinese_simplified ] = "û趨"; + Text[ greek ] = " "; + Text[ korean ] = "ü ʾҽϴ."; + Text[ turkish ] = "Nesne deikeni belirlenmedi"; + Text[ language_user1 ] = " "; + }; + String SbERR_BAD_PATTERN & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Zeichenfolgenmuster unzulssig : Zeichenfolgenmuster unzulssig */ + Text = "Zeichenfolgenmuster unzulssig" ; + Text [ ENGLISH ] = "Invalid pattern string" ; + Text [ norwegian ] = "Invalid pattern string" ; + Text [ italian ] = "Sequenza di caratteri non valida" ; + Text [ portuguese_brazilian ] = "Invalid pattern string" ; + Text [ portuguese ] = "Sequncia de caracteres no vlida" ; + Text [ french ] = "chantillon de chane de caractres incorrect" ; + Text [ dutch ] = "Ontoelaatbare tekenreeks" ; + Text [ spanish ] = "Secuencia de caracteres no vlida" ; + Text [ danish ] = "Ugyldigt strengmnster" ; + Text [ swedish ] = "Ogiltig mnsterstring" ; + Text [ finnish ] = "Invalid pattern string" ; + Text [ english_us ] = "Invalid string pattern" ; + Text[ chinese_simplified ] = "Чִģʽ"; + Text[ russian ] = " "; + Text[ polish ] = "Nieprawidowy cig wzoru"; + Text[ japanese ] = "݂͋܂"; + Text[ chinese_traditional ] = "LĪrҦ"; + Text[ arabic ] = " "; + Text[ dutch ] = "Ontoelaatbare tekenreeks"; + Text[ chinese_simplified ] = "Чִģʽ"; + Text[ greek ] = " "; + Text[ korean ] = "ȿ ڿ "; + Text[ turkish ] = "Dizilim rnei geerli deil"; + Text[ language_user1 ] = " "; + }; + String SBERR_IS_NULL & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Verwendung von Null unzulssig : Verwendung von Null unzulssig */ + Text = "Verwendung von Null unzulssig" ; + Text [ ENGLISH ] = "Invalid use of Null" ; + Text [ norwegian ] = "Invalid use of Null" ; + Text [ italian ] = "Uso dello zero non ammesso" ; + Text [ portuguese_brazilian ] = "Invalid use of Null" ; + Text [ portuguese ] = "Interdito o uso do zero" ; + Text [ french ] = "Utilisation du zro interdite" ; + Text [ dutch ] = "Ongeldig gebruik van nul" ; + Text [ spanish ] = "No se admite el uso del cero" ; + Text [ danish ] = "Brug af nul er ikke tilladt" ; + Text [ swedish ] = "Anvndning av noll r ej tilltet" ; + Text [ finnish ] = "Invalid use of Null" ; + Text [ english_us ] = "Use of zero not permitted" ; + Text[ chinese_simplified ] = "ʹֵ"; + Text[ russian ] = " "; + Text[ polish ] = "Uywanie zera niedopuszczalne"; + Text[ japanese ] = "ۂ̎gp͋܂"; + Text[ chinese_traditional ] = "\\եιs"; + Text[ arabic ] = " "; + Text[ dutch ] = "Ongeldig gebruik van nul"; + Text[ chinese_simplified ] = "ʹֵ"; + Text[ greek ] = " "; + Text[ korean ] = "0 ʾҽϴ."; + Text[ turkish ] = "Sfr kullanm geerli deil"; + Text[ language_user1 ] = " "; + }; + String SbERR_DDE_ERROR & ERRCODE_RES_MASK + { + Text = "DDE-Fehler" ; + Text [ ENGLISH ] = "DDE Error" ; + Text [ norwegian ] = "DDE Error" ; + Text [ italian ] = "Errore DDE" ; + Text [ portuguese_brazilian ] = "DDE Error" ; + Text [ portuguese ] = "Erro DDE" ; + Text [ french ] = "Erreur DDE" ; + Text [ dutch ] = "DDE-fout" ; + Text [ spanish ] = "Error de DDE" ; + Text [ danish ] = "DDE-fejl" ; + Text [ swedish ] = "DDE-fel" ; + Text [ finnish ] = "DDE Error" ; + Text [ english_us ] = "DDE Error" ; + Text[ chinese_simplified ] = "DDE "; + Text[ russian ] = " DDE"; + Text[ polish ] = "Bd DDE"; + Text[ japanese ] = "DDE̴װ"; + Text[ chinese_traditional ] = "DDE ~"; + Text[ arabic ] = "DDE "; + Text[ dutch ] = "DDE-fout"; + Text[ chinese_simplified ] = "DDE "; + Text[ greek ] = " DDE"; + Text[ korean ] = "DDE "; + Text[ turkish ] = "DDE hatas"; + Text[ language_user1 ] = " "; + }; + String SbERR_DDE_WAITINGACK & ERRCODE_RES_MASK + { + Text = "Warten auf Antwort in DDE-Verbindung" ; + Text [ ENGLISH ] = "Awaiting response in DDE-Conversation" ; + Text [ norwegian ] = "Awaiting response in DDE-Conversation" ; + Text [ italian ] = "In attesa di risposta nel collegamento DDE" ; + Text [ portuguese_brazilian ] = "Awaiting response in DDE-Conversation" ; + Text [ portuguese ] = "Esperando resposta ligao DDE" ; + Text [ french ] = "Attente de rponse dans une connexion DDE" ; + Text [ dutch ] = "Wachten op antwoord in DDE-verbinding" ; + Text [ spanish ] = "Esperando respuesta en la conexin DDE" ; + Text [ danish ] = "Venter p svar til DDE-forbindelsen" ; + Text [ swedish ] = "Vntar p svar till DDE-frbindelsen" ; + Text [ finnish ] = "Awaiting response in DDE-Conversation" ; + Text [ english_us ] = "Awaiting response to DDE connection" ; + Text[ chinese_simplified ] = " DDE ʱȺ"; + Text[ russian ] = " DDE"; + Text[ polish ] = "Czekanie na odpowied w poczeniu DDE"; + Text[ japanese ] = "DDEڑɂ鉞҂"; + Text[ chinese_traditional ] = "b DDE sɵԵ_"; + Text[ arabic ] = "DDE "; + Text[ dutch ] = "Wachten op antwoord in DDE-verbinding"; + Text[ chinese_simplified ] = " DDE ʱȺ"; + Text[ greek ] = " DDE"; + Text[ korean ] = "DDE "; + Text[ turkish ] = "DDE balantsnda yant bekleniyor"; + Text[ language_user1 ] = " "; + }; + String SbERR_DDE_OUTOFCHANNELS & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Keine freien DDE-Kanle : Keine freien DDE-Kanle */ + Text = "Keine freien DDE-Kanle" ; + Text [ ENGLISH ] = "No more DDE channels" ; + Text [ norwegian ] = "No more DDE channels" ; + Text [ italian ] = "Nessun canale DDE libero" ; + Text [ portuguese_brazilian ] = "No more DDE channels" ; + Text [ portuguese ] = "Nenhum canal DDE livre" ; + Text [ french ] = "Aucun canal DDE libre" ; + Text [ dutch ] = "Geen vrije DDE-kanalen" ; + Text [ spanish ] = "No hay canales DDE libres" ; + Text [ danish ] = "Ingen bne DDE-kanaler" ; + Text [ swedish ] = "Inga fria DDE-kanaler" ; + Text [ finnish ] = "No more DDE channels" ; + Text [ english_us ] = "No DDE channels available" ; + Text[ chinese_simplified ] = "ûпõ DDE-ŵ"; + Text[ russian ] = " DDE "; + Text[ polish ] = "Nie ma wolnych kanaw DDE"; + Text[ japanese ] = "gDDEق܂"; + Text[ chinese_traditional ] = "S} DDE-HD"; + Text[ arabic ] = "DDE "; + Text[ dutch ] = "Geen vrije DDE-kanalen"; + Text[ chinese_simplified ] = "ûпõ DDE-ŵ"; + Text[ greek ] = " DDE"; + Text[ korean ] = "DDE ä Ұ"; + Text[ turkish ] = "Bo DDE kanallar yok"; + Text[ language_user1 ] = " "; + }; + String SbERR_DDE_NO_RESPONSE & ERRCODE_RES_MASK + { + Text = "Keine Applikation anwortet auf DDE-Verbindungswunsch" ; + Text [ ENGLISH ] = "No application responded to DDE initiate" ; + Text [ norwegian ] = "No application responded to DDE initiate" ; + Text [ italian ] = "Nessuna applicazione risponde al tentativo di collegamento DDE" ; + Text [ portuguese_brazilian ] = "No application responded to DDE initiate" ; + Text [ portuguese ] = "O estabelecimento da ligao DDE no obteve resposta de nenhuma aplicao" ; + Text [ french ] = "Aucune application ne ragit la tentative de connexion DDE" ; + Text [ dutch ] = "Geen enkele applicatie antwoordt op DDE-verbindingsoproep" ; + Text [ spanish ] = "No responde ninguna aplicacin a la conexin DDE deseada" ; + Text [ danish ] = "Ingen applikation svarer p DDE-forbindelsesinitialiseringen" ; + Text [ swedish ] = "Ingen applikation svarar p DDE-frbindelsinitieringen" ; + Text [ finnish ] = "No application responded to DDE initiate" ; + Text [ english_us ] = "No application responded to DDE connect initiation" ; + Text[ chinese_simplified ] = "ûκӦóӦ DDE "; + Text[ russian ] = " DDE"; + Text[ polish ] = "Za duo aplikacji odpowiada na inicjacj poczenia DDE"; + Text[ japanese ] = "DDEڑ]ɉع݂܂"; + Text[ chinese_traditional ] = "Sε{^ DDE sШD"; + Text[ arabic ] = " DDE"; + Text[ dutch ] = "Geen enkele applicatie antwoordt op DDE-verbindingsoproep"; + Text[ chinese_simplified ] = "ûκӦóӦ DDE "; + Text[ greek ] = " DDE"; + Text[ korean ] = "DDE ʱȭ ϴ α "; + Text[ turkish ] = "Hibir uygulama DDE balant talebine yant vermiyor"; + Text[ language_user1 ] = " "; + }; + String SbERR_DDE_MULT_RESPONSES & ERRCODE_RES_MASK + { + Text = "Zu viele Applikationen antworten auf DDE-Verbindungswunsch" ; + Text [ ENGLISH ] = "Multiple applications responded to DDE initiate" ; + Text [ norwegian ] = "Multiple applications responded to DDE initiate" ; + Text [ italian ] = "Troppe applicazioni rispondono al collegamento DDE desiderato" ; + Text [ portuguese_brazilian ] = "Multiple applications responded to DDE initiate" ; + Text [ portuguese ] = "Demasiadas aplicaes respondem tentativa de ligao DDE" ; + Text [ french ] = "Trop d'applications rpondent la tentative de connexion DDE" ; + Text [ dutch ] = "Teveel applicatiex antwoorden op de DDE-verbindingsoproep" ; + Text [ spanish ] = "Demasiadas aplicaciones responden a la conexin deseada DDE" ; + Text [ danish ] = "For mange applikationer svarer p DDE-forbindelsesinitialiseringen" ; + Text [ swedish ] = "Alltfr mnga applikationer svarar p DDE-frbindelseinitieringen" ; + Text [ finnish ] = "Multiple applications responded to DDE initiate" ; + Text [ english_us ] = "Too many applications responded to DDE connect initiation" ; + Text[ chinese_simplified ] = "̫ӦóӦ DDE "; + Text[ russian ] = " DDE"; + Text[ polish ] = "Za duo aplikacji odpowiada na inicjacj poczenia DDE"; + Text[ japanese ] = "DDEڑ]ɉع݂܂"; + Text[ chinese_traditional ] = "Ӧhε{^ DDE sШD"; + Text[ arabic ] = " DDE"; + Text[ dutch ] = "Teveel applicatiex antwoorden op de DDE-verbindingsoproep"; + Text[ chinese_simplified ] = "̫ӦóӦ DDE "; + Text[ greek ] = " DDE"; + Text[ korean ] = "DDE ʱȭ ϴ α ʹ "; + Text[ turkish ] = "DDE balant talebine ok fazla uygulama yant veriyor"; + Text[ language_user1 ] = " "; + }; + String SbERR_DDE_CHANNEL_LOCKED & ERRCODE_RES_MASK + { + Text = "DDE-Kanal gesperrt" ; + Text [ ENGLISH ] = "DDE channel locked" ; + Text [ norwegian ] = "DDE channel locked" ; + Text [ italian ] = "Canale DDE bloccato" ; + Text [ portuguese_brazilian ] = "DDE channel locked" ; + Text [ portuguese ] = "Canal DDE bloqueado" ; + Text [ french ] = "Canal DDE verrouill" ; + Text [ dutch ] = "DDE-kanaal geblokkeerd" ; + Text [ spanish ] = "Canal DDE bloqueado" ; + Text [ danish ] = "DDE-kanalen er lst" ; + Text [ swedish ] = "DDE-kanalen r sprrad" ; + Text [ finnish ] = "DDE channel locked" ; + Text [ english_us ] = "DDE channel locked" ; + Text[ chinese_simplified ] = "DDE ŵѾ"; + Text[ russian ] = " DDE "; + Text[ polish ] = "Kana DDE jest zablokowany"; + Text[ japanese ] = "DDEقۯĂ܂"; + Text[ chinese_traditional ] = "DDE HDwgQw"; + Text[ arabic ] = ".DDE "; + Text[ dutch ] = "DDE-kanaal geblokkeerd"; + Text[ chinese_simplified ] = "DDE ŵѾ"; + Text[ greek ] = " DDE "; + Text[ korean ] = "DDE ä "; + Text[ turkish ] = "DDE kanal kilitli"; + Text[ language_user1 ] = " "; + }; + String SbERR_DDE_NOTPROCESSED & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Fremdapplikation kann DDE-Operation nicht ausfhren : Fremdapplikation kann DDE-Operation nicht ausfhren */ + Text = "Fremdapplikation kann DDE-Operation nicht ausfhren" ; + Text [ ENGLISH ] = "Foreign application won't perform DDE operation" ; + Text [ norwegian ] = "Foreign application won't perform DDE operation" ; + Text [ italian ] = "L'applicazione esterna non pu eseguire l'operazione DDE" ; + Text [ portuguese_brazilian ] = "Foreign application won't perform DDE operation" ; + Text [ portuguese ] = "A aplicao externa no pode executar a operao DDE" ; + Text [ french ] = "L'application externe ne peut pas excuter l'opration DDE" ; + Text [ dutch ] = "Externe applicatie kan DDE niet uitvoeren" ; + Text [ spanish ] = "Una aplicacin externa no puede realizar la operacin DDE" ; + Text [ danish ] = "Den eksterne applikation kan ikke udfre DDE-operationen" ; + Text [ swedish ] = "Den externa applikationen kan inte utfra DDE-operationen" ; + Text [ finnish ] = "Foreign application won't perform DDE operation" ; + Text [ english_us ] = "External application cannot execute DDE operation" ; + Text[ chinese_simplified ] = "ⲿӦóִ DDE "; + Text[ russian ] = " DDE"; + Text[ polish ] = "Obca aplikacja nie moe wykona operacjiDDE"; + Text[ japanese ] = "Oع݂DDE̵ڰ݂sł܂"; + Text[ chinese_traditional ] = "~ε{ǵLk DDE B"; + Text[ arabic ] = "DDE "; + Text[ dutch ] = "Externe applicatie kan DDE niet uitvoeren"; + Text[ chinese_simplified ] = "ⲿӦóִ DDE "; + Text[ greek ] = " DDE"; + Text[ korean ] = "ܺ α DDE ۵ ų ϴ."; + Text[ turkish ] = "Harici uygulama DDE ilemini yrtemiyor"; + Text[ language_user1 ] = " "; + }; + String SbERR_DDE_TIMEOUT & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Zeitberschreitung whrend des Wartens auf DDE-Antwort : Zeitberschreitung whrend des Wartens auf DDE-Antwort */ + Text = "Zeitberschreitung whrend des Wartens auf DDE-Antwort" ; + Text [ ENGLISH ] = "Timeout while waiting for DDE response" ; + Text [ norwegian ] = "Timeout while waiting for DDE response" ; + Text [ italian ] = "Tempo d'attesa per la rispota DDE oltrepassato" ; + Text [ portuguese_brazilian ] = "Timeout while waiting for DDE response" ; + Text [ portuguese ] = "Ultrapassado tempo de espera pela resposta DDE" ; + Text [ french ] = "Timeout pendant l'attente de la rponse DDE" ; + Text [ dutch ] = "Tijdoverschrijding tijdens wachten op DDE-antwoord" ; + Text [ spanish ] = "Se ha excedido el tiempo de espera por una respuesta DDE" ; + Text [ danish ] = "Timeout mens der blev ventet p DDE-svar" ; + Text [ swedish ] = "Tiden har gtt ut vid vntandet p DDE-svar" ; + Text [ finnish ] = "Timeout while waiting for DDE response" ; + Text [ english_us ] = "Timeout while waiting for DDE response" ; + Text[ chinese_simplified ] = "Ⱥ DDE Ӧʱ"; + Text[ russian ] = " DDE"; + Text[ polish ] = "Przekroczenie limitu czasu podczas czekania na odpowied DDE"; + Text[ japanese ] = "DDẺ҂̊ԂɎԒ"; + Text[ chinese_traditional ] = " DDE ^WLɭ"; + Text[ arabic ] = "DDE "; + Text[ dutch ] = "Tijdoverschrijding tijdens wachten op DDE-antwoord"; + Text[ chinese_simplified ] = "Ⱥ DDE Ӧʱ"; + Text[ greek ] = " DDE"; + Text[ korean ] = "DDE ٸ ŸӾƿ"; + Text[ turkish ] = "DDE yantn beklemede zaman am"; + Text[ language_user1 ] = " "; + }; + String SbERR_DDE_USER_INTERRUPT & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Benutzer drckte ESCAPE whrend der DDE-Operation : Benutzer drckte ESCAPE whrend der DDE-Operation */ + Text = "Benutzer drckte ESCAPE whrend der DDE-Operation" ; + Text [ ENGLISH ] = "User pressed Escape during DDE operation" ; + Text [ norwegian ] = "User pressed Escape during DDE operation" ; + Text [ italian ] = "L'utente ha premuto ESC durante l'operazione DDE" ; + Text [ portuguese_brazilian ] = "User pressed Escape during DDE operation" ; + Text [ portuguese ] = "O utilizador premiu ESCAPE durante a operao DDE" ; + Text [ french ] = "L'utilisateur a appuy sur CHAP pendant l'opration DDE" ; + Text [ dutch ] = "Gebruiker drukte Escape tijdens uitvoering DDE" ; + Text [ spanish ] = "El usuario presion la tecla ESC durante la operacin DDE" ; + Text [ danish ] = "Brugeren trykkede p ESCAPE under DDE-operationen" ; + Text [ swedish ] = "Anvndaren tryckte p ESCAPE under DDE-operationen" ; + Text [ finnish ] = "User pressed Escape during DDE operation" ; + Text [ english_us ] = "User pressed ESCAPE during DDE operation." ; + Text[ chinese_simplified ] = "ִ DDE ʹ߰ ESCAPE "; + Text[ russian ] = " ESCAPE DDE"; + Text[ polish ] = "Uytkownik uy przycisku ESCAPE podczas operacji DDE"; + Text[ japanese ] = "DDE̵ڰ݂̍Œ հްESCAPE݂܂"; + Text[ language_user1 ] = " "; + Text[ chinese_traditional ] = "b DDE BL{ϥΪ̫F ESCAPE "; + Text[ arabic ] = " DDE"; + Text[ dutch ] = "Gebruiker drukte Escape tijdens uitvoering DDE"; + Text[ chinese_simplified ] = "ִ DDE ʹ߰ ESCAPE "; + Text[ greek ] = " ESCAPE DDE."; + Text[ korean ] = "DDE ۵̿ Escape ."; + Text[ turkish ] = "DDE ilemi srasnda ESCAPE tuuna basld"; + }; + String SbERR_DDE_BUSY & ERRCODE_RES_MASK + { + Text = "Fremdapplikation ist nicht bereit" ; + Text [ ENGLISH ] = "Destination application is busy" ; + Text [ norwegian ] = "Destination application is busy" ; + Text [ italian ] = "L'applicazione esterna non pronta" ; + Text [ portuguese_brazilian ] = "Destination application is busy" ; + Text [ portuguese ] = "A aplicao externa est ocupada" ; + Text [ french ] = "L'application externe est occupe" ; + Text [ dutch ] = "Doelapplicatie is niet bereid" ; + Text [ spanish ] = "La aplicacin externa no est lista" ; + Text [ danish ] = "Den eksterne applikation er ikke klar" ; + Text [ swedish ] = "Extern applikation upptagen" ; + Text [ finnish ] = "Destination application is busy" ; + Text [ english_us ] = "External application busy" ; + Text[ chinese_simplified ] = "ⲿӦóæµ"; + Text[ russian ] = " "; + Text[ polish ] = "Obca aplikacja nie jest gotowa"; + Text[ japanese ] = "Oع݂ިԂł"; + Text[ chinese_traditional ] = "~ε{L"; + Text[ arabic ] = " "; + Text[ dutch ] = "Doelapplicatie is niet bereid"; + Text[ chinese_simplified ] = "ⲿӦóæµ"; + Text[ greek ] = " ."; + Text[ korean ] = " α غ ȵǾϴ."; + Text[ turkish ] = "Harici uygulama hazr deil"; + Text[ language_user1 ] = " "; + }; + String SbERR_DDE_NO_DATA & ERRCODE_RES_MASK + { + Text = "DDE-Operation ohne Daten" ; + Text [ ENGLISH ] = "Data not provided in DDE operation" ; + Text [ norwegian ] = "Data not provided in DDE operation" ; + Text [ italian ] = "Operazione DDE senza dati" ; + Text [ portuguese_brazilian ] = "Data not provided in DDE operation" ; + Text [ portuguese ] = "A operao DDE no tem dados" ; + Text [ french ] = "Donnes non fournies dans l'opration DDE" ; + Text [ dutch ] = "DDE-operatie zonder gegevens" ; + Text [ spanish ] = "Operacin DDE sin datos" ; + Text [ danish ] = "DDE-operation uden data" ; + Text [ swedish ] = "DDE-operation utan data" ; + Text [ finnish ] = "Data not provided in DDE operation" ; + Text [ english_us ] = "DDE operation without data" ; + Text[ chinese_simplified ] = "ûݵ DDE "; + Text[ russian ] = " DDE "; + Text[ polish ] = "Operacja DDE bez danych"; + Text[ japanese ] = "ްȂDDEڰ"; + Text[ chinese_traditional ] = "Sƪ DDE B"; + Text[ arabic ] = " DDE "; + Text[ dutch ] = "DDE-operatie zonder gegevens"; + Text[ chinese_simplified ] = "ûݵ DDE "; + Text[ greek ] = " DDE "; + Text[ korean ] = " DDE ۵"; + Text[ turkish ] = "Verisiz DDE ilemi"; + Text[ language_user1 ] = " "; + }; + String SbERR_DDE_WRONG_DATA_FORMAT & ERRCODE_RES_MASK + { + Text = "Daten sind im falschen Format" ; + Text [ ENGLISH ] = "Data in wrong format" ; + Text [ norwegian ] = "Data in wrong format" ; + Text [ italian ] = "I dati hanno un formato errato" ; + Text [ portuguese_brazilian ] = "Data in wrong format" ; + Text [ portuguese ] = "Formato dos dados incorrecto" ; + Text [ french ] = "Le format des donnes est incorrect" ; + Text [ dutch ] = "Gegevens hebben foutief formaat" ; + Text [ spanish ] = "Los datos estn en un formato falso" ; + Text [ danish ] = "Data er i forkert format" ; + Text [ swedish ] = "Data har fel format" ; + Text [ finnish ] = "Data in wrong format" ; + Text [ english_us ] = "Data are in wrong format" ; + Text[ chinese_simplified ] = "ݸʽ"; + Text[ russian ] = " "; + Text[ polish ] = "Pliki s le sformatowane"; + Text[ japanese ] = "ް͏܂"; + Text[ chinese_traditional ] = "Ʈ榡~"; + Text[ arabic ] = " "; + Text[ dutch ] = "Gegevens hebben foutief formaat"; + Text[ chinese_simplified ] = "ݸʽ"; + Text[ greek ] = " "; + Text[ korean ] = "߸ "; + Text[ turkish ] = "Verilerin format yanl"; + Text[ language_user1 ] = " "; + }; + String SbERR_DDE_PARTNER_QUIT & ERRCODE_RES_MASK + { + Text = "Fremdapplikation ist beendet worden" ; + Text [ ENGLISH ] = "Foreign application quit" ; + Text [ norwegian ] = "Foreign application quit" ; + Text [ italian ] = "L'applicazione esterna terminata" ; + Text [ portuguese_brazilian ] = "Foreign application quit" ; + Text [ portuguese ] = "Cancelada a aplicao externa" ; + Text [ french ] = "L'application externe a t quitte" ; + Text [ dutch ] = "Externe applicatie werd beindigd" ; + Text [ spanish ] = "La aplicacin externa se ha cancelado" ; + Text [ danish ] = "Den eksterne applikation er blevet afsluttet" ; + Text [ swedish ] = "Den externa applikationen r avslutad" ; + Text [ finnish ] = "Foreign application quit" ; + Text [ english_us ] = "External application has been terminated" ; + Text[ chinese_simplified ] = "ⲿӦóѾ"; + Text[ russian ] = " "; + Text[ polish ] = "Obca aplikacja zostaa zakoczona"; + Text[ japanese ] = "Oع݂͏IĂ܂"; + Text[ chinese_traditional ] = "~ε{wg"; + Text[ arabic ] = " "; + Text[ dutch ] = "Externe applicatie werd beindigd"; + Text[ chinese_simplified ] = "ⲿӦóѾ"; + Text[ greek ] = " ."; + Text[ korean ] = "ܺ α ŵǾϴ."; + Text[ turkish ] = "Harici uygulamadan kld"; + Text[ language_user1 ] = " "; + }; + String SbERR_DDE_CONV_CLOSED & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? DDE-Verbindung ist unterbrochen oder gendert worden : DDE-Verbindung ist unterbrochen oder gendert worden */ + Text = "DDE-Verbindung ist unterbrochen oder gendert worden" ; + Text [ ENGLISH ] = "DDE conversation closed or changed" ; + Text [ norwegian ] = "DDE conversation closed or changed" ; + Text [ italian ] = "Collegamento DEE interrotto o modificato" ; + Text [ portuguese_brazilian ] = "DDE conversation closed or changed" ; + Text [ portuguese ] = "A ligao DDE foi interrompida ou modificada" ; + Text [ french ] = "La connexion DDE a t interrompue ou modifie" ; + Text [ dutch ] = "DDE-verbinding verbroken of veranderd" ; + Text [ spanish ] = "La conexin DDE se ha interrumpido o modificado" ; + Text [ danish ] = "DDE-forbindelsen er blevet afbrudt eller modificeret" ; + Text [ swedish ] = "DDE-frbindelsen r avbruten eller frndrad" ; + Text [ finnish ] = "DDE conversation closed or changed" ; + Text [ english_us ] = "DDE connection interrupted or modified" ; + Text[ chinese_simplified ] = "DDEѾжϻѾ"; + Text[ russian ] = " DDE "; + Text[ polish ] = "Poczenie DDE zostao przerwane lub zmodyfikowane."; + Text[ japanese ] = "DDEڑf܂͕ύXĂ܂"; + Text[ chinese_traditional ] = "DDEswg_Ϊ̤wgܧ"; + Text[ arabic ] = "DDE "; + Text[ dutch ] = "DDE-verbinding verbroken of veranderd"; + Text[ chinese_simplified ] = "DDEѾжϻѾ"; + Text[ greek ] = " DDE "; + Text[ korean ] = "DDE ͷƮǰų Ǿϴ."; + Text[ turkish ] = "DDE balants kesildi ya da deitirildi"; + Text[ language_user1 ] = " "; + }; + String SbERR_DDE_NO_CHANNEL & ERRCODE_RES_MASK + { + Text = "DDE-Methode ohne offenen DDE-Kanal gerufen" ; + Text [ ENGLISH ] = "DDE method invoked with no channel open" ; + Text [ norwegian ] = "DDE method invoked with no channel open" ; + Text [ italian ] = "Metodo DDE richiamato senza canale DDE aperto" ; + Text [ portuguese_brazilian ] = "DDE method invoked with no channel open" ; + Text [ portuguese ] = "Mtodo DDE foi chamado sem canal aberto" ; + Text [ french ] = "Mthode DDE appele sans avoir ouvert un canal DDE" ; + Text [ dutch ] = "DDE-methode zonder open kanaal opgeroepen" ; + Text [ spanish ] = "Se llam al mtodo DDE sin un canal DDE abierto" ; + Text [ danish ] = "DDE-metode blev kaldt uden ben DDE-kanal" ; + Text [ swedish ] = "DDE-metod anropad utan ppen DDE-kanal" ; + Text [ finnish ] = "DDE method invoked with no channel open" ; + Text [ english_us ] = "DDE method invoked with no channel open" ; + Text[ chinese_simplified ] = "ûдDDEŵʱDDE"; + Text[ russian ] = " DDE DDE"; + Text[ polish ] = "Metoda DDE wywoana bez otwartego kanau DDE"; + Text[ japanese ] = "DDEقJĂȂԂDDEҿނĂяoĂ܂"; + Text[ chinese_traditional ] = "bS}DDEHDɽեDDE k"; + Text[ arabic ] = "DDE DDE "; + Text[ dutch ] = "DDE-methode zonder open kanaal opgeroepen"; + Text[ chinese_simplified ] = "ûдDDEŵʱDDE"; + Text[ greek ] = " DDE DDE"; + Text[ korean ] = "DDE ä ʰ DDE ҵ带 ȣ"; + Text[ turkish ] = "Ak DDE kanal olmadan DDE yntemi ars"; + Text[ language_user1 ] = " "; + }; + String SbERR_DDE_INVALID_LINK & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Ungltiges DDE-Linkformat : Ungltiges DDE-Linkformat */ + Text = "Ungltiges DDE-Linkformat" ; + Text [ ENGLISH ] = "Invalid DDE Link format" ; + Text [ norwegian ] = "Invalid DDE Link format" ; + Text [ italian ] = "Formato link DDE non valido" ; + Text [ portuguese_brazilian ] = "Invalid DDE Link format" ; + Text [ portuguese ] = "Formato de ligao DDE no vlido" ; + Text [ french ] = "Format de lien DDE incorrect" ; + Text [ dutch ] = "Foutief DDE-link-formaat" ; + Text [ spanish ] = "Formato del vnculo DDE incorrecto" ; + Text [ danish ] = "Ugyldigt DDE-linkformat" ; + Text [ swedish ] = "Ogiltigt DDE- linkformat" ; + Text [ finnish ] = "Invalid DDE Link format" ; + Text [ english_us ] = "Invalid DDE link format" ; + Text[ chinese_simplified ] = "Ч DDE Ӹʽ"; + Text[ russian ] = " DDE"; + Text[ polish ] = "Nieprawidowy format cza DDE"; + Text[ japanese ] = " DDE ݸ"; + Text[ chinese_traditional ] = "LĪDDEs榡"; + Text[ arabic ] = " DDE "; + Text[ dutch ] = "Foutief DDE-link-formaat"; + Text[ chinese_simplified ] = "Ч DDE Ӹʽ"; + Text[ greek ] = " DDE"; + Text[ korean ] = "ȿ DDE "; + Text[ turkish ] = "Geersiz DDE balant format"; + Text[ language_user1 ] = " "; + }; + String SbERR_DDE_QUEUE_OVERFLOW & ERRCODE_RES_MASK + { + Text = "DDE-Message ist verlorengegangen" ; + Text [ ENGLISH ] = "Message queue filled; DDE Message lost" ; + Text [ norwegian ] = "Message queue filled; DDE Message lost" ; + Text [ italian ] = "Il messaggio DDE andato perduto" ; + Text [ portuguese_brazilian ] = "Message queue filled; DDE Message lost" ; + Text [ portuguese ] = "A mensagem DDE perdeu-se" ; + Text [ french ] = "Le message DDE a t perdu" ; + Text [ dutch ] = "DDE-message verloren gegaan" ; + Text [ spanish ] = "El mensaje DDE se ha perdido" ; + Text [ danish ] = "DDE-meddelelse er get tabt" ; + Text [ swedish ] = "DDE-meddelandet r borttappat" ; + Text [ finnish ] = "Message queue filled; DDE Message lost" ; + Text [ english_us ] = "DDE message has been lost" ; + Text[ chinese_simplified ] = "DDE Ϣʧ"; + Text[ russian ] = " DDE "; + Text[ polish ] = "Wiadomo DDE zagina"; + Text[ japanese ] = "DDEүނ͎܂"; + Text[ chinese_traditional ] = "DDET"; + Text[ arabic ] = "DDE "; + Text[ dutch ] = "DDE-message verloren gegaan"; + Text[ chinese_simplified ] = "DDE Ϣʧ"; + Text[ greek ] = " DDE "; + Text[ korean ] = "DDE "; + Text[ turkish ] = "DDE iletisi kayboldu"; + Text[ language_user1 ] = " "; + }; + String SbERR_DDE_LINK_ALREADY_EST & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Paste Link bereits durchgefhrt : Paste Link bereits durchgefhrt */ + Text = "Paste Link bereits durchgefhrt" ; + Text [ ENGLISH ] = "Paste link already performed" ; + Text [ norwegian ] = "Paste link already performed" ; + Text [ italian ] = "Paste link gi eseguito" ; + Text [ portuguese_brazilian ] = "Paste link already performed" ; + Text [ portuguese ] = "\"Paste link\" j executado" ; + Text [ french ] = "Le paste link a dj t excut" ; + Text [ dutch ] = "Paste link reeds uitgevoerd" ; + Text [ spanish ] = "Pegar vnculo ya ejecutado" ; + Text [ danish ] = "Paste link er allerede udfrt" ; + Text [ swedish ] = "Paste link r redan genomfrt" ; + Text [ finnish ] = "Paste link already performed" ; + Text [ english_us ] = "Paste link already performed" ; + Text[ chinese_simplified ] = "ճѾ"; + Text[ russian ] = " "; + Text[ polish ] = "Polecenie Wklej cze zostao ju wykonane"; + Text[ japanese ] = "ݸ̓\\t͂łɎsĂ܂"; + Text[ language_user1 ] = " "; + Text[ chinese_traditional ] = "߶Kswg"; + Text[ arabic ] = " Paste link "; + Text[ dutch ] = "Paste link reeds uitgevoerd"; + Text[ chinese_simplified ] = "ճѾ"; + Text[ greek ] = " 'Paste link' "; + Text[ korean ] = " ٿֱ ̹ Ǿϴ."; + Text[ turkish ] = "Paste Link ilemi yrtld"; + }; + String SbERR_DDE_LINK_INV_TOPIC & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? LinkMode kann wegen ungltigen Link-Topics nicht gesetzt werden : LinkMode kann wegen ungltigen Link-Topics nicht gesetzt werden */ + Text = "LinkMode kann wegen ungltigen Link-Topics nicht gesetzt werden" ; + Text [ ENGLISH ] = "Cant set LinkMode; invalid Link Topic" ; + Text [ norwegian ] = "Cant set LinkMode; invalid Link Topic" ; + Text [ italian ] = "Link topic non valido; impossibile impostare il modo link" ; + Text [ portuguese_brazilian ] = "Cant set LinkMode; invalid Link Topic" ; + Text [ portuguese ] = "Impossvel configurar o LinkMode devido a LinkTopic no vlido" ; + Text [ french ] = "Impossible de dfinir le LinkMode cause d'un Link-Topic incorrect" ; + Text [ dutch ] = "Ongeldig Link Topic; LinkMode kan niet worden gezet" ; + Text [ spanish ] = "No se puede establecer el LinkMode debido a un Link Topic incorrecto" ; + Text [ danish ] = "Linktilstand kan ikke indstilles p grund af ugyldige linktopics." ; + Text [ swedish ] = "LinkMode kan inte stllas in p grund av ogiltiga Link-Topics" ; + Text [ finnish ] = "Cant set LinkMode; invalid Link Topic" ; + Text [ english_us ] = "Link mode cannot be set due to invalid link topic" ; + Text[ chinese_simplified ] = "Чӱ趨ӱ"; + Text[ russian ] = "- Link-Topic LinkMode "; + Text[ polish ] = "Nie mona skonfigurowa LinkMode z powodu niewanych Link-Topics"; + Text[ japanese ] = "ݸ Ӱނݸ ߯ł邽߁Aݒł܂"; + Text[ chinese_traditional ] = "]LĪ|DӵLk]w|D"; + Text[ arabic ] = " Link-Topics LinkMode "; + Text[ dutch ] = "Ongeldig Link Topic; LinkMode kan niet worden gezet"; + Text[ chinese_simplified ] = "Чӱ趨ӱ"; + Text[ greek ] = " LinkMode Link-Topics."; + Text[ korean ] = "ȿ Ͽ ɼ ϴ."; + Text[ turkish ] = "LinkMode, geersiz Link-Topics nedeniyle belirlenemez"; + Text[ language_user1 ] = " "; + }; + String SbERR_DDE_DLL_NOT_FOUND & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Fr DDE wird DDEML.DLL bentigt : Fr DDE wird DDEML.DLL bentigt */ + Text = "Fr DDE wird DDEML.DLL bentigt" ; + Text [ ENGLISH ] = "DDE requires DDEML.DLL" ; + Text [ norwegian ] = "DDE requires DDEML.DLL" ; + Text [ italian ] = "DDE necessita del DDEML.DLL" ; + Text [ portuguese_brazilian ] = "DDE requires DDEML.DLL" ; + Text [ portuguese ] = "DDE requere DDEML.DLL" ; + Text [ french ] = "Le DDE requiert DDEML.DLL" ; + Text [ dutch ] = "DDE benodigt DDEML.DLL" ; + Text [ spanish ] = "Para el DDE se requiere DDEML.DLL" ; + Text [ danish ] = "DDE krver DDEML.DLL" ; + Text [ swedish ] = "DDE krver DDEML.DLL" ; + Text [ finnish ] = "DDE requires DDEML.DLL" ; + Text [ english_us ] = "DDE requires the DDEML.DLL file" ; + Text[ chinese_simplified ] = "DDE Ҫ DDEML.DLL"; + Text[ russian ] = " DDE DDEML.DLL"; + Text[ polish ] = "Dla DDE jest wymagane DDEML.DLL"; + Text[ japanese ] = "DDÊ߂DDEML.DLLKvł"; + Text[ chinese_traditional ] = "DDEnDDDEML.DLL"; + Text[ arabic ] = "DDEML.DLL DDE"; + Text[ dutch ] = "DDE benodigt DDEML.DLL"; + Text[ chinese_simplified ] = "DDE Ҫ DDEML.DLL"; + Text[ greek ] = " DDE DDEML.DLL"; + Text[ korean ] = "DDE DDEML.DLL ʿմϴ."; + Text[ turkish ] = "DDE iin DDEML.DLL gerekli"; + Text[ language_user1 ] = " "; + }; + String SbERR_CANNOT_LOAD & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Das Modul kann nicht geladen werden, ungltiges Format : Das Modul kann nicht geladen werden, ungltiges Format */ + Text = "Das Modul kann nicht geladen werden, ungltiges Format" ; + Text [ ENGLISH ] = "Can't load module, invalid format" ; + Text [ norwegian ] = "Can't load module, invalid format" ; + Text [ italian ] = "Formato non valido; impossibile caricare il modulo" ; + Text [ portuguese_brazilian ] = "Can't load module, invalid format" ; + Text [ portuguese ] = "Impossvel carregar mdulo; formato no vlido" ; + Text [ french ] = "Impossible de charger le module cause d'une erreur de format" ; + Text [ dutch ] = "De module kan niet worden geladen, ongeldig formaat" ; + Text [ spanish ] = "No se puede cargar el mdulo ya que el formato es incorrecto" ; + Text [ danish ] = "Det er ikke muligt at indlse modulet; ugyldigt format" ; + Text [ swedish ] = "Modulen kan inte laddas, ogiltigt format" ; + Text [ finnish ] = "Can't load module, invalid format" ; + Text [ english_us ] = "Module cannot be loaded; invalid format" ; + Text[ chinese_simplified ] = "ʽЧװģ"; + Text[ russian ] = " , "; + Text[ polish ] = "Moduu nie mona zaadowa, nieprawidowy format"; + Text[ japanese ] = "Ӽޭقǂݍ߂܂BȏłB"; + Text[ chinese_traditional ] = "榡LġM]ӵLk˸Ҷ"; + Text[ arabic ] = " "; + Text[ dutch ] = "De module kan niet worden geladen, ongeldig formaat"; + Text[ chinese_simplified ] = "ʽЧװģ"; + Text[ greek ] = " , "; + Text[ korean ] = " ε ʾҽϴ. ; ߸ "; + Text[ turkish ] = "Modl yklenemiyor; geersiz format"; + Text[ language_user1 ] = " "; + }; + String SbERR_BAD_INDEX & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Ungltiger Objektindex : Ungltiger Objektindex */ + Text = "Ungltiger Objektindex" ; + Text [ ENGLISH ] = "Invalid object index" ; + Text [ norwegian ] = "Invalid object index" ; + Text [ italian ] = "Indice di oggetto non valido" ; + Text [ portuguese_brazilian ] = "Invalid object index" ; + Text [ portuguese ] = "ndice de objectos no vlido" ; + Text [ french ] = "Index d'objets incorrect" ; + Text [ dutch ] = "Ongeldige objectindex" ; + Text [ spanish ] = "ndice incorrecto del objeto" ; + Text [ danish ] = "Ugyldigt objektindeks" ; + Text [ swedish ] = "Ogiltigt objektindex" ; + Text [ finnish ] = "Invalid object index" ; + Text [ english_us ] = "Invalid object index" ; + Text[ chinese_simplified ] = "ЧĶ"; + Text[ russian ] = " "; + Text[ polish ] = "Nieprawidowy indeks obiektw"; + Text[ japanese ] = "ȵު ޯ"; + Text[ chinese_traditional ] = "LĪ"; + Text[ arabic ] = " "; + Text[ dutch ] = "Ongeldige objectindex"; + Text[ chinese_simplified ] = "ЧĶ"; + Text[ greek ] = " "; + Text[ korean ] = "ȿ ü ε"; + Text[ turkish ] = "Geersiz nesne dizini"; + Text[ language_user1 ] = " "; + }; + String SbERR_NO_ACTIVE_OBJECT & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Objekt ist nicht verfgbar : Objekt ist nicht verfgbar */ + Text = "Objekt ist nicht verfgbar" ; + Text [ ENGLISH ] = "Object is not available" ; + Text [ norwegian ] = "Object is not available" ; + Text [ italian ] = "Oggetto non disponibile" ; + Text [ portuguese_brazilian ] = "Object is not available" ; + Text [ portuguese ] = "Objecto no disponvel" ; + Text [ french ] = "L'objet n'est pas disponible" ; + Text [ dutch ] = "Object niet beschikbaar" ; + Text [ spanish ] = "El objeto no est disponible" ; + Text [ danish ] = "Objektet er ikke tilgngeligt" ; + Text [ swedish ] = "Objektet r inte tillgngligt" ; + Text [ finnish ] = "Object is not available" ; + Text [ english_us ] = "Object is not available" ; + Text[ chinese_simplified ] = ""; + Text[ russian ] = " "; + Text[ polish ] = "Obiekt jest niedostpny"; + Text[ japanese ] = "ުĂ܂"; + Text[ chinese_traditional ] = "sb"; + Text[ arabic ] = " "; + Text[ dutch ] = "Object niet beschikbaar"; + Text[ chinese_simplified ] = ""; + Text[ greek ] = " "; + Text[ korean ] = "ü ȿ Ƚϴ."; + Text[ turkish ] = "Nesne mevcut deil"; + Text[ language_user1 ] = " "; + }; + String SbERR_BAD_PROP_VALUE & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Falscher Wert fr Eigenschaft : Falscher Wert fr Eigenschaft */ + Text = "Falscher Wert fr Eigenschaft" ; + Text [ ENGLISH ] = "Bad property value" ; + Text [ norwegian ] = "Bad property value" ; + Text [ italian ] = "Valore per la propriet errato" ; + Text [ portuguese_brazilian ] = "Bad property value" ; + Text [ portuguese ] = "Valor de propriedade incorrecto" ; + Text [ french ] = "Valeur de proprit incorrecte" ; + Text [ dutch ] = "Foutieve waarde voor eigenschap" ; + Text [ spanish ] = "Valor no vlido para la propiedad" ; + Text [ danish ] = "Forkert egenskabsvrdi" ; + Text [ swedish ] = "Felaktigt vrde fr egenskap" ; + Text [ finnish ] = "Bad property value" ; + Text [ english_us ] = "Incorrect property value" ; + Text[ chinese_simplified ] = "ֵ"; + Text[ russian ] = " "; + Text[ polish ] = "Niepoprawna warto waciwoci"; + Text[ japanese ] = "èl܂"; + Text[ chinese_traditional ] = "~ݩʼƭ"; + Text[ arabic ] = " "; + Text[ dutch ] = "Foutieve waarde voor eigenschap"; + Text[ chinese_simplified ] = "ֵ"; + Text[ greek ] = " "; + Text[ korean ] = "߸ Ƽ "; + Text[ turkish ] = "Yanl zellik deeri"; + Text[ language_user1 ] = " "; + }; + String SbERR_PROP_READONLY & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Eigenschaft ist schreibgeschtzt : Eigenschaft ist schreibgeschtzt */ + Text = "Eigenschaft ist schreibgeschtzt" ; + Text [ ENGLISH ] = "Property is read only" ; + Text [ norwegian ] = "Property is read only" ; + Text [ italian ] = "La propriet a sola lettura" ; + Text [ portuguese_brazilian ] = "Property is read only" ; + Text [ portuguese ] = "A propriedade s leitura" ; + Text [ french ] = "La proprit est en lecture seule" ; + Text [ dutch ] = "Eigenschap is schrijfbeveiligd" ; + Text [ spanish ] = "Propiedad es solo lectura" ; + Text [ danish ] = "Egenskaben er skrivebeskyttet" ; + Text [ swedish ] = "Egenskapen r skrivskyddad" ; + Text [ finnish ] = "Property is read only" ; + Text [ english_us ] = "This property is read only" ; + Text[ chinese_simplified ] = "д"; + Text[ russian ] = " "; + Text[ polish ] = "Waciwo tylko do odczytu"; + Text[ japanese ] = "è͏ݕی삳Ă܂"; + Text[ chinese_traditional ] = "Ūݩ"; + Text[ arabic ] = " "; + Text[ dutch ] = "Eigenschap is schrijfbeveiligd"; + Text[ chinese_simplified ] = "д"; + Text[ greek ] = " "; + Text[ korean ] = " Ƽ б Դϴ."; + Text[ turkish ] = "zellik yazma korumal"; + Text[ language_user1 ] = " "; + }; + String SbERR_PROP_WRITEONLY & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Eigenschaft ist lesegeschtzt : Eigenschaft ist lesegeschtzt */ + Text = "Eigenschaft ist lesegeschtzt" ; + Text [ ENGLISH ] = "Property is write only" ; + Text [ norwegian ] = "Property is write only" ; + Text [ italian ] = "La propriet a sola scrittura" ; + Text [ portuguese_brazilian ] = "Property is write only" ; + Text [ portuguese ] = "A propriedade s escrita" ; + Text [ french ] = "La proprit est en criture seule" ; + Text [ dutch ] = "Eigenschap is leesbeveiligd" ; + Text [ spanish ] = "Propiedad es solo escritura" ; + Text [ danish ] = "Egenskaben er lsebeskyttet" ; + Text [ swedish ] = "Egenskapen r lsskyddad" ; + Text [ finnish ] = "Property is write only" ; + Text [ english_us ] = "This property is write only" ; + Text[ chinese_simplified ] = "ȡ"; + Text[ russian ] = " "; + Text[ polish ] = "Waciwo tylko do zapisu"; + Text[ japanese ] = "è͓ǂݎی삳Ă܂"; + Text[ chinese_traditional ] = "Ūݩ"; + Text[ arabic ] = " "; + Text[ dutch ] = "Eigenschap is leesbeveiligd"; + Text[ chinese_simplified ] = "ȡ"; + Text[ greek ] = " "; + Text[ korean ] = " Ƽ Դϴ."; + Text[ turkish ] = "zellik okuma korumal"; + Text[ language_user1 ] = " "; + }; + String SbERR_INVALID_OBJECT & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Ungltige Objektreferenz : Ungltige Objektreferenz */ + Text = "Ungltige Objektreferenz" ; + Text [ ENGLISH ] = "Invalid object reference" ; + Text [ norwegian ] = "Invalid object reference" ; + Text [ italian ] = "Riferimento ad oggetto non valido" ; + Text [ portuguese_brazilian ] = "Invalid object reference" ; + Text [ portuguese ] = "Referncia do objecto no-vlida" ; + Text [ french ] = "Rfrence d'objet incorrecte" ; + Text [ dutch ] = "Ongeldige objectverwijzing" ; + Text [ spanish ] = "Referencia al objeto no vlida" ; + Text [ danish ] = "Ugyldig objektreference" ; + Text [ swedish ] = "Ogiltig objektreferens" ; + Text [ finnish ] = "Invalid object reference" ; + Text [ english_us ] = "Invalid object reference" ; + Text[ chinese_simplified ] = "ЧĶ"; + Text[ russian ] = " "; + Text[ polish ] = "Niewane odwoanie obiektu"; + Text[ japanese ] = "ȵުĎQ"; + Text[ chinese_traditional ] = "LĪѷ"; + Text[ arabic ] = " "; + Text[ dutch ] = "Ongeldige objectverwijzing"; + Text[ chinese_simplified ] = "ЧĶ"; + Text[ greek ] = " "; + Text[ korean ] = "߸ ü "; + Text[ turkish ] = "Geersiz nesne referans"; + Text[ language_user1 ] = " "; + }; + String SbERR_NO_METHOD & ERRCODE_RES_MASK + { + Text = "Eigenschaft oder Methode nicht gefunden" ; + Text [ ENGLISH ] = "Property or method not found" ; + Text [ norwegian ] = "Property or method not found" ; + Text [ italian ] = "Propriet o metodo non trovati" ; + Text [ portuguese_brazilian ] = "Property or method not found" ; + Text [ portuguese ] = "Propriedade ou mtodo no encontrados" ; + Text [ french ] = "Proprit ou mthode introuvable" ; + Text [ dutch ] = "Eigenschap of methode niet gevonden" ; + Text [ spanish ] = "No se encontr la propiedad o el mtodo" ; + Text [ danish ] = "Egenskab eller metode blev ikke fundet" ; + Text [ swedish ] = "Egenskap eller metod hittades inte" ; + Text [ finnish ] = "Property or method not found" ; + Text [ english_us ] = "Property or method not found" ; + Text[ chinese_simplified ] = "ûҵԻ"; + Text[ russian ] = " "; + Text[ polish ] = "Nie znaleziono waciwoci lub metody"; + Text[ japanese ] = "è܂ҿނ܂"; + Text[ chinese_traditional ] = "SݩʩΤk"; + Text[ arabic ] = " "; + Text[ dutch ] = "Eigenschap of methode niet gevonden"; + Text[ chinese_simplified ] = "ûҵԻ"; + Text[ greek ] = " "; + Text[ korean ] = "Ƽ Ǵ ҵ尡 ߰ߵ ʽϴ."; + Text[ turkish ] = "zellik ya da yntem bulunamad"; + Text[ language_user1 ] = " "; + }; + String SbERR_NEEDS_OBJECT & ERRCODE_RES_MASK + { + Text = "Objekt erforderlich" ; + Text [ ENGLISH ] = "Object required" ; + Text [ norwegian ] = "Object required" ; + Text [ italian ] = " necessario un oggetto" ; + Text [ portuguese_brazilian ] = "Object required" ; + Text [ portuguese ] = "Necessrio objecto" ; + Text [ french ] = "Objet requis" ; + Text [ dutch ] = "Object vereist" ; + Text [ spanish ] = "Se requiere un objeto" ; + Text [ danish ] = "Objekt krves" ; + Text [ swedish ] = "Objekt krvs" ; + Text [ finnish ] = "Object required" ; + Text [ english_us ] = "Object required" ; + Text[ chinese_simplified ] = "Ҫ"; + Text[ russian ] = " "; + Text[ polish ] = "Wymagany obiekt"; + Text[ japanese ] = "ުĂKvł"; + Text[ chinese_traditional ] = "nD"; + Text[ arabic ] = " "; + Text[ dutch ] = "Object vereist"; + Text[ chinese_simplified ] = "Ҫ"; + Text[ greek ] = " "; + Text[ korean ] = "ü ʿմϴ."; + Text[ turkish ] = "Nesne gerekli"; + Text[ language_user1 ] = " "; + }; + String SbERR_INVALID_USAGE_OBJECT & ERRCODE_RES_MASK + { + Text = "Falsche Verwendung eines Objekts" ; + Text [ ENGLISH ] = "Invalid use of object" ; + Text [ norwegian ] = "Invalid use of object" ; + Text [ italian ] = "Utilizzo non valido di un oggetto" ; + Text [ portuguese_brazilian ] = "Invalid use of object" ; + Text [ portuguese ] = "Uso incorrecto de um objecto" ; + Text [ french ] = "Utilisation incorrecte d'un objet" ; + Text [ dutch ] = "Ongeldig gebruik van object" ; + Text [ spanish ] = "Uso errneo de un objeto" ; + Text [ danish ] = "Ugyldig brug af et objekt" ; + Text [ swedish ] = "Felaktig anvndning av ett objekt" ; + Text [ finnish ] = "Invalid use of object" ; + Text [ english_us ] = "Invalid use of an object" ; + Text[ chinese_simplified ] = "ʹö"; + Text[ russian ] = " "; + Text[ polish ] = "Nieprawidowe uycie obiektu"; + Text[ japanese ] = "ުĂ̌gp"; + Text[ chinese_traditional ] = "~ϥΪ"; + Text[ arabic ] = " "; + Text[ dutch ] = "Ongeldig gebruik van object"; + Text[ chinese_simplified ] = "ʹö"; + Text[ greek ] = " "; + Text[ korean ] = "ü ߸ "; + Text[ turkish ] = "Nesne kullanm yanl"; + Text[ language_user1 ] = " "; + }; + String SbERR_NO_OLE & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? OLE-Automatisierung wird von diesem Objekt nicht untersttzt : OLE-Automatisierung wird von diesem Objekt nicht untersttzt */ + Text = "OLE-Automatisierung wird von diesem Objekt nicht untersttzt" ; + Text [ ENGLISH ] = "Object does not support OLE Automation" ; + Text [ norwegian ] = "Object does not support OLE Automation" ; + Text [ italian ] = "L'automatizzazione OLE non supportata dall'oggetto" ; + Text [ portuguese_brazilian ] = "Object does not support OLE Automation" ; + Text [ portuguese ] = "Este objecto no suporta a automatao OLE" ; + Text [ french ] = "Cet objet ne supporte pas l'automatisation OLE" ; + Text [ dutch ] = "OLE-automatisering wordt niet ondersteund door het aangegeven object" ; + Text [ spanish ] = "Este objeto no apoya la automatizacin OLE" ; + Text [ danish ] = "OLE-automatiseringen understttes ikke af dette objekt" ; + Text [ swedish ] = "OLE-automatiseringen stds ej av detta objekt" ; + Text [ finnish ] = "Object does not support OLE Automation" ; + Text [ english_us ] = "OLE Automation is not supported by this object" ; + Text[ chinese_simplified ] = "֧OLEԶ"; + Text[ russian ] = " OLE "; + Text[ polish ] = "Automatyzacja OLE nie jest obsugiwana przez ten obiekt"; + Text[ japanese ] = "OLE̵̎͂ުĂx܂"; + Text[ chinese_traditional ] = "oӪ䴩OLE۰ʤ"; + Text[ arabic ] = " OLE "; + Text[ dutch ] = "OLE-automatisering wordt niet ondersteund door het aangegeven object"; + Text[ chinese_simplified ] = "֧OLEԶ"; + Text[ greek ] = " OLE "; + Text[ korean ] = "OLE ڵȭ ü ʽϴ."; + Text[ turkish ] = "OLE otomasyonu bu nesne tarafndan desteklenmiyor"; + Text[ language_user1 ] = " "; + }; + String SbERR_BAD_METHOD & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Objekt untersttzt diese Eigenschaft oder Methode nicht : Objekt untersttzt diese Eigenschaft oder Methode nicht */ + Text = "Objekt untersttzt diese Eigenschaft oder Methode nicht" ; + Text [ ENGLISH ] = "Object doesn't support property or method" ; + Text [ norwegian ] = "Object doesn't support property or method" ; + Text [ italian ] = "L'oggetto non supporta la propriet o il metodo" ; + Text [ portuguese_brazilian ] = "Object doesn't support property or method" ; + Text [ portuguese ] = "Objecto no suporta nem a caracterstica nem o mtodo" ; + Text [ french ] = "L'objet ne supporte pas cette proprit ou mthode" ; + Text [ dutch ] = "Deze eigenschap of methode wordt niet ondersteund door het aangegeven object" ; + Text [ spanish ] = "El objeto no apoya esta propiedad o mtodo" ; + Text [ danish ] = "Objektet understtter ikke denne egenskab eller metode" ; + Text [ swedish ] = "Objektet understdjer inte denna egenskap eller metod" ; + Text [ finnish ] = "Object doesn't support property or method" ; + Text [ english_us ] = "This property or method is not supported by the object" ; + Text[ chinese_simplified ] = "֧Ի"; + Text[ russian ] = " "; + Text[ polish ] = "Obiekt nie obsuguje tej waciwoci lub metody"; + Text[ japanese ] = "ުĂ͂è܂͕@xł܂"; + Text[ chinese_traditional ] = "oݩʩΤk"; + Text[ arabic ] = " "; + Text[ dutch ] = "Deze eigenschap of methode wordt niet ondersteund door het aangegeven object"; + Text[ chinese_simplified ] = "֧Ի"; + Text[ greek ] = " "; + Text[ korean ] = " Ƽ Ǵ ҵ ü ʽϴ."; + Text[ turkish ] = "Nesne bu zellii ya da yntemi desteklemiyor"; + Text[ language_user1 ] = " "; + }; + String SbERR_OLE_ERROR & ERRCODE_RES_MASK + { + Text = "Fehler bei OLE-Automatisierung" ; + Text [ ENGLISH ] = "OLE Automation error" ; + Text [ norwegian ] = "OLE Automation error" ; + Text [ italian ] = "Errore nell'automatizzazione OLE" ; + Text [ portuguese_brazilian ] = "OLE Automation error" ; + Text [ portuguese ] = "Erro na automatao OLE" ; + Text [ french ] = "Erreur lors de l'automatisation OLE" ; + Text [ dutch ] = "Fout bij OLE-automatisering" ; + Text [ spanish ] = "Error en la automatizacin OLE" ; + Text [ danish ] = "Fejl ved OLE-automatisering" ; + Text [ swedish ] = "Fel vid OLE-automatisering" ; + Text [ finnish ] = "OLE Automation error" ; + Text [ english_us ] = "OLE Automation Error" ; + Text[ chinese_simplified ] = "OLE Զ"; + Text[ russian ] = " OLE"; + Text[ polish ] = "Bd przy automatyzacji OLE"; + Text[ japanese ] = "OLE̍ۂ̴װ"; + Text[ chinese_traditional ] = "OLE۰ʤƿ~"; + Text[ arabic ] = " OLE "; + Text[ dutch ] = "Fout bij OLE-automatisering"; + Text[ chinese_simplified ] = "OLE Զ"; + Text[ greek ] = " OLE"; + Text[ korean ] = "OLE ڵȭ "; + Text[ turkish ] = "OLE otomasyonunda hata"; + Text[ language_user1 ] = " "; + }; + String SbERR_BAD_ACTION & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Diese Aktion wird vom angegebenen Objekt nicht untersttzt : Diese Aktion wird vom angegebenen Objekt nicht untersttzt */ + Text = "Diese Aktion wird vom angegebenen Objekt nicht untersttzt" ; + Text [ ENGLISH ] = "Object doesn't support this action" ; + Text [ norwegian ] = "Object doesn't support this action" ; + Text [ italian ] = "Azione non supportata dall'oggetto specificato" ; + Text [ portuguese_brazilian ] = "Object doesn't support this action" ; + Text [ portuguese ] = "O objecto indicado no suporta esta aco" ; + Text [ french ] = "L'objet indiqu ne supporte pas cette action" ; + Text [ dutch ] = "Deze activiteit wordt niet ondersteund door het aangegeven object" ; + Text [ spanish ] = "Esta accin no es apoyada por el objeto dado" ; + Text [ danish ] = "Denne handling understttes ikke at det angivne objekt." ; + Text [ swedish ] = "Denna tgrd understds inte av angivet objekt" ; + Text [ finnish ] = "Object doesn't support this action" ; + Text [ english_us ] = "This action is not supported by given object" ; + Text[ chinese_simplified ] = "Ķ֧"; + Text[ russian ] = " "; + Text[ polish ] = "Ta akcja nie jest obsugiwana przez podany obiekt"; + Text[ japanese ] = "̱݂͎w肳ꂽުĂx܂"; + Text[ chinese_traditional ] = "w䴩oӾާ@"; + Text[ arabic ] = " "; + Text[ dutch ] = "Deze activiteit wordt niet ondersteund door het aangegeven object"; + Text[ chinese_simplified ] = "Ķ֧"; + Text[ greek ] = " "; + Text[ korean ] = " ־ üؼ ʽϴ."; + Text[ turkish ] = "Bu ilem belirtilen nesne tarafndan desteklenmiyor"; + Text[ language_user1 ] = " "; + }; + String SbERR_NO_NAMED_ARGS & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Benannte Argumente werden vom angegebenen Objekt nicht untersttzt : Benannte Argumente werden vom angegebenen Objekt nicht untersttzt */ + Text = "Benannte Argumente werden vom angegebenen Objekt nicht untersttzt" ; + Text [ ENGLISH ] = "Object doesn't support named args" ; + Text [ norwegian ] = "Object doesn't support named args" ; + Text [ italian ] = "Gli argomenti indicati non vengono supportati dall'oggetto specificato" ; + Text [ portuguese_brazilian ] = "Object doesn't support named args" ; + Text [ portuguese ] = "O objecto indicado no suporta os argumentos mencionados" ; + Text [ french ] = "L'objet indiqu ne supporte pas les arguments cits" ; + Text [ dutch ] = "Genoemde argumenten wordt niet ondersteund door het aangegeven object" ; + Text [ spanish ] = "El objeto indicado no apoya los argumentos nombrados" ; + Text [ danish ] = "Nvnte argumenter understttes ikke af det angivne objekt" ; + Text [ swedish ] = "Angivna argument understds ej av angivet objekt" ; + Text [ finnish ] = "Object doesn't support named args" ; + Text [ english_us ] = "Named arguments are not supported by given object" ; + Text[ chinese_simplified ] = "ָ֧Ա"; + Text[ russian ] = " "; + Text[ polish ] = "Nazwane argumenty nie s obsugiwane przez podany obiekt"; + Text[ japanese ] = "wꂽ͎w肳ꂽުĂx܂"; + Text[ chinese_traditional ] = "wܶqw䴩"; + Text[ arabic ] = " "; + Text[ dutch ] = "Genoemde argumenten wordt niet ondersteund door het aangegeven object"; + Text[ chinese_simplified ] = "ָ֧Ա"; + Text[ greek ] = " "; + Text[ korean ] = " ־ ü ʽϴ."; + Text[ turkish ] = "Adlandrlm argmanlar, belirtilen nesne tarafndan desteklenmiyor"; + Text[ language_user1 ] = " "; + }; + String SbERR_BAD_LOCALE & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Das aktuelle Gebietsschema wird vom angegebenen Objekt nicht untersttzt : Das aktuelle Gebietsschema wird vom angegebenen Objekt nicht untersttzt */ + Text = "Das aktuelle Gebietsschema wird vom angegebenen Objekt nicht untersttzt" ; + Text [ ENGLISH ] = "Object doesn't support current locale setting" ; + Text [ norwegian ] = "Object doesn't support current locale setting" ; + Text [ italian ] = "L'oggetto indicato non supporta l'attuale schema regionale" ; + Text [ portuguese_brazilian ] = "Object doesn't support current locale setting" ; + Text [ portuguese ] = "O objecto indicado no suporta a configurao local actual" ; + Text [ french ] = "L'objet indiqu ne supporte pas les paramtres rgionaux slectionns" ; + Text [ dutch ] = "Dit actuele gebiedschema wordt niet ondersteund door het aangegeven object" ; + Text [ spanish ] = "La configuracin local actual no es apoyada por el objeto dado" ; + Text [ danish ] = "Det aktuelle omrdeskema understttes ikke af det angivne objekt" ; + Text [ swedish ] = "De aktuella lokala instllningarna understds inte av angivet objekt" ; + Text [ finnish ] = "Object doesn't support current locale setting" ; + Text [ english_us ] = "The current locale setting is not supported by the given object" ; + Text[ chinese_simplified ] = "ǰľֲ趨ܸ֧"; + Text[ russian ] = " "; + Text[ polish ] = "Biece ustawienie lokalne nie jest obsugiwane przez podany obiekt"; + Text[ japanese ] = "݂۰ِݒ͎w肵ުĂx܂"; + Text[ chinese_traditional ] = "e]ww䴩"; + Text[ arabic ] = " "; + Text[ dutch ] = "Dit actuele gebiedschema wordt niet ondersteund door het aangegeven object"; + Text[ chinese_simplified ] = "ǰľֲ趨ܸ֧"; + Text[ greek ] = " "; + Text[ korean ] = " ־ üؼ ʽϴ."; + Text[ turkish ] = "Yrlkteki yerel ayarlar, belirtilen nesne tarafndan desteklenmiyor"; + Text[ language_user1 ] = " "; + }; + String SbERR_NAMED_NOT_FOUND & ERRCODE_RES_MASK + { + Text = "Benanntes Argument nicht gefunden" ; + Text [ ENGLISH ] = "Named argument not found" ; + Text [ norwegian ] = "Named argument not found" ; + Text [ italian ] = "L'argomento indicato non stato trovato" ; + Text [ portuguese_brazilian ] = "Named argument not found" ; + Text [ portuguese ] = "Impossvel encontrar o argumento mencionado" ; + Text [ french ] = "L'argument cit est introuvable" ; + Text [ dutch ] = "Genoemd argument niet gevonden" ; + Text [ spanish ] = "No se encontr el argumento nombrado" ; + Text [ danish ] = "Det nvnte argument blev ikke fundet" ; + Text [ swedish ] = "Angivet argument hittades inte" ; + Text [ finnish ] = "Named argument not found" ; + Text [ english_us ] = "Named argument not found" ; + Text[ chinese_simplified ] = "ûҵָԱ"; + Text[ russian ] = " "; + Text[ polish ] = "Nazwanego argumentu nie znaleziono"; + Text[ japanese ] = "w͌܂"; + Text[ chinese_traditional ] = "Swܶq"; + Text[ arabic ] = " "; + Text[ dutch ] = "Genoemd argument niet gevonden"; + Text[ chinese_simplified ] = "ûҵָԱ"; + Text[ greek ] = " "; + Text[ korean ] = " ߰ߵ ʽϴ."; + Text[ turkish ] = "Adlandrlan argman bulunamad"; + Text[ language_user1 ] = " "; + }; + String SbERR_NOT_OPTIONAL & ERRCODE_RES_MASK + { + Text = "Argument ist nicht optional" ; + Text [ ENGLISH ] = "Argument not optional" ; + Text [ norwegian ] = "Argument not optional" ; + Text [ italian ] = "L'argomento non opzionale" ; + Text [ portuguese_brazilian ] = "Argument not optional" ; + Text [ portuguese ] = "Argumento no opcional" ; + Text [ french ] = "L'argument n'est pas facultatif" ; + Text [ dutch ] = "Argument niet optioneel" ; + Text [ spanish ] = "El argumento no es opcional" ; + Text [ danish ] = "Argumentet er ikke valgfrit" ; + Text [ swedish ] = "Argumentet r inte valfritt" ; + Text [ finnish ] = "Argument not optional" ; + Text [ english_us ] = "Argument is not optional" ; + Text[ chinese_simplified ] = "ǿѡԱ"; + Text[ russian ] = " "; + Text[ polish ] = "Argument nie jest opcjonalny"; + Text[ japanese ] = "͵݂ł͂܂"; + Text[ chinese_traditional ] = "Di諸ܶq"; + Text[ arabic ] = " "; + Text[ dutch ] = "Argument niet optioneel"; + Text[ chinese_simplified ] = "ǿѡԱ"; + Text[ greek ] = " "; + Text[ korean ] = " ɼ ƴմϴ."; + Text[ turkish ] = "Argman istee bal deil"; + Text[ language_user1 ] = " "; + }; + String SbERR_WRONG_ARGS & ERRCODE_RES_MASK + { + Text = "Falsche Anzahl an Argumenten" ; + Text [ ENGLISH ] = "Wrong number of arguments" ; + Text [ norwegian ] = "Wrong number of arguments" ; + Text [ italian ] = "Numero di argomenti errato" ; + Text [ portuguese_brazilian ] = "Wrong number of arguments" ; + Text [ portuguese ] = "Nmero de argumentos incorrecto" ; + Text [ french ] = "Nombre d'arguments incorrect" ; + Text [ dutch ] = "Foutief aantal argumenten" ; + Text [ spanish ] = "Nmero errneo de argumentos" ; + Text [ danish ] = "Forkert antal argumenter" ; + Text [ swedish ] = "Felaktigt antal argument" ; + Text [ finnish ] = "Wrong number of arguments" ; + Text [ english_us ] = "Invalid number of arguments" ; + Text[ chinese_simplified ] = "ЧԱĿ"; + Text[ russian ] = " "; + Text[ polish ] = "Nieprawidowa ilo argumentw"; + Text[ japanese ] = "̐܂"; + Text[ chinese_traditional ] = "LĪܶqƥ"; + Text[ arabic ] = " "; + Text[ dutch ] = "Foutief aantal argumenten"; + Text[ chinese_simplified ] = "ЧԱĿ"; + Text[ greek ] = " "; + Text[ korean ] = " Ʋ"; + Text[ turkish ] = "Argman says yanl"; + Text[ language_user1 ] = " "; + }; + String SbERR_NOT_A_COLL & ERRCODE_RES_MASK + { + Text = "Objekt ist keine Auflistung" ; + Text [ ENGLISH ] = "Object not a collection" ; + Text [ norwegian ] = "Object not a collection" ; + Text [ italian ] = "L'oggetto non un elenco" ; + Text [ portuguese_brazilian ] = "Object not a collection" ; + Text [ portuguese ] = "O objecto no uma lista" ; + Text [ french ] = "L'objet n'est pas une liste" ; + Text [ dutch ] = "Object is geen lijst" ; + Text [ spanish ] = "El objeto no es una lista" ; + Text [ danish ] = "Objektet er ingen liste" ; + Text [ swedish ] = "Objektet r ingen lista" ; + Text [ finnish ] = "Object not a collection" ; + Text [ english_us ] = "Object is not a list" ; + Text[ chinese_simplified ] = "һе"; + Text[ russian ] = " "; + Text[ polish ] = "Obiekt nie jest list"; + Text[ japanese ] = "ުĂؽĂł͂܂"; + Text[ chinese_traditional ] = "O@ӲM"; + Text[ arabic ] = " "; + Text[ dutch ] = "Object is geen lijst"; + Text[ chinese_simplified ] = "һе"; + Text[ greek ] = " "; + Text[ korean ] = "ü ϵ ʾҽϴ."; + Text[ turkish ] = "Nesne bir liste deil"; + Text[ language_user1 ] = " "; + }; + String SbERR_BAD_ORDINAL & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Ordnungszahl ungltig : Ordnungszahl ungltig */ + Text = "Ordnungszahl ungltig" ; + Text [ ENGLISH ] = "Invalid ordinal" ; + Text [ norwegian ] = "Invalid ordinal" ; + Text [ italian ] = "Numero ordinale non valido" ; + Text [ portuguese_brazilian ] = "Invalid ordinal" ; + Text [ portuguese ] = "Ordinal incorrecto" ; + Text [ french ] = "Nombre ordinal non valable" ; + Text [ dutch ] = "Ongeldig ranggetal" ; + Text [ spanish ] = "Nmero ordinal no vlido" ; + Text [ danish ] = "Ugyldigt ordenstal" ; + Text [ swedish ] = "Ogiltigt ordningstal" ; + Text [ finnish ] = "Invalid ordinal" ; + Text [ english_us ] = "Invalid ordinal number" ; + Text[ chinese_simplified ] = "Ч"; + Text[ russian ] = " "; + Text[ polish ] = "Nieprawidowa liczba porzdkowa"; + Text[ japanese ] = "͖ł"; + Text[ chinese_traditional ] = "ǸL"; + Text[ arabic ] = " "; + Text[ dutch ] = "Ongeldig ranggetal"; + Text[ chinese_simplified ] = "Ч"; + Text[ greek ] = " "; + Text[ korean ] = "߸ "; + Text[ turkish ] = "Sra says geersiz"; + Text[ language_user1 ] = " "; + }; + String SbERR_DLLPROC_NOT_FOUND & ERRCODE_RES_MASK + { + Text = "Angegebene DLL-Funktion nicht gefunden" ; + Text [ ENGLISH ] = "Specified DLL function not found" ; + Text [ norwegian ] = "Specified DLL function not found" ; + Text [ italian ] = "Impossibile trovare la funzione DLL specificata" ; + Text [ portuguese_brazilian ] = "Specified DLL function not found" ; + Text [ portuguese ] = "Funo DLL especificada no foi encontrada" ; + Text [ french ] = "La fonction DLL indique est introuvable" ; + Text [ dutch ] = "Aangegeven DLL- functie niet gevonden" ; + Text [ spanish ] = "No se encontr la funcin DLL especificada" ; + Text [ danish ] = "Den angivne DDL-funktion blev ikke fundet" ; + Text [ swedish ] = "Angiven DLL-funktion hittades inte" ; + Text [ finnish ] = "Specified DLL function not found" ; + Text [ english_us ] = "Specified DLL function not found" ; + Text[ chinese_simplified ] = "ûҵָ DLL "; + Text[ russian ] = " DLL "; + Text[ polish ] = "Podanej funkcji DLL nie znaleziono"; + Text[ japanese ] = "w肳ꂽDLL@\\͌܂"; + Text[ chinese_traditional ] = "SwDLL\\"; + Text[ arabic ] = " DLL "; + Text[ dutch ] = "Aangegeven DLL- functie niet gevonden"; + Text[ chinese_simplified ] = "ûҵָ DLL "; + Text[ greek ] = " DLL"; + Text[ korean ] = " DLL Լ ߰ߵ ʾҽϴ."; + Text[ turkish ] = "Belirtilen DLL ilevi bulunamad"; + Text[ language_user1 ] = " "; + }; + String SbERR_BAD_CLIPBD_FORMAT & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Ungltiges Clipboard-Format : Ungltiges Clipboard-Format */ + Text = "Ungltiges Clipboard-Format" ; + Text [ ENGLISH ] = "Invalid clipboard format" ; + Text [ norwegian ] = "Invalid clipboard format" ; + Text [ italian ] = "Formato clipboard non valido" ; + Text [ portuguese_brazilian ] = "Invalid clipboard format" ; + Text [ portuguese ] = "Formato da rea de transferncia no vlido" ; + Text [ french ] = "Le format de presse-papiers souhait est incorrect." ; + Text [ dutch ] = "Ongeldig Clipboard- formaat" ; + Text [ spanish ] = "Formato de portapapeles no vlido" ; + Text [ danish ] = "Ugyldigt udklipsholderformat" ; + Text [ swedish ] = "Ogiltigt urklippsformat" ; + Text [ finnish ] = "Invalid clipboard format" ; + Text [ english_us ] = "Invalid clipboard format" ; + Text[ chinese_simplified ] = "Чļʽ"; + Text[ russian ] = " "; + Text[ polish ] = "Nieprawidowy format schowka"; + Text[ japanese ] = "دްޏł"; + Text[ chinese_traditional ] = "LĪŶKï榡"; + Text[ arabic ] = " "; + Text[ dutch ] = "Ongeldig Clipboard- formaat"; + Text[ chinese_simplified ] = "Чļʽ"; + Text[ greek ] = " "; + Text[ korean ] = "ȿ Ŭ "; + Text[ turkish ] = "Geersiz pano format"; + Text[ language_user1 ] = " "; + }; + String SbERR_PROPERTY_NOT_FOUND & ERRCODE_RES_MASK + { + Text = "Objekt hat diese Eigenschaft nicht" ; + Text [ ENGLISH ] = "Object does not have property" ; + Text [ norwegian ] = "Object does not have property" ; + Text [ italian ] = "L'oggetto non dispone di questa propriet" ; + Text [ portuguese_brazilian ] = "Object does not have property" ; + Text [ portuguese ] = "O objecto no tem esta propriedade" ; + Text [ french ] = "L'objet ne possde pas cette proprit" ; + Text [ dutch ] = "Object heeft deze eigenschap niet" ; + Text [ spanish ] = "El objeto no tiene esta propiedad" ; + Text [ danish ] = "Objektet har ikke denne egenskab" ; + Text [ swedish ] = "Objektet har inte denna egenskap" ; + Text [ finnish ] = "Object does not have property" ; + Text [ english_us ] = "Object does not have this property" ; + Text[ chinese_simplified ] = "߱"; + Text[ russian ] = " "; + Text[ polish ] = "Obiekt nie ma tej waciwoci"; + Text[ japanese ] = "ުĂɂ̑͂܂"; + Text[ chinese_traditional ] = "Ƴoݩ"; + Text[ arabic ] = " "; + Text[ dutch ] = "Object heeft deze eigenschap niet"; + Text[ chinese_simplified ] = "߱"; + Text[ greek ] = " "; + Text[ korean ] = "ü Ƽ ʽϴ."; + Text[ turkish ] = "Nesne bu zellie sahip deil"; + Text[ language_user1 ] = " "; + }; + String SbERR_METHOD_NOT_FOUND & ERRCODE_RES_MASK + { + Text = "Objekt hat diese Methode nicht" ; + Text [ ENGLISH ] = "Object does not have method" ; + Text [ norwegian ] = "Object does not have method" ; + Text [ italian ] = "L'oggetto non dispone di questo metodo" ; + Text [ portuguese_brazilian ] = "Object does not have method" ; + Text [ portuguese ] = "O objecto no dispe deste mtodo" ; + Text [ french ] = "L'objet ne possde pas cette mthode" ; + Text [ dutch ] = "Object kent deze methode niet" ; + Text [ spanish ] = "El objeto no tiene este mtodo" ; + Text [ danish ] = "Objekt har ikke denne metode" ; + Text [ swedish ] = "Objektet har inte denna metod" ; + Text [ finnish ] = "Object does not have method" ; + Text [ english_us ] = "Object does not have this method" ; + Text[ chinese_simplified ] = "߱"; + Text[ russian ] = " "; + Text[ polish ] = "Obiekt nie ma tej metody"; + Text[ japanese ] = "ުĂɂҿނ͂܂"; + Text[ chinese_traditional ] = "ƳoӤk"; + Text[ arabic ] = " "; + Text[ dutch ] = "Object kent deze methode niet"; + Text[ chinese_simplified ] = "߱"; + Text[ greek ] = " "; + Text[ korean ] = "ü ҵ带 ʽϴ."; + Text[ turkish ] = "Nesne bu ynteme sahip deil"; + Text[ language_user1 ] = " "; + }; + String SbERR_ARG_MISSING & ERRCODE_RES_MASK + { + Text = "Erforderliches Argument fehlt" ; + Text [ ENGLISH ] = "Missing required argument" ; + Text [ norwegian ] = "Missing required argument" ; + Text [ italian ] = "L'argomento richiesto manca" ; + Text [ portuguese_brazilian ] = "Missing required argument" ; + Text [ portuguese ] = "Falta o argumento necessrio" ; + Text [ french ] = "L'argument requis fait dfaut" ; + Text [ dutch ] = "Noordzakelijk argument ontbreekt" ; + Text [ spanish ] = "Falta el argumento requerido" ; + Text [ danish ] = "Pkrvet argument mangler" ; + Text [ swedish ] = "Ndvndigt argument saknas" ; + Text [ finnish ] = "Missing required argument" ; + Text [ english_us ] = "Required argument lacking" ; + Text[ chinese_simplified ] = "ȱٱҪԱ"; + Text[ russian ] = " "; + Text[ polish ] = "Brakuje wymaganego argumentu"; + Text[ japanese ] = "KvȈ܂"; + Text[ chinese_traditional ] = "ʤ֥nܶq"; + Text[ arabic ] = " "; + Text[ dutch ] = "Noordzakelijk argument ontbreekt"; + Text[ chinese_simplified ] = "ȱٱҪԱ"; + Text[ greek ] = " "; + Text[ korean ] = "û ϴ"; + Text[ turkish ] = "Gerekli argman eksik"; + Text[ language_user1 ] = " "; + }; + String SbERR_BAD_NUMBER_OF_ARGS & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Ungltige Anzahl von Argumenten : Ungltige Anzahl von Argumenten */ + Text = "Ungltige Anzahl von Argumenten" ; + Text [ ENGLISH ] = "Invalid number of arguments" ; + Text [ norwegian ] = "Invalid number of arguments" ; + Text [ italian ] = "Numero di argomenti non valido" ; + Text [ portuguese_brazilian ] = "Invalid number of arguments" ; + Text [ portuguese ] = "Nmero de argumentos incorrecto" ; + Text [ french ] = "Nombre d'arguments incorrect" ; + Text [ dutch ] = "Ongeldig aantal argumenten" ; + Text [ spanish ] = "Nmero de argumentos no vlido" ; + Text [ danish ] = "Ugyldigt antal argumenter" ; + Text [ swedish ] = "Ogiltigt antal argument" ; + Text [ finnish ] = "Invalid number of arguments" ; + Text [ english_us ] = "Invalid number of arguments" ; + Text[ chinese_simplified ] = "ЧԱĿ"; + Text[ russian ] = " "; + Text[ polish ] = "Nieprawidowa ilo argumentw"; + Text[ japanese ] = "̐ɖ肪܂"; + Text[ chinese_traditional ] = "ܶqƥصL"; + Text[ arabic ] = " "; + Text[ dutch ] = "Ongeldig aantal argumenten"; + Text[ chinese_simplified ] = "ЧԱĿ"; + Text[ greek ] = " "; + Text[ korean ] = " ȿ "; + Text[ turkish ] = "Argman says geersiz"; + Text[ language_user1 ] = " "; + }; + String SbERR_METHOD_FAILED & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Fehler in Ausfhrung einer Methode : Fehler in Ausfhrung einer Methode */ + Text = "Fehler in Ausfhrung einer Methode" ; + Text [ ENGLISH ] = "Method failed" ; + Text [ norwegian ] = "Method failed" ; + Text [ italian ] = "Errore nell'esecuzione di un metodo" ; + Text [ portuguese_brazilian ] = "Method failed" ; + Text [ portuguese ] = "Erro ao executar mtodo" ; + Text [ french ] = "Erreur dans l'excution d'une mthode" ; + Text [ dutch ] = "Fout in uitvoering van een methode" ; + Text [ spanish ] = "Error al ejecutar un mtodo" ; + Text [ danish ] = "Fejl ved udfrelsen af en metode" ; + Text [ swedish ] = "Fel vid utfrandet av en metod" ; + Text [ finnish ] = "Method failed" ; + Text [ english_us ] = "Error executing a method" ; + Text[ chinese_simplified ] = "зʱ"; + Text[ russian ] = " "; + Text[ polish ] = "Bd w wykonywaniu metody"; + Text[ japanese ] = "ҿގs̴װ"; + Text[ chinese_traditional ] = "BkɵoͿ~"; + Text[ arabic ] = " "; + Text[ dutch ] = "Fout in uitvoering van een methode"; + Text[ chinese_simplified ] = "зʱ"; + Text[ greek ] = " "; + Text[ korean ] = "ҵ "; + Text[ turkish ] = "Yntemin yrtlmesinde hata"; + Text[ language_user1 ] = " "; + }; + String SbERR_SETPROP_FAILED & ERRCODE_RES_MASK + { + Text = "Eigenschaft konnte nicht festgelegt werden" ; + Text [ ENGLISH ] = "Unable to set property" ; + Text [ norwegian ] = "Unable to set property" ; + Text [ italian ] = "Impossibile impostare la propriet" ; + Text [ portuguese_brazilian ] = "Unable to set property" ; + Text [ portuguese ] = "Foi impossvel definir propriedade" ; + Text [ french ] = "Impossible de dfinir la proprit" ; + Text [ dutch ] = "Eigenschap kon niet worden gedefinieerd" ; + Text [ spanish ] = "No se pudo determinar la propiedad" ; + Text [ danish ] = "Det var ikke muligt at definere egenskaben" ; + Text [ swedish ] = "Egenskap kunde inte definieras" ; + Text [ finnish ] = "Unable to set property" ; + Text [ english_us ] = "Unable to set property" ; + Text[ chinese_simplified ] = "ȷ"; + Text[ russian ] = " "; + Text[ polish ] = "Waciwo nie moga zosta zdefiniowana"; + Text[ japanese ] = "͎wł܂ł"; + Text[ chinese_traditional ] = "LkTwݩ"; + Text[ arabic ] = " "; + Text[ dutch ] = "Eigenschap kon niet worden gedefinieerd"; + Text[ chinese_simplified ] = "ȷ"; + Text[ greek ] = " "; + Text[ korean ] = "Ƽ Ҽ ϴ."; + Text[ turkish ] = "zellik tanmlanamad"; + Text[ language_user1 ] = " "; + }; + String SbERR_GETPROP_FAILED & ERRCODE_RES_MASK + { + Text = "Eigenschaft konnte nicht ermittelt werden" ; + Text [ ENGLISH ] = "Unable to get property" ; + Text [ norwegian ] = "Unable to get property" ; + Text [ italian ] = "Impossibile individuare la propriet" ; + Text [ portuguese_brazilian ] = "Unable to get property" ; + Text [ portuguese ] = "Foi impossvel determinar a propriedade" ; + Text [ french ] = "Impossible de dterminer la proprit" ; + Text [ dutch ] = "Eigenschap kon niet worden vastgesteld" ; + Text [ spanish ] = "No se pudo determinar la propiedad" ; + Text [ danish ] = "Det var ikke muligt at bestemme egenskaben" ; + Text [ swedish ] = "Egenskaperna kunde inte bestmmas" ; + Text [ finnish ] = "Unable to get property" ; + Text [ english_us ] = "Unable to determine property" ; + Text[ chinese_simplified ] = ""; + Text[ russian ] = " "; + Text[ polish ] = "Waciwo nie moga zosta zdefiniowana"; + Text[ japanese ] = "͊m߂邱Ƃł܂ł"; + Text[ chinese_traditional ] = "LkŪXݩ"; + Text[ arabic ] = " "; + Text[ dutch ] = "Eigenschap kon niet worden vastgesteld"; + Text[ chinese_simplified ] = ""; + Text[ greek ] = " "; + Text[ korean ] = "Ƽ Ҽ ϴ."; + Text[ turkish ] = "zellik belirlenemedi"; + Text[ language_user1 ] = " "; + }; + // Compiler errors. These are not runtime errors. + String SbERR_UNEXPECTED & ERRCODE_RES_MASK + { + Text = "Unerwartetes Symbol: $(ARG1)" ; + Text [ ENGLISH ] = "Unexpected symbol: $(ARG1)" ; + Text [ norwegian ] = "Unexpected symbol: $(ARG1)" ; + Text [ italian ] = "Simbolo inatteso: $(ARG1)" ; + Text [ portuguese_brazilian ] = "Unexpected symbol: $(ARG1)" ; + Text [ portuguese ] = "Smbolo inesperado: $(ARG1)" ; + Text [ french ] = "Symbole imprvu : $(ARG1)" ; + Text [ dutch ] = "Onverwacht symbool: $(ARG1)" ; + Text [ spanish ] = "Smbolo inesperado: $(ARG1)" ; + Text [ danish ] = "Uventet symbol: $(ARG1)" ; + Text [ swedish ] = "Ovntad symbol: $(ARG1)" ; + Text [ finnish ] = "Unexpected symbol: $(ARG1)" ; + Text [ english_us ] = "Unexpected symbol: $(ARG1)" ; + Text[ chinese_simplified ] = "ͼ꣺$(ARG1)"; + Text[ russian ] = " : $(ARG1)"; + Text[ polish ] = "Nieoczekiwany symbol: $(ARG1)"; + Text[ japanese ] = "sKȼ: $(ARG1)"; + Text[ chinese_traditional ] = "N~ϥܡG$(ARG1)"; + Text[ arabic ] = "$(ARG1) : "; + Text[ dutch ] = "Onverwacht symbool: $(ARG1)"; + Text[ chinese_simplified ] = "ͼ꣺$(ARG1)"; + Text[ greek ] = " : $(ARG1)"; + Text[ korean ] = " ȣ : $(ARG1)"; + Text[ turkish ] = "Beklenmeyen simge: $(ARG1)"; + Text[ language_user1 ] = " "; + }; + String SbERR_EXPECTED & ERRCODE_RES_MASK + { + Text = "Erwartet: $(ARG1)" ; + Text [ ENGLISH ] = "Expected: $(ARG1)" ; + Text [ norwegian ] = "Expected: $(ARG1)" ; + Text [ italian ] = "Atteso: $(ARG1)" ; + Text [ portuguese_brazilian ] = "Expected: $(ARG1)" ; + Text [ portuguese ] = "Esperado: $(ARG1)" ; + Text [ french ] = "Requis : $(ARG1)" ; + Text [ dutch ] = "Verwacht: $(ARG1)" ; + Text [ spanish ] = "Se espera: $(ARG1)" ; + Text [ danish ] = "Forventet: $(ARG1)" ; + Text [ swedish ] = "Frvntad: $(ARG1)" ; + Text [ finnish ] = "Expected: $(ARG1)" ; + Text [ english_us ] = "Expected: $(ARG1)" ; + Text[ chinese_simplified ] = "ȴ$(ARG1)"; + Text[ russian ] = ": $(ARG1)"; + Text[ polish ] = "Oczekiwany: $(ARG1)"; + Text[ japanese ] = "Kv: $(ARG1)"; + Text[ chinese_traditional ] = "ݡG$(ARG1)"; + Text[ arabic ] = "$(ARG1) :"; + Text[ dutch ] = "Verwacht: $(ARG1)"; + Text[ chinese_simplified ] = "ȴ$(ARG1)"; + Text[ greek ] = ": $(ARG1)"; + Text[ korean ] = ": $(ARG1)"; + Text[ turkish ] = "Beklenen: $(ARG1)"; + Text[ language_user1 ] = " "; + }; + String SbERR_SYMBOL_EXPECTED & ERRCODE_RES_MASK + { + Text = "Symbol erwartet" ; + Text [ ENGLISH ] = "Symbol expected" ; + Text [ norwegian ] = "Symbol expected" ; + Text [ italian ] = "Simbolo atteso" ; + Text [ portuguese_brazilian ] = "Symbol expected" ; + Text [ portuguese ] = "Smbolo esperado" ; + Text [ french ] = "Symbole requis" ; + Text [ dutch ] = "Symbool verwacht" ; + Text [ spanish ] = "Smbolo esperado" ; + Text [ danish ] = "Symbol forventes" ; + Text [ swedish ] = "Symbol frvntad" ; + Text [ finnish ] = "Symbol expected" ; + Text [ english_us ] = "Symbol expected" ; + Text[ chinese_simplified ] = "ȴͼ"; + Text[ russian ] = " "; + Text[ polish ] = "Oczekiwany symbol"; + Text[ japanese ] = "قKvł"; + Text[ chinese_traditional ] = "ݹϥ"; + Text[ arabic ] = " "; + Text[ dutch ] = "Symbool verwacht"; + Text[ chinese_simplified ] = "ȴͼ"; + Text[ greek ] = " "; + Text[ korean ] = " ȣ"; + Text[ turkish ] = "Simge bekleniyor"; + Text[ language_user1 ] = " "; + }; + String SbERR_VAR_EXPECTED & ERRCODE_RES_MASK + { + Text = "Variable erwartet" ; + Text [ ENGLISH ] = "Variable expected" ; + Text [ norwegian ] = "Variable expected" ; + Text [ italian ] = "Variabile attesa" ; + Text [ portuguese_brazilian ] = "Variable expected" ; + Text [ portuguese ] = "Varivel esperada" ; + Text [ french ] = "Variable requise" ; + Text [ dutch ] = "Variabele verwacht" ; + Text [ spanish ] = "Se requiere una variable" ; + Text [ danish ] = "Variabel forventes" ; + Text [ swedish ] = "Variabel frvntad" ; + Text [ finnish ] = "Variable expected" ; + Text [ english_us ] = "Variable expected" ; + Text[ chinese_simplified ] = "ȴ"; + Text[ russian ] = " "; + Text[ polish ] = "Zmienna oczekiwana"; + Text[ japanese ] = "ϐKvł"; + Text[ chinese_traditional ] = "ܶq"; + Text[ arabic ] = " "; + Text[ dutch ] = "Variabele verwacht"; + Text[ chinese_simplified ] = "ȴ"; + Text[ greek ] = " "; + Text[ korean ] = " "; + Text[ turkish ] = "Deiken bekleniyor"; + Text[ language_user1 ] = " "; + }; + String SbERR_LABEL_EXPECTED & ERRCODE_RES_MASK + { + Text = "Label erwartet" ; + Text [ ENGLISH ] = "Label expected" ; + Text [ norwegian ] = "Label expected" ; + Text [ italian ] = "Label attesa" ; + Text [ portuguese_brazilian ] = "Label expected" ; + Text [ portuguese ] = "Etiqueta esperada" ; + Text [ french ] = "tiquette requise" ; + Text [ dutch ] = "Label verwacht" ; + Text [ spanish ] = "Se requiere una etiqueta" ; + Text [ danish ] = "Etiket forventes" ; + Text [ swedish ] = "Etikett frvntad" ; + Text [ finnish ] = "Label expected" ; + Text [ english_us ] = "Label expected" ; + Text[ chinese_simplified ] = "ȴ"; + Text[ russian ] = " "; + Text[ polish ] = "Oczekiwana etykieta"; + Text[ japanese ] = "قKvł"; + Text[ chinese_traditional ] = "ݼи"; + Text[ arabic ] = " "; + Text[ dutch ] = "Label verwacht"; + Text[ chinese_simplified ] = "ȴ"; + Text[ greek ] = " "; + Text[ korean ] = " "; + Text[ turkish ] = "Etiket bekleniyor"; + Text[ language_user1 ] = " "; + }; + String SbERR_LVALUE_EXPECTED & ERRCODE_RES_MASK + { + Text = "Wert kann nicht zugewiesen werden" ; + Text [ ENGLISH ] = "Cannot set value" ; + Text [ norwegian ] = "Cannot set value" ; + Text [ italian ] = "Impossibile attribuitre il valore" ; + Text [ portuguese_brazilian ] = "Cannot set value" ; + Text [ portuguese ] = "Impossvel atribuir o valor" ; + Text [ french ] = "Impossible d'attribuer la valeur" ; + Text [ dutch ] = "Waarde kan niet worden toegewezen" ; + Text [ spanish ] = "No se puede asignar el valor" ; + Text [ danish ] = "Vrdien kan ikke tildeles" ; + Text [ swedish ] = "Vrdet kan inte tilldelas" ; + Text [ finnish ] = "Cannot set value" ; + Text [ english_us ] = "Value cannot be applied" ; + Text[ chinese_simplified ] = "ֵָ"; + Text[ russian ] = " "; + Text[ polish ] = "Nie mona zastosowa wartoci"; + Text[ japanese ] = "l͊蓖Ă܂"; + Text[ chinese_traditional ] = "Lkwƭ"; + Text[ arabic ] = " "; + Text[ dutch ] = "Waarde kan niet worden toegewezen"; + Text[ chinese_simplified ] = "ֵָ"; + Text[ greek ] = " "; + Text[ korean ] = " ϴ."; + Text[ turkish ] = "Deer atanamyor"; + Text[ language_user1 ] = " "; + }; + String SbERR_VAR_DEFINED & ERRCODE_RES_MASK + { + Text = "Variable $(ARG1) bereits definiert" ; + Text [ ENGLISH ] = "Variable $(ARG1) already defined" ; + Text [ norwegian ] = "Variable $(ARG1) already defined" ; + Text [ italian ] = "Variabile $(ARG1) gi definita" ; + Text [ portuguese_brazilian ] = "Variable $(ARG1) already defined" ; + Text [ portuguese ] = "Varivel $(ARG1) j definida" ; + Text [ french ] = "La variable $(ARG1) est dj dfinie" ; + Text [ dutch ] = "Variabele $(ARG1) reeds gedefinieerd" ; + Text [ spanish ] = "La variable $(ARG1) ya se ha definido" ; + Text [ danish ] = "Variabel $(ARG1) er allerede defineret" ; + Text [ swedish ] = "Variabeln $(ARG1) r redan definierad" ; + Text [ finnish ] = "Variable $(ARG1) already defined" ; + Text [ english_us ] = "Variable $(ARG1) already defined" ; + Text[ chinese_simplified ] = "Ѿ˱ $(ARG1)"; + Text[ russian ] = " $(ARG1) "; + Text[ polish ] = "Zmienna $(ARG1) ju zdefiniowana"; + Text[ japanese ] = "ϐ$(ARG1)͂łɒ`Ă܂"; + Text[ chinese_traditional ] = "wgwqFܶq $(ARG1)"; + Text[ arabic ] = " $(ARG1) "; + Text[ dutch ] = "Variabele $(ARG1) reeds gedefinieerd"; + Text[ chinese_simplified ] = "Ѿ˱ $(ARG1)"; + Text[ greek ] = " $(ARG1) "; + Text[ korean ] = "$(ARG1) ̹ ǵǾֽϴ."; + Text[ turkish ] = "Deiken $(ARG1) tanmlanm durumda"; + Text[ language_user1 ] = " "; + }; + String SbERR_PROC_DEFINED & ERRCODE_RES_MASK + { + Text = "Sub- oder Function-Prozedur $(ARG1) bereits definiert" ; + Text [ ENGLISH ] = "Procedure $(ARG1) already defined" ; + Text [ norwegian ] = "Procedure $(ARG1) already defined" ; + Text [ italian ] = "Procedura subordinata o di funzione $(ARG1) gi definita" ; + Text [ portuguese_brazilian ] = "Procedure $(ARG1) already defined" ; + Text [ portuguese ] = "Procedimento subordinado ou de funo $(ARG1) j definidos" ; + Text [ french ] = "La sous-procdure ou procdure fonctionnelle $(ARG1) est dj dfinie" ; + Text [ dutch ] = "Sub- of functieprocedure $(ARG1) reeds gedefinieerd" ; + Text [ spanish ] = "El procedimiento de funcin o subordinado $(ARG1) ya est definido" ; + Text [ danish ] = "Under- eller funktionsprocedure $(ARG1) er allerede defineret" ; + Text [ swedish ] = "Sub- eller funktionsproceduren $(ARG1) r redan definierad" ; + Text [ finnish ] = "Procedure $(ARG1) already defined" ; + Text [ english_us ] = "Sub procedure or function procedure $(ARG1) already defined" ; + Text[ chinese_simplified ] = "Ѿ˷ֹ̻ $(ARG1)"; + Text[ russian ] = " $(ARG1) "; + Text[ polish ] = "Procedura podrzdna lub funkcyjna ju zostaa zdefiniowana $(ARG1)"; + Text[ japanese ] = "Sub܂Functionۼެ$(ARG1)͂łɒ`Ă܂"; + Text[ chinese_traditional ] = "wgwqFL{ΨƹL{$(ARG1)"; + Text[ arabic ] = " $(ARG1) "; + Text[ dutch ] = "Sub- of functieprocedure $(ARG1) reeds gedefinieerd"; + Text[ chinese_simplified ] = "Ѿ˷ֹ̻ $(ARG1)"; + Text[ greek ] = " (Sub) (Function) $(ARG1) "; + Text[ korean ] = " Ǵ Լ ν $(ARG1) ̹ Ǿֽϴ"; + Text[ turkish ] = "Alt yordam ya da ilev yordam $(ARG1) tanmlanm durumda"; + Text[ language_user1 ] = " "; + }; + String SbERR_LABEL_DEFINED & ERRCODE_RES_MASK + { + Text = "Label $(ARG1) bereits definiert" ; + Text [ ENGLISH ] = "Label $(ARG1) already defined" ; + Text [ norwegian ] = "Label $(ARG1) already defined" ; + Text [ italian ] = "Label $(ARG1) gi definita" ; + Text [ portuguese_brazilian ] = "Label $(ARG1) already defined" ; + Text [ portuguese ] = "Etiqueta $(ARG1) j foi definida" ; + Text [ french ] = "L'tiquette $(ARG1) est dj dfinie" ; + Text [ dutch ] = "Label $(ARG1) reeds gedefinieerd" ; + Text [ spanish ] = "La etiqueta $(ARG1) ya est definida" ; + Text [ danish ] = "Etiket $(ARG1) er allerede defineret" ; + Text [ swedish ] = "Etiketten $(ARG1) r redan definierad" ; + Text [ finnish ] = "Label $(ARG1) already defined" ; + Text [ english_us ] = "Label $(ARG1) already defined" ; + Text[ chinese_simplified ] = "Ѿ˱ $(ARG1)"; + Text[ russian ] = " $(ARG1) "; + Text[ polish ] = "Etykieta $(ARG1) zostaa ju zdefiniowana"; + Text[ japanese ] = "$(ARG1)͂łɒ`Ă܂"; + Text[ chinese_traditional ] = "wgwqFаO$(ARG1)"; + Text[ arabic ] = " $(ARG1) "; + Text[ dutch ] = "Label $(ARG1) reeds gedefinieerd"; + Text[ chinese_simplified ] = "Ѿ˱ $(ARG1)"; + Text[ greek ] = " $(ARG1) "; + Text[ korean ] = " $(ARG1) ̹ Ǿֽϴ."; + Text[ turkish ] = "Etiket $(ARG1) tanmlanm durumda"; + Text[ language_user1 ] = " "; + }; + String SbERR_UNDEF_VAR & ERRCODE_RES_MASK + { + Text = "Variable $(ARG1) nicht gefunden" ; + Text [ ENGLISH ] = "Variable $(ARG1) not found" ; + Text [ norwegian ] = "Variable $(ARG1) not found" ; + Text [ italian ] = "Variabile $(ARG1) non trovata" ; + Text [ portuguese_brazilian ] = "Variable $(ARG1) not found" ; + Text [ portuguese ] = "Varivel $(ARG1) no encontrada" ; + Text [ french ] = "Variable $(ARG1) introuvable" ; + Text [ dutch ] = "Variabele $(ARG1) niet gevonden" ; + Text [ spanish ] = "No se encontr la variable $(ARG1)" ; + Text [ danish ] = "Variabel $(ARG1) blev ikke fundet" ; + Text [ swedish ] = "Variabeln $(ARG1) hittades inte" ; + Text [ finnish ] = "Variable $(ARG1) not found" ; + Text [ english_us ] = "Variable $(ARG1) not found" ; + Text[ chinese_simplified ] = "ûҵ $(ARG1)"; + Text[ russian ] = " $(ARG1) "; + Text[ polish ] = "Zmiennej $(ARG1) nie znaleziono"; + Text[ japanese ] = "ϐ$(ARG1)͌܂"; + Text[ chinese_traditional ] = "Sܶq$(ARG1)"; + Text[ arabic ] = " $(ARG1) "; + Text[ dutch ] = "Variabele $(ARG1) niet gevonden"; + Text[ chinese_simplified ] = "ûҵ $(ARG1)"; + Text[ greek ] = " $(ARG1) "; + Text[ korean ] = " $(ARG1) ߰ߵ ʾҽϴ."; + Text[ turkish ] = "Deiken $(ARG1) bulunamad"; + Text[ language_user1 ] = " "; + }; + String SbERR_UNDEF_ARRAY & ERRCODE_RES_MASK + { + Text = "Array oder Prozedur $(ARG1) nicht gefunden" ; + Text [ ENGLISH ] = "Array or function $(ARG1) not found" ; + Text [ norwegian ] = "Array or function $(ARG1) not found" ; + Text [ italian ] = "Array o procedura $(ARG1) non trovata" ; + Text [ portuguese_brazilian ] = "Array or function $(ARG1) not found" ; + Text [ portuguese ] = "Matriz ou funo $(ARG1) no encontrados" ; + Text [ french ] = "Array ou procdure $(ARG1) introuvable" ; + Text [ dutch ] = "Array of procedure $(ARG1) niet gevonden" ; + Text [ spanish ] = "No se encontr la matriz o procedimiento $(ARG1)" ; + Text [ danish ] = "Array eller procedure $(ARG1) blev ikke fundet" ; + Text [ swedish ] = "Array eller procedur $(ARG1) hittades inte" ; + Text [ finnish ] = "Array or function $(ARG1) not found" ; + Text [ english_us ] = "Array or procedure $(ARG1) not found" ; + Text[ chinese_simplified ] = "ûҵ $(ARG1)"; + Text[ russian ] = " $(ARG1) "; + Text[ polish ] = "Tablicy lub procedury $(ARG1) nie znaleziono"; + Text[ japanese ] = "z܂ۼެ$(ARG1)͌܂"; + Text[ chinese_traditional ] = "SCιL{$(ARG1)"; + Text[ arabic ] = "$(ARG1) "; + Text[ dutch ] = "Array of procedure $(ARG1) niet gevonden"; + Text[ chinese_simplified ] = "ûҵ $(ARG1)"; + Text[ greek ] = " $(ARG1)"; + Text[ korean ] = "迭 Ǵ Լ $(ARG1) ߰ߵ ʾҽϴ. "; + Text[ turkish ] = "Dizi ya da yordam $(ARG1) bulunamad"; + Text[ language_user1 ] = " "; + }; + String SbERR_UNDEF_PROC & ERRCODE_RES_MASK + { + Text = "Procedure $(ARG1) nicht gefunden" ; + Text [ ENGLISH ] = "Procedure $(ARG1) not found" ; + Text [ norwegian ] = "Procedure $(ARG1) not found" ; + Text [ italian ] = "Procedura $(ARG1) non trovata" ; + Text [ portuguese_brazilian ] = "Procedure $(ARG1) not found" ; + Text [ portuguese ] = "Procedimento $(ARG1) no encontrado" ; + Text [ french ] = "Procdure $(ARG1) introuvable" ; + Text [ dutch ] = "Procedure $(ARG1) niet gevonden" ; + Text [ spanish ] = "No se encontr el procedimiento $(ARG1)" ; + Text [ danish ] = "Procedure $(ARG1) blev ikke fundet" ; + Text [ swedish ] = "Proceduren $(ARG1) hittades inte" ; + Text [ finnish ] = "Procedure $(ARG1) not found" ; + Text [ english_us ] = "Procedure $(ARG1) not found" ; + Text[ chinese_simplified ] = "ûҵ $(ARG1)"; + Text[ russian ] = " $(ARG1) "; + Text[ polish ] = "Procedury $(ARG1) nie znaleziono"; + Text[ japanese ] = "ۼެ$(ARG1)͌܂"; + Text[ chinese_traditional ] = "SL{$(ARG1)"; + Text[ arabic ] = "$(ARG1) "; + Text[ dutch ] = "Procedure $(ARG1) niet gevonden"; + Text[ chinese_simplified ] = "ûҵ $(ARG1)"; + Text[ greek ] = " $(ARG1) "; + Text[ korean ] = "ν $(ARG1) ߰ߵ ʾҽϴ."; + Text[ turkish ] = "Yordam $(ARG1) bulunamad"; + Text[ language_user1 ] = " "; + }; + String SbERR_UNDEF_LABEL & ERRCODE_RES_MASK + { + Text = "Label $(ARG1) undefiniert" ; + Text [ ENGLISH ] = "Label $(ARG1) undefined" ; + Text [ norwegian ] = "Label $(ARG1) undefined" ; + Text [ italian ] = "Label $(ARG1) non definita" ; + Text [ portuguese_brazilian ] = "Label $(ARG1) undefined" ; + Text [ portuguese ] = "Rtulo $(ARG1) indefinido" ; + Text [ french ] = "L'tiquette $(ARG1) n'est pas dfinie" ; + Text [ dutch ] = "Label $(ARG1) ongedefinieerd" ; + Text [ spanish ] = "La etiqueta $(ARG1) no est definida" ; + Text [ danish ] = "Etket $(ARG1) er udefineret" ; + Text [ swedish ] = "Etiketten $(ARG1) r odefinierad" ; + Text [ finnish ] = "Label $(ARG1) undefined" ; + Text [ english_us ] = "Label $(ARG1) undefined" ; + Text[ chinese_simplified ] = "δ $(ARG1)"; + Text[ russian ] = " $(ARG1) "; + Text[ polish ] = "Etykieta $(ARG1) nie jest zdefionowana"; + Text[ japanese ] = "$(ARG1)͒`Ă܂"; + Text[ chinese_traditional ] = "|wqаO$(ARG1)"; + Text[ arabic ] = " $(ARG1) "; + Text[ dutch ] = "Label $(ARG1) ongedefinieerd"; + Text[ chinese_simplified ] = "δ $(ARG1)"; + Text[ greek ] = " $(ARG1)"; + Text[ korean ] = " $(ARG1) ǵ ʾҽϴ."; + Text[ turkish ] = "Etiket $(ARG1) tanmlanmad"; + Text[ language_user1 ] = " "; + }; + String SbERR_UNDEF_TYPE & ERRCODE_RES_MASK + { + Text = "Unbekannter Datentyp $(ARG1)" ; + Text [ ENGLISH ] = "Unknown data type $(ARG1)" ; + Text [ norwegian ] = "Unknown data type $(ARG1)" ; + Text [ italian ] = "Tipo di dati $(ARG1) sconosciuto" ; + Text [ portuguese_brazilian ] = "Unknown data type $(ARG1)" ; + Text [ portuguese ] = "Tipo de dados $(ARG1) desconhecido" ; + Text [ french ] = "Type de donnes $(ARG1) inconnu" ; + Text [ dutch ] = "Onbekend gegevenstype $(ARG1)" ; + Text [ spanish ] = "Tipo de datos $(ARG1) desconocido" ; + Text [ danish ] = "Ukendt datatype $(ARG1)" ; + Text [ swedish ] = "Oknd datatyp $(ARG1)" ; + Text [ finnish ] = "Unknown data type $(ARG1)" ; + Text [ english_us ] = "Unknown data type $(ARG1)" ; + Text[ chinese_simplified ] = " $(ARG1)"; + Text[ russian ] = " $(ARG1)"; + Text[ polish ] = "Nieznany typ danych $(ARG1)"; + Text[ japanese ] = "sް̎$(ARG1)"; + Text[ chinese_traditional ] = " $(ARG1)"; + Text[ arabic ] = "$(ARG1) "; + Text[ dutch ] = "Onbekend gegevenstype $(ARG1)"; + Text[ chinese_simplified ] = " $(ARG1)"; + Text[ greek ] = " $(ARG1)"; + Text[ korean ] = "˷ Ÿ $(ARG1)"; + Text[ turkish ] = "Bilinmeyen veri tipi $(ARG1)"; + Text[ language_user1 ] = " "; + }; + String SbERR_BAD_EXIT & ERRCODE_RES_MASK + { + Text = "Exit $(ARG1) erwartet" ; + Text [ ENGLISH ] = "Exit $(ARG1) erwartet" ; + Text [ norwegian ] = "Exit $(ARG1) erwartet" ; + Text [ italian ] = "Exit $(ARG1) atteso" ; + Text [ portuguese_brazilian ] = "Exit $(ARG1) erwartet" ; + Text [ portuguese ] = "Sada de $(ARG1) esperada" ; + Text [ french ] = "Exit $(ARG1) requis" ; + Text [ dutch ] = "Exit $(ARG1) verwacht" ; + Text [ spanish ] = "Se requiere salida $(ARG1)" ; + Text [ danish ] = "Exit $(ARG1) forventes" ; + Text [ swedish ] = "Exit $(ARG1) frvntat" ; + Text [ finnish ] = "Exit $(ARG1) erwartet" ; + Text [ english_us ] = "Exit $(ARG1) expected" ; + Text[ chinese_simplified ] = "Ⱥ˳ $(ARG1)"; + Text[ russian ] = " $(ARG1)"; + Text[ polish ] = "Oczekiwany koniec $(ARG1)"; + Text[ japanese ] = "$(ARG1)̏IKvł"; + Text[ chinese_traditional ] = "hX$(ARG1)"; + Text[ arabic ] = " $(ARG1)"; + Text[ dutch ] = "Exit $(ARG1) verwacht"; + Text[ chinese_simplified ] = "Ⱥ˳ $(ARG1)"; + Text[ greek ] = " Exit $(ARG1)"; + Text[ korean ] = " $(ARG1)"; + Text[ turkish ] = "k $(ARG1) bekleniyor"; + Text[ language_user1 ] = " "; + }; + String SbERR_BAD_BLOCK & ERRCODE_RES_MASK + { + Text = "Noch offener Anweisungsblock: $(ARG1) fehlt" ; + Text [ ENGLISH ] = "Unterminated statement block: missing $(ARG1)" ; + Text [ norwegian ] = "Unterminated statement block: missing $(ARG1)" ; + Text [ italian ] = "Blocco di comandi ancora aperto: manca $(ARG1)" ; + Text [ portuguese_brazilian ] = "Unterminated statement block: missing $(ARG1)" ; + Text [ portuguese ] = "Bloco de instrues ainda incompleto: falta $(ARG1)" ; + Text [ french ] = "Bloc d'instructions encore ouvert : $(ARG1) fait dfaut" ; + Text [ dutch ] = "Nog open aanwijzingenblok $(ARG1) ontbreekt" ; + Text [ spanish ] = "Bloque de instrucciones incompleto: falta $(ARG1) " ; + Text [ danish ] = "Endnu ben instruktionsblok: $(ARG1) mangler" ; + Text [ swedish ] = "Icke avslutat statementblock: $(ARG1) saknas" ; + Text [ finnish ] = "Unterminated statement block: missing $(ARG1)" ; + Text [ english_us ] = "Statement block still open: $(ARG1) missing" ; + Text[ chinese_simplified ] = "ȱδķֳ飺$(ARG1)"; + Text[ russian ] = " : $(ARG1)"; + Text[ polish ] = "Jeszcze otwarty blok instrukcji: brak $(ARG1)"; + Text[ japanese ] = "܂J܂܂̎wۯ: $(ARG1)܂"; + Text[ chinese_traditional ] = "ٯʤ֥{ǶG$(ARG1)"; + Text[ arabic ] = " : $(ARG1) "; + Text[ dutch ] = "Nog open aanwijzingenblok $(ARG1) ontbreekt"; + Text[ chinese_simplified ] = "ȱδķֳ飺$(ARG1)"; + Text[ greek ] = " : $(ARG1) ."; + Text[ korean ] = " ֽϴ. :$(ARG1) ϴ."; + Text[ turkish ] = "Ak deyim bloku: $(ARG1) eksik"; + Text[ language_user1 ] = " "; + }; + String SbERR_BAD_BRACKETS & ERRCODE_RES_MASK + { + Text = "Fehler in Klammerschachtelung" ; + Text [ ENGLISH ] = "Parentheses do not match" ; + Text [ norwegian ] = "Parentheses do not match" ; + Text [ italian ] = "Errore nelle parentesi impostate" ; + Text [ portuguese_brazilian ] = "Parentheses do not match" ; + Text [ portuguese ] = "Erro nos parnteses" ; + Text [ french ] = "Erreur de parenthses" ; + Text [ dutch ] = "Fout in het plaatsen van haakjes" ; + Text [ spanish ] = "Los parntesis no coinciden" ; + Text [ danish ] = "Fejl i parentesstrukturen" ; + Text [ swedish ] = "Parentesfel" ; + Text [ finnish ] = "Parentheses do not match" ; + Text [ english_us ] = "Parentheses do not match" ; + Text[ chinese_simplified ] = ""; + Text[ russian ] = " "; + Text[ polish ] = "Bd w ustawianiu nawiasw"; + Text[ japanese ] = "ʕt̴װ"; + Text[ chinese_traditional ] = "Aտ~"; + Text[ arabic ] = " "; + Text[ dutch ] = "Fout in het plaatsen van haakjes"; + Text[ chinese_simplified ] = ""; + Text[ greek ] = " "; + Text[ korean ] = "ȣ ʽϴ."; + Text[ turkish ] = "Ayralar uyumsuz"; + Text[ language_user1 ] = " "; + }; + String SbERR_BAD_DECLARATION & ERRCODE_RES_MASK + { + Text = "Symbol $(ARG1) bereits anders definiert" ; + Text [ ENGLISH ] = "Symbol $(ARG1) defined differently" ; + Text [ norwegian ] = "Symbol $(ARG1) defined differently" ; + Text [ italian ] = "Simbolo $(ARG1) gi definito diversamente" ; + Text [ portuguese_brazilian ] = "Symbol $(ARG1) defined differently" ; + Text [ portuguese ] = "O smbolo $(ARG1) j tem outra definio" ; + Text [ french ] = "Le symbole $(ARG1) a dj reu une autre dfinition" ; + Text [ dutch ] = "Symbool $(ARG1) reeds anders gedefinieerd" ; + Text [ spanish ] = "El smbolo $(ARG1) ya se defini de otra manera" ; + Text [ danish ] = "Symbolet $(ARG1) er allerede defineret anderledes" ; + Text [ swedish ] = "Symbolen $(ARG1) r redan annorlunda definierad" ; + Text [ finnish ] = "Symbol $(ARG1) defined differently" ; + Text [ english_us ] = "Symbol $(ARG1) already defined differently" ; + Text[ chinese_simplified ] = "Ѿжͼ $(ARG1)"; + Text[ russian ] = " $(ARG1) -"; + Text[ polish ] = "Symbol $(ARG1) zosta ju inaczej zdefiniowany"; + Text[ japanese ] = "$(ARG1)͂łɕʂɒ`Ă܂"; + Text[ chinese_traditional ] = "wgtwqFϥ$(ARG1)"; + Text[ arabic ] = " $(ARG1) "; + Text[ dutch ] = "Symbool $(ARG1) reeds anders gedefinieerd"; + Text[ chinese_simplified ] = "Ѿжͼ $(ARG1)"; + Text[ greek ] = " $(ARG1) "; + Text[ korean ] = "ȣ$(ARG1) ̹ ٸ ǵǾ ֽϴ."; + Text[ turkish ] = "Simge $(ARG1) farkl bir biimde tanmlanm durumda"; + Text[ language_user1 ] = " "; + }; + String SbERR_BAD_PARAMETERS & ERRCODE_RES_MASK + { + Text = "Parameter passen nicht zu Prozedur" ; + Text [ ENGLISH ] = "Parameters do not match" ; + Text [ norwegian ] = "Parameters do not match" ; + Text [ italian ] = "Le parentesi non corrispondono alla procedura" ; + Text [ portuguese_brazilian ] = "Parameters do not match" ; + Text [ portuguese ] = "Os parmetros no correspondem ao procedimento" ; + Text [ french ] = "Les paramtres ne correspondent pas la procdure" ; + Text [ dutch ] = "Parameters passen niet bij procedure" ; + Text [ spanish ] = "Los parmetros no coinciden con el procedimiento" ; + Text [ danish ] = "Parametrene svarer ikke til proceduren" ; + Text [ swedish ] = "Parametern passar inte till proceduren" ; + Text [ finnish ] = "Parameters do not match" ; + Text [ english_us ] = "Parameters do not correspond to procedure" ; + Text[ chinese_simplified ] = "̲ƥ"; + Text[ russian ] = " "; + Text[ polish ] = "Parametry nie odpowiadaj procedurze"; + Text[ japanese ] = "Ұۼެɍ܂"; + Text[ chinese_traditional ] = "UܶqML{ǰt"; + Text[ arabic ] = " "; + Text[ dutch ] = "Parameters passen niet bij procedure"; + Text[ chinese_simplified ] = "̲ƥ"; + Text[ greek ] = " "; + Text[ korean ] = "ĶͰ ν ʽϴ."; + Text[ turkish ] = "Parametreler yordama uymuyor"; + Text[ language_user1 ] = " "; + }; + String SbERR_BAD_CHAR_IN_NUMBER & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Ungltiges Zeichen in Zahl : Ungltiges Zeichen in Zahl */ + Text = "Ungltiges Zeichen in Zahl" ; + Text [ ENGLISH ] = "Bad character in number" ; + Text [ norwegian ] = "Bad character in number" ; + Text [ italian ] = "Carattere non valido nel numero" ; + Text [ portuguese_brazilian ] = "Bad character in number" ; + Text [ portuguese ] = "Caracter incorrecto no nmero" ; + Text [ french ] = "Le nombre contient un caractre incorrect" ; + Text [ dutch ] = "Ongeldig teken in getal" ; + Text [ spanish ] = "Carcter incorrecto en el nmero" ; + Text [ danish ] = "Ugyldigt tegn i tallet" ; + Text [ swedish ] = "Ogiltigt tecken i talet" ; + Text [ finnish ] = "Bad character in number" ; + Text [ english_us ] = "Invalid character in number" ; + Text[ chinese_simplified ] = "ںЧַ"; + Text[ russian ] = " "; + Text[ polish ] = "Nieprawidowy znak w liczbie"; + Text[ japanese ] = "ɖȕ"; + Text[ chinese_traditional ] = "bƦrtLĪr"; + Text[ arabic ] = " "; + Text[ dutch ] = "Ongeldig teken in getal"; + Text[ chinese_simplified ] = "ںЧַ"; + Text[ greek ] = " "; + Text[ korean ] = "ڿ ȿ "; + Text[ turkish ] = "Numara geersiz bir karakter ieriyor"; + Text[ language_user1 ] = " "; + }; + String SbERR_MUST_HAVE_DIMS & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Array mu dimensioniert werden : Array mu dimensioniert werden */ + Text = "Array muss dimensioniert werden" ; + Text [ ENGLISH ] = "Array needs dimensioning" ; + Text [ norwegian ] = "Array needs dimensioning" ; + Text [ italian ] = "L'array deve essere dimensionato" ; + Text [ portuguese_brazilian ] = "Array needs dimensioning" ; + Text [ portuguese ] = "Necessrio dimensionar matriz" ; + Text [ french ] = "Vous devez dimensionner l'Array" ; + Text [ dutch ] = "Array moet worden gedimensioneerd" ; + Text [ spanish ] = "Hay que dimensionar el array" ; + Text [ danish ] = "Array skal dimensioneres" ; + Text [ swedish ] = "Array mste dimensioneras" ; + Text [ finnish ] = "Array needs dimensioning" ; + Text [ english_us ] = "Array must be dimensioned" ; + Text[ chinese_simplified ] = "Ϊ鶨߶"; + Text[ russian ] = " "; + Text[ polish ] = "Macierz naley zwymiarowa"; + Text[ japanese ] = "z͎ȂȂ܂"; + Text[ chinese_traditional ] = "Cwث"; + Text[ arabic ] = " "; + Text[ dutch ] = "Array moet worden gedimensioneerd"; + Text[ chinese_simplified ] = "Ϊ鶨߶"; + Text[ greek ] = " "; + Text[ korean ] = "迭 ݵ ġ ־Ѵ."; + Text[ turkish ] = "Dizinin boyutlandrlmas gerekir"; + Text[ language_user1 ] = " "; + }; + String SbERR_NO_IF & ERRCODE_RES_MASK + { + Text = "Else/Endif ohne If" ; + Text [ ENGLISH ] = "Else/Endif without If" ; + Text [ norwegian ] = "Else/Endif without If" ; + Text [ italian ] = "Else/Endif senza If" ; + Text [ portuguese_brazilian ] = "Else/Endif without If" ; + Text [ portuguese ] = "Else/Endif sem If" ; + Text [ french ] = "Else/Endif sans If" ; + Text [ dutch ] = "Else/Endif zonder If" ; + Text [ spanish ] = "Else/Endif sin If" ; + Text [ danish ] = "Else/Endif uden If" ; + Text [ swedish ] = "Else/Endif utan If" ; + Text [ finnish ] = "Else/Endif without If" ; + Text [ english_us ] = "Else/Endif without If" ; + Text[ chinese_simplified ] = "Else/Endif If"; + Text[ russian ] = "Else/Endif If"; + Text[ polish ] = "Else/Endif bez If"; + Text[ japanese ] = "Else/Endif without If"; + Text[ chinese_traditional ] = "Else/Endif a If"; + Text[ arabic ] = "If Else/Endif"; + Text[ dutch ] = "Else/Endif zonder If"; + Text[ chinese_simplified ] = "Else/Endif If"; + Text[ greek ] = "Else/Endif If"; + Text[ korean ] = "IF ELSE/ELSEIF"; + Text[ turkish ] = "If olmadan Else/Endif"; + Text[ language_user1 ] = " "; + }; + String SbERR_NOT_IN_SUBR & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? $(ARG1) innerhalb einer Prozedur unzulssig : $(ARG1) innerhalb einer Prozedur unzulssig */ + Text = "$(ARG1) innerhalb einer Prozedur unzulssig" ; + Text [ ENGLISH ] = "$(ARG1) not allowed within a procedure" ; + Text [ norwegian ] = "$(ARG1) not allowed within a procedure" ; + Text [ italian ] = "$(ARG1) non ammesso all'interno di una procedura" ; + Text [ portuguese_brazilian ] = "$(ARG1) not allowed within a procedure" ; + Text [ portuguese ] = "$(ARG1) no permitido dentro de um procedimento" ; + Text [ french ] = "$(ARG1) interdit dans une procdure" ; + Text [ dutch ] = "$(ARG1) binnen een procedure niet toegestaan" ; + Text [ spanish ] = "$(ARG1) no est permitido dentro de un proceso" ; + Text [ danish ] = "$(ARG1) er ikke tilladt indenfor en procedure" ; + Text [ swedish ] = "$(ARG1) inte tilltet inuti en procedur" ; + Text [ finnish ] = "$(ARG1) not allowed within a procedure" ; + Text [ english_us ] = "$(ARG1) not allowed within a procedure" ; + Text[ chinese_simplified ] = "һڲ $(ARG1)"; + Text[ russian ] = "$(ARG1) "; + Text[ polish ] = "$(ARG1) niedopuszczalny w procedurze"; + Text[ japanese ] = "$(ARG1)ۼެł͋܂"; + Text[ chinese_traditional ] = "b@ӹL{\\$(ARG1)"; + Text[ arabic ] = " $(ARG1)"; + Text[ dutch ] = "$(ARG1) binnen een procedure niet toegestaan"; + Text[ chinese_simplified ] = "һڲ $(ARG1)"; + Text[ greek ] = "$(ARG1) "; + Text[ korean ] = "$(ARG1) ν ̿ ʽϴ."; + Text[ turkish ] = "Yordamda $(ARG1) geerli deil"; + Text[ language_user1 ] = " "; + }; + String SbERR_NOT_IN_MAIN & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? $(ARG1) auerhalb einer Prozedur unzulssig : $(ARG1) auerhalb einer Prozedur unzulssig */ + Text = "$(ARG1) auerhalb einer Prozedur unzulssig" ; + Text [ ENGLISH ] = "$(ARG1) not allowed outside a procedure" ; + Text [ norwegian ] = "$(ARG1) not allowed outside a procedure" ; + Text [ italian ] = "$(ARG1) non permesso al di fuori di una procedura" ; + Text [ portuguese_brazilian ] = "$(ARG1) not allowed outside a procedure" ; + Text [ portuguese ] = "$(ARG1) no permitido fora de um procedimento" ; + Text [ french ] = "$(ARG1) interdit en dehors d'une procdure" ; + Text [ dutch ] = "$(ARG1) buiten een procedure niet toegestaan" ; + Text [ spanish ] = "$(ARG1) no est permitido fuera de un proceso" ; + Text [ danish ] = "$(ARG1) er ikke tilladt udenfor en procedure" ; + Text [ swedish ] = "$(ARG1) inte tilltet utanfr en procedur" ; + Text [ finnish ] = "$(ARG1) not allowed outside a procedure" ; + Text [ english_us ] = "$(ARG1) not allowed outside a procedure" ; + Text[ chinese_simplified ] = "һⲻ $(ARG1)"; + Text[ russian ] = "$(ARG1) "; + Text[ polish ] = "$(ARG1) niedopuszczalny poza procedur"; + Text[ japanese ] = "$(ARG1)ۼެOł͋܂"; + Text[ chinese_traditional ] = "b@ӹL{~\\$(ARG1)"; + Text[ arabic ] = " $(ARG1)"; + Text[ dutch ] = "$(ARG1) buiten een procedure niet toegestaan"; + Text[ chinese_simplified ] = "һⲻ $(ARG1)"; + Text[ greek ] = "$(ARG1) "; + Text[ korean ] = "$(ARG1) νۿ ʽϴ."; + Text[ turkish ] = "Yordam dnda $(ARG1) geerli deil"; + Text[ language_user1 ] = " "; + }; + String SbERR_WRONG_DIMS & ERRCODE_RES_MASK + { + Text = "Dimensionsangaben passen nicht zueinander" ; + Text [ ENGLISH ] = "Dimensions do not match" ; + Text [ norwegian ] = "Dimensions do not match" ; + Text [ italian ] = "I dati sulle dimensioni non sono compatibili tra loro" ; + Text [ portuguese_brazilian ] = "Dimensions do not match" ; + Text [ portuguese ] = "As dimenses indicadas no combinam" ; + Text [ french ] = "Les dimensions indiques ne concordent pas" ; + Text [ dutch ] = "Aangegeven afmetingen passen niet bij elkaar" ; + Text [ spanish ] = "Las dimensiones no coinciden" ; + Text [ danish ] = "Dimensionsangivelserne svarer ikke til hinanden" ; + Text [ swedish ] = "Dimensionsspecificeringarna stmmer inte verens" ; + Text [ finnish ] = "Dimensions do not match" ; + Text [ english_us ] = "Dimension specifications do not match" ; + Text[ chinese_simplified ] = "߶ȵ趨ƥ"; + Text[ russian ] = " "; + Text[ polish ] = "Dane wymiarowe nie s zgodne"; + Text[ japanese ] = "̎w͍Ă܂"; + Text[ chinese_traditional ] = "wثת]wǰt"; + Text[ arabic ] = " "; + Text[ dutch ] = "Aangegeven afmetingen passen niet bij elkaar"; + Text[ chinese_simplified ] = "߶ȵ趨ƥ"; + Text[ greek ] = " ."; + Text[ korean ] = " ǰ ʽϴ."; + Text[ turkish ] = "Boyut verileri arasnda uyumazlk"; + Text[ language_user1 ] = " "; + }; + String SbERR_BAD_OPTION & ERRCODE_RES_MASK + { + Text = "Unbekannte Option: $(ARG1)" ; + Text [ ENGLISH ] = "Unknown option: $(ARG1)" ; + Text [ norwegian ] = "Unknown option: $(ARG1)" ; + Text [ italian ] = "Opzione sconosciuta: $(ARG1)" ; + Text [ portuguese_brazilian ] = "Unknown option: $(ARG1)" ; + Text [ portuguese ] = "Opo desconhecida: $(ARG1)" ; + Text [ french ] = "Option inconnue : $(ARG1)" ; + Text [ dutch ] = "Onbekende optie: $(ARG1)" ; + Text [ spanish ] = "Opcin desconocida: $(ARG1)" ; + Text [ danish ] = "Ukendt alternativ: $(ARG1)" ; + Text [ swedish ] = "Obekant alternativ: $(ARG1)" ; + Text [ finnish ] = "Unknown option: $(ARG1)" ; + Text [ english_us ] = "Unknown option: $(ARG1)" ; + Text[ chinese_simplified ] = "ѡ$(ARG1)"; + Text[ russian ] = " : $(ARG1)"; + Text[ polish ] = "Nieznana opcja: $(ARG1)"; + Text[ japanese ] = "sȵ: $(ARG1)"; + Text[ chinese_traditional ] = "ﶵG$(ARG1)"; + Text[ arabic ] = "$(ARG1) : "; + Text[ dutch ] = "Onbekende optie: $(ARG1)"; + Text[ chinese_simplified ] = "ѡ$(ARG1)"; + Text[ greek ] = " : $(ARG1)"; + Text[ korean ] = "˷ ɼ:$(ARG1)"; + Text[ turkish ] = "Bilinmeyen seenek: $(ARG1)"; + Text[ language_user1 ] = " "; + }; + String SbERR_CONSTANT_REDECLARED & ERRCODE_RES_MASK + { + Text = "Konstante $(ARG1) neu definiert" ; + Text [ ENGLISH ] = "Constant $(ARG1) redeclared" ; + Text [ norwegian ] = "Constant $(ARG1) redeclared" ; + Text [ italian ] = "Costante $(ARG1) ridefinita" ; + Text [ portuguese_brazilian ] = "Constant $(ARG1) redeclared" ; + Text [ portuguese ] = "Constante $(ARG1) redefinida" ; + Text [ french ] = "La constante $(ARG1) a t redfinie" ; + Text [ dutch ] = "Constante $(ARG1) opnieuw gedefinieerd" ; + Text [ spanish ] = "Constante $(ARG1) redefinida" ; + Text [ danish ] = "Konstanten $(ARG1) er nydefineret" ; + Text [ swedish ] = "Konstanten $(ARG1) r nydefinierad" ; + Text [ finnish ] = "Constant $(ARG1) redeclared" ; + Text [ english_us ] = "Constant $(ARG1) redefined" ; + Text[ chinese_simplified ] = "¶峣 $(ARG1)"; + Text[ russian ] = " $(ARG1) "; + Text[ polish ] = "Staa $(ARG1) ponownie zdefiniowana"; + Text[ japanese ] = "萔$(ARG1)͍Ē`܂"; + Text[ chinese_traditional ] = "swq`$(ARG1)"; + Text[ arabic ] = "$(ARG1) "; + Text[ dutch ] = "Constante $(ARG1) opnieuw gedefinieerd"; + Text[ chinese_simplified ] = "¶峣 $(ARG1)"; + Text[ greek ] = " $(ARG1)"; + Text[ korean ] = " ǵ $(ARG1)"; + Text[ turkish ] = "Sabit $(ARG1) yeniden tanmland"; + Text[ language_user1 ] = " "; + }; + String SbERR_PROG_TOO_LARGE & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Programm ist zu gro : Programm ist zu gro */ + Text = "Programm ist zu gro" ; + Text [ ENGLISH ] = "Program is too large" ; + Text [ norwegian ] = "Program is too large" ; + Text [ italian ] = "Il programma troppo esteso" ; + Text [ portuguese_brazilian ] = "Program is too large" ; + Text [ portuguese ] = "O programa demasiado extenso" ; + Text [ french ] = "Le programme est trop volumineux" ; + Text [ dutch ] = "Programma is te groot" ; + Text [ spanish ] = "El programa es demasiado grande" ; + Text [ danish ] = "Programmet er for stort" ; + Text [ swedish ] = "Programmet r fr stort" ; + Text [ finnish ] = "Program is too large" ; + Text [ english_us ] = "Program too large" ; + Text[ chinese_simplified ] = "̫"; + Text[ russian ] = " "; + Text[ polish ] = "Program jest za duy"; + Text[ japanese ] = "۸т͑傫܂"; + Text[ chinese_traditional ] = "{Ӥj"; + Text[ arabic ] = " "; + Text[ dutch ] = "Programma is te groot"; + Text[ chinese_simplified ] = "̫"; + Text[ greek ] = " "; + Text[ korean ] = "α̳ʹ Ůϴ."; + Text[ turkish ] = "Program ok byk"; + Text[ language_user1 ] = " "; + }; + String SbERR_NO_STRINGS_ARRAYS & ERRCODE_RES_MASK + { + /* ### ACHTUNG: Neuer Text in Resource? Strings oder Arrays unzulssig : Strings oder Arrays unzulssig */ + Text = "Strings oder Arrays unzulssig" ; + Text [ ENGLISH ] = "Sorry, no strings or arrays allowed" ; + Text [ norwegian ] = "Sorry, no strings or arrays allowed" ; + Text [ italian ] = "String o array non validi" ; + Text [ portuguese_brazilian ] = "Sorry, no strings or arrays allowed" ; + Text [ portuguese ] = "Sries de caracteres ou matrizes no permitidas" ; + Text [ french ] = "Strings ou Arrays inadmissibles" ; + Text [ dutch ] = "Strings of arrays niet toegestaan" ; + Text [ spanish ] = "No estn permitidos strings o arrays" ; + Text [ danish ] = "Strenge eller arrays er ikke tilladte" ; + Text [ swedish ] = "Strings eller arrays ej tilltna" ; + Text [ finnish ] = "Sorry, no strings or arrays allowed" ; + Text [ english_us ] = "Strings or arrays not permitted" ; + Text[ chinese_simplified ] = "ִ"; + Text[ russian ] = " "; + Text[ polish ] = "Ciagi znakw lub macierze niedopuszczalne"; + Text[ japanese ] = "܂͔z͋܂"; + Text[ chinese_traditional ] = "\\rΦC"; + Text[ arabic ] = " "; + Text[ dutch ] = "Strings of arrays niet toegestaan"; + Text[ chinese_simplified ] = "ִ"; + Text[ greek ] = " "; + Text[ korean ] = " Ǵ 迭 ʾҽϴ."; + Text[ turkish ] = "Dizilimler ya da diziler geerli deil"; + Text[ language_user1 ] = " "; + }; +#ifdef VBSCRIPT_TEST + String ERRCODE_BASIC_NOT_IN_VBSCRIPT & ERRCODE_RES_MASK + { + Text = "In VBScript nicht enthalten" ; + Text [ ENGLISH ] = "Not implemented in VBScript" ; + Text [ norwegian ] = "Not implemented in VBScript" ; + Text [ italian ] = "Non contenuto nello script VB" ; + Text [ portuguese_brazilian ] = "Not implemented in VBScript" ; + Text [ portuguese ] = "No contido no Script VB" ; + Text [ french ] = "Pas contenu dans le VBScript" ; + Text [ dutch ] = "Bevindt zich niet in VBScript" ; + Text [ spanish ] = "No est contenido en el script VB" ; + Text [ danish ] = "Ikke indeholdt i VB-script" ; + Text [ swedish ] = "Innefattas inte i VBScript" ; + Text [ finnish ] = "Not implemented in VBScript" ; + Text [ english_us ] = "Not contained in VB script" ; + Text[ chinese_simplified ] = "ûа VB script "; + Text[ russian ] = " VBScript "; + Text[ polish ] = "Nie zawarte w VBScript"; + Text[ japanese ] = "VBScriptɊ܂܂Ă܂"; + Text[ chinese_traditional ] = "S]tbVB script"; + Text[ arabic ] = "VB script "; + Text[ dutch ] = "Bevindt zich niet in VBScript"; + Text[ chinese_simplified ] = "ûа VB script "; + Text[ greek ] = " VB script"; + Text[ korean ] = "VB ũƮ ʽϴ."; + Text[ turkish ] = "VBScript'te mevcut deil"; + Text[ language_user1 ] = " "; + }; +#endif +}; + // Hinweis: IDS_SBERR_TERMINATED = IDS_SBERR_START+2000. +String IDS_SBERR_TERMINATED +{ + Text = "Das laufende Makro wurde unterbrochen" ; + Text [ ENGLISH ] = "Stopped currently running macro" ; + Text [ norwegian ] = "Stopped currently running macro" ; + Text [ italian ] = "La macro in corso stata interrotta" ; + Text [ portuguese_brazilian ] = "Stopped currently running macro" ; + Text [ portuguese ] = "A macro em execuo foi cancelada" ; + Text [ french ] = "La macro en cours a t interrompue" ; + Text [ dutch ] = "Actuele macro werd onderbroken" ; + Text [ spanish ] = "Se ha interrumpido la macro activa" ; + Text [ danish ] = "Den aktuelle makro blev afbrudt" ; + Text [ swedish ] = "Det aktuella makrot avbrts" ; + Text [ finnish ] = "Stopped currently running macro" ; + Text [ english_us ] = "The macro running has been interrupted" ; + Text[ chinese_simplified ] = "жкꡣ"; + Text[ russian ] = " "; + Text[ polish ] = "Wykonywane makro zostao przerwane"; + Text[ japanese ] = "ϸۍƂf܂"; + Text[ chinese_traditional ] = "_B楨C"; + Text[ arabic ] = " "; + Text[ dutch ] = "Actuele macro werd onderbroken"; + Text[ chinese_simplified ] = "жкꡣ"; + Text[ greek ] = " "; + Text[ korean ] = "ũ ߴܵǾϴ."; + Text[ turkish ] = "Yrtlen makro kesildi"; + Text[ language_user1 ] = " "; +}; +String IDS_SBERR_STOREREF +{ + Text = "Referenz wird nicht gespeichert: "; + Text [ italian ] = "Il riferimento non viene salvato: "; + Text [ portuguese_brazilian ] = "reference will not be saved: "; + Text [ portuguese ] = "A referncia no ser guardada: "; + Text [ danish ] = "Referencen bliver ikke gemt: "; + Text [ french ] = "Impossible d'enregistrer la rfrence : "; + Text [ swedish ] = "Referens sparas inte: "; + Text [ dutch ] = "Verwijzing wordt niet opgeslagen: "; + Text [ spanish ] = "No se guardar la referencia: "; + Text [ english_us ] = "Reference will not be saved: "; + Text[ chinese_simplified ] = ": "; + Text[ language_user1 ] = " "; + Text[ russian ] = " : "; + Text[ polish ] = "Odwoanie nie zostao zapisane: "; + Text[ japanese ] = "QƂ͕ۑ܂: "; + Text[ chinese_traditional ] = "xsѷӡG "; + Text[ arabic ] = ": "; + Text[ dutch ] = "Verwijzing wordt niet opgeslagen: "; + Text[ chinese_simplified ] = ": "; + Text[ greek ] = " : "; + Text[ korean ] = " ʾҽϴ. "; + Text[ turkish ] = "Referans kaydedilmeyecek: "; +#if defined( MAC ) || defined( OS2 ) + Text = "Referenz wird nicht gesichert: " ; +#else + Text = "Referenz wird nicht gespeichert: " ; +#endif + Text [ ENGLISH ] = "reference will not be saved: " ; + Text [ norwegian ] = "reference will not be saved: " ; + Text [ italian ] = "Il riferimento non viene salvato: " ; + Text [ portuguese_brazilian ] = "reference will not be saved: " ; + Text [ portuguese ] = "A referncia no ser guardada: " ; + Text [ french ] = "Rfrence non enregistre : " ; + Text [ dutch ] = "Verwijzing wordt niet opgeslagen: " ; + Text [ spanish ] = "No se guardar la referencia: " ; + Text [ danish ] = "Referencen bliver ikke gemt: " ; + Text [ swedish ] = "Referens sparas inte: " ; + Text [ finnish ] = "reference will not be saved: " ; + Text [ english_us ] = "Reference will not be saved: " ; + Text = "Referenz wird nicht gespeichert: " ; +}; +String ERRCODE_BASMGR_LIBLOAD & ERRCODE_RES_MASK +{ + /* ### ACHTUNG: Neuer Text in Resource? Fehler beim Laden der Bibliothek '$(ARG1)' : Fehler beim Laden der Bibliothek ''$(ARG1)'' */ + /* ### ACHTUNG: Neuer Text in Resource? Fehler beim Laden der Bibliothek '$(ARG1)' : Fehler beim Laden der Bibliothek ''$(ARG1) */ + /* ### ACHTUNG: Neuer Text in Resource? Fehler beim Laden der Bibliothek '$(ARG1)' : Fehler beim Laden der Bibliothek ''$(ARG1) */ + /* ### ACHTUNG: Neuer Text in Resource? Fehler beim Laden der Bibliothek '$(ARG1)' : Fehler beim Laden der Bibliothek ''$(ARG1)'' */ + Text = "Fehler beim Laden der Bibliothek '$(ARG1)'" ; + Text [ ENGLISH ] = "Fehler beim Laden der Bibliothek '$(ARG1)'" ; + Text [ english_us ] = "Error loading library '$(ARG1)'" ; + Text [ italian ] = "Errore nel caricare la library '$(ARG1)'" ; + Text [ spanish ] = "Error al cargar la biblioteca '$(ARG1)'" ; + Text [ french ] = "Erreur lors du chargement de la bibliothque '$(ARG1)'" ; + Text [ dutch ] = "Fout bij laden van bibliotheek '$(ARG1)'" ; + Text [ swedish ] = "Fel vid laddning av bibliotek '$(ARG1)'" ; + Text [ danish ] = "Fejl ved indlsning af biblioteket '$(ARG1)'" ; + Text [ portuguese_brazilian ] = "Fehler beim Laden der Bibliothek '$(ARG1)" ; + Text [ portuguese ] = "Erro ao carregar a biblioteca '$(ARG1)" ; + Text[ chinese_simplified ] = "װؿʱ'$(ARG1)'"; + Text[ russian ] = " '$(ARG1)'"; + Text[ polish ] = "Bd przy adowaniu biblioteki '$(ARG1)'"; + Text[ japanese ] = "ײ'$(ARG1)'̓ǂݍ݂̍ۂ̴װ"; + Text[ chinese_traditional ] = "˸{wɵoͿ~'$(ARG1)'"; + Text[ arabic ] = "'$(ARG1)' "; + Text[ dutch ] = "Fout bij laden van bibliotheek '$(ARG1)'"; + Text[ chinese_simplified ] = "װؿʱ'$(ARG1)'"; + Text[ greek ] = " '$(ARG1)'"; + Text[ korean ] = "̺귯 $(ARG1) ε "; + Text[ turkish ] = "Kitapl ykleme srasnda hata '$(ARG1)'"; + Text[ language_user1 ] = " "; +}; +String ERRCODE_BASMGR_LIBSAVE & ERRCODE_RES_MASK +{ + /* ### ACHTUNG: Neuer Text in Resource? Fehler beim Speichern der Bibliothek: '$(ARG1)' : Fehler beim Speichern der Bibliothek: ''$(ARG1)'' */ + /* ### ACHTUNG: Neuer Text in Resource? Fehler beim Speichern der Bibliothek: '$(ARG1)' : Fehler beim Speichern der Bibliothek: ''$(ARG1) */ + /* ### ACHTUNG: Neuer Text in Resource? Fehler beim Speichern der Bibliothek: '$(ARG1)' : Fehler beim Speichern der Bibliothek: ''$(ARG1) */ + /* ### ACHTUNG: Neuer Text in Resource? Fehler beim Speichern der Bibliothek: '$(ARG1)' : Fehler beim Speichern der Bibliothek: ''$(ARG1)'' */ + Text = "Fehler beim Speichern der Bibliothek: '$(ARG1)'" ; + Text [ ENGLISH ] = "Fehler beim Speichern der Bibliothek: '$(ARG1)'" ; + Text [ dutch ] = "Fout bij het opslaan van bibliotheek: '$(ARG1)'" ; + Text [ english_us ] = "Error saving library: '$(ARG1)'" ; + Text [ italian ] = "Errore nel salvare la library: '$(ARG1)'" ; + Text [ spanish ] = "Error al guardar la biblioteca: '$(ARG1)'" ; + Text [ french ] = "Erreur lors de l'enregistrement de la bibliothque : '$(ARG1)'" ; + Text [ swedish ] = "Fel vid sparandet av bibliotek: '$(ARG1)'" ; + Text [ danish ] = "Fejl under forsg p at gemme biblioteket: '$(ARG1)'" ; + Text [ portuguese ] = "Erro ao guardar a biblioteca: '$(ARG1)" ; + Text [ portuguese_brazilian ] = "Fehler beim Speichern der Bibliothek: '$(ARG1)" ; + Text[ chinese_simplified ] = "̿ʱ '$(ARG1)'"; + Text[ russian ] = " : '$(ARG1)'"; + Text[ polish ] = "Bd przy zapisie biblioteki '$(ARG1)'"; + Text[ japanese ] = "ײ̕ۑ̍ۂ̴װ: '$(ARG1)'"; + Text[ chinese_traditional ] = "xs{wɵoͿ~'$(ARG1)'"; + Text[ arabic ] = "'$(ARG1)' : "; + Text[ dutch ] = "Fout bij het opslaan van bibliotheek: '$(ARG1)'"; + Text[ chinese_simplified ] = "̿ʱ '$(ARG1)'"; + Text[ greek ] = " : '$(ARG1)'"; + Text[ korean ] = "̺귯 $(ARG1) "; + Text[ turkish ] = "Kitapl kaydetme srasnda hata: '$(ARG1)'"; + Text[ language_user1 ] = " "; +}; +String ERRCODE_BASMGR_MGROPEN & ERRCODE_RES_MASK +{ + /* ### ACHTUNG: Neuer Text in Resource? Das BASIC aus der Datei '$(ARG1)' konnte nicht initialisiert werden : Das BASIC aus der Datei ''$(ARG1)'' konnte nicht initialisiert werden */ + /* ### ACHTUNG: Neuer Text in Resource? Das BASIC aus der Datei '$(ARG1)' konnte nicht initialisiert werden : Das BASIC aus der Datei ''$(ARG1)'' konnte nicht initialisiert werden */ + /* ### ACHTUNG: Neuer Text in Resource? Das BASIC aus der Datei '$(ARG1)' konnte nicht initialisiert werden : Das BASIC aus der Datei ''$(ARG1)'' konnte nicht initialisiert werden */ + /* ### ACHTUNG: Neuer Text in Resource? Das BASIC aus der Datei '$(ARG1)' konnte nicht initialisiert werden : Das BASIC aus der Datei ''$(ARG1)'' konnte nicht initialisiert werden */ + Text = "Das BASIC aus der Datei '$(ARG1)' konnte nicht initialisiert werden" ; + Text [ english ] = "The BASIC from the file '$(ARG1)' could not be initialized" ; + Text [ dutch ] = "BASIC in bestand '$(ARG1)' kon niet worden genitialiseerd" ; + Text [ english_us ] = "The BASIC from the file '$(ARG1)' could not be initialized" ; + Text [ italian ] = "Impossibile inizializzare il BASIC dal file '$(ARG1)'" ; + Text [ spanish ] = "No se pudo inicializar el Basic del archivo '$(ARG1)'" ; + Text [ french ] = "Impossible d'initialiser BASIC partir du fichier '$(ARG1)'" ; + Text [ swedish ] = "BASIC frn filen '$(ARG1)' kunde inte initialiseras" ; + Text [ danish ] = "Det var ikke muligt at initialisere BASIC fra filen '$(ARG1)'" ; + Text [ portuguese ] = "Impossvel inicializar BASIC do ficheiro '$(ARG1)'" ; + Text [ portuguese_brazilian ] = "Das BASIC aus der Datei '$(ARG1)' konnte nicht initialisiert werden" ; + Text[ chinese_simplified ] = "ļ'$(ARG1)' ʼ BASIC"; + Text[ russian ] = " BASIC '$(ARG1)' "; + Text[ polish ] = "BASIC z pliku '$(ARG1)' nie mg zosta zainicjowany"; + Text[ japanese ] = "̧ '$(ARG1)'BASIC͏ł܂ł"; + Text[ chinese_traditional ] = "Lkqɮ'$(ARG1)'lBASIC"; + Text[ arabic ] = "'$(ARG1)' BASIC "; + Text[ dutch ] = "BASIC in bestand '$(ARG1)' kon niet worden genitialiseerd"; + Text[ chinese_simplified ] = "ļ'$(ARG1)' ʼ BASIC"; + Text[ greek ] = " BASIC '$(ARG1)'."; + Text[ korean ] = " $(ARG1) BASIC ʱȭ ʾҽϴ."; + Text[ turkish ] = "'$(ARG1)' dosyasndan BASIC kurulamad"; + Text[ language_user1 ] = " "; +}; +String ERRCODE_BASMGR_MGRSAVE & ERRCODE_RES_MASK +{ + Text = "Fehler beim Speichern des BASIC's: '$(ARG1)'" ; + Text [ english ] = "Error saving BASIC: '$(ARG1)'" ; + Text [ dutch ] = "Fout bij het opslaan van BASIC: '$(ARG1)'" ; + Text [ english_us ] = "Error saving BASIC: '$(ARG1)'" ; + Text [ italian ] = "Errore nel salvare il BASIC: '$(ARG1)'" ; + Text [ spanish ] = "Error al guardar BASIC: '$(ARG1)'" ; + Text [ french ] = "Erreur lors de l'enregistrement de la macro BASIC : '$(ARG1)'" ; + Text [ swedish ] = "Fel vid sparandet av BASIC: '$(ARG1)'" ; + Text [ danish ] = "Fejl under forsg p at gemme BASIC: '$(ARG1)'" ; + Text [ portuguese ] = "Erro ao guardar BASIC: '$(ARG1)'" ; + Text [ portuguese_brazilian ] = "Fehler beim Speichern des Basics: '$(ARG1)" ; + Text[ chinese_simplified ] = "BASICʱ'$(ARG1)'"; + Text[ russian ] = " BASIC: '$(ARG1)'"; + Text[ polish ] = "Bd przy zapisie biblioteki BASIC: '$(ARG1)'"; + Text[ japanese ] = "BASIC̕ۑ̍ۂ̴װ: '$(ARG1)'"; + Text[ chinese_traditional ] = "xsBASICɵoͿ~G'$(ARG1)'"; + Text[ arabic ] = "'$(ARG1)' :BASIC "; + Text[ dutch ] = "Fout bij het opslaan van BASIC: '$(ARG1)'"; + Text[ chinese_simplified ] = "BASICʱ'$(ARG1)'"; + Text[ greek ] = " BASIC: '$(ARG1)'"; + Text[ korean ] = "BASIC :$(ARG1)"; + Text[ turkish ] = "BASIC'i kaydetme srasnda hata: '$(ARG1)'"; + Text[ language_user1 ] = " "; +}; +String ERRCODE_BASMGR_REMOVELIB & ERRCODE_RES_MASK +{ + Text = "Fehler beim entfernen der Bibliothek" ; + Text [ ENGLISH ] = "Fehler beim entfernen der Bibliothek" ; + Text [ dutch ] = "Fout bij verwijderen van bibliotheek" ; + Text [ english_us ] = "Error removing library" ; + Text [ italian ] = "Errore nell'eliminare la library" ; + Text [ spanish ] = "Error al eliminar la biblioteca" ; + Text [ french ] = "Erreur lors de la suppression de la bibliothque" ; + Text [ swedish ] = "Fel vid borttagande av bibliotek" ; + Text [ danish ] = "Fejl under sletning af biblioteket" ; + Text [ portuguese ] = "Erro ao eliminar a biblioteca" ; + Text [ portuguese_brazilian ] = "Fehler beim entfernen der Bibliothek" ; + Text[ chinese_simplified ] = "ɾʱ"; + Text[ russian ] = " "; + Text[ polish ] = "Bd przy usuwaniu biblioteki"; + Text[ japanese ] = "ײ̍폜̍ۂ̴װ"; + Text[ chinese_traditional ] = "R{wɵoͿ~"; + Text[ arabic ] = " "; + Text[ dutch ] = "Fout bij verwijderen van bibliotheek"; + Text[ chinese_simplified ] = "ɾʱ"; + Text[ greek ] = " "; + Text[ korean ] = "̺귯 "; + Text[ turkish ] = "Kitapl kaldrma srasnda hata"; + Text[ language_user1 ] = " "; +}; +String ERRCODE_BASMGR_UNLOADLIB & ERRCODE_RES_MASK +{ + Text = "Die Bibliothek konnte nicht aus dem Speicher entfernt werden." ; + Text [ ENGLISH ] = "Die Bibliothek konnte nicht aus dem Speicher entfernt werden." ; + Text [ dutch ] = "De bibliotheek kon niet uit het geheugen worden verwijderd." ; + Text [ english_us ] = "The library could not be removed from memory." ; + Text [ italian ] = "Impossibile eliminare la library dalla memoria." ; + Text [ spanish ] = "No se pudo eliminar la biblioteca de la memoria." ; + Text [ french ] = "Impossible de supprimer la bibliothque de la mmoire." ; + Text [ swedish ] = "Biblioteket kunde inte tas bort frn minnet." ; + Text [ danish ] = "Det var ikke muligt at slette biblioteket fra hukommelsen." ; + Text [ portuguese ] = "Foi impossvel remover a biblioteca da memria." ; + Text [ portuguese_brazilian ] = "Die Bibliothek konnte nicht aus dem Speicher entfernt werden." ; + Text[ chinese_simplified ] = "ڴ"; + Text[ russian ] = " ."; + Text[ polish ] = "Biblioteki nie mona byo usun z pamici."; + Text[ japanese ] = "ײ폜ł܂łB"; + Text[ chinese_traditional ] = "{wLkqO餺MC"; + Text[ arabic ] = ". "; + Text[ dutch ] = "De bibliotheek kon niet uit het geheugen worden verwijderd."; + Text[ chinese_simplified ] = "ڴ"; + Text[ greek ] = " "; + Text[ korean ] = "̺귯 ϴ."; + Text[ turkish ] = "Kitaplk bellekten silinemedi."; + Text[ language_user1 ] = " "; +}; diff --git a/basic/source/classes/sbintern.cxx b/basic/source/classes/sbintern.cxx new file mode 100644 index 000000000000..2a94af758ece --- /dev/null +++ b/basic/source/classes/sbintern.cxx @@ -0,0 +1,109 @@ +/************************************************************************* + * + * $RCSfile: sbintern.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 16:12:10 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef _SHL_HXX //autogen +#include <tools/shl.hxx> +#endif +#include "sbintern.hxx" +#include "sbunoobj.hxx" +#include "token.hxx" // Tokenizer +#include "symtbl.hxx" // Symbolverwaltung +#include "parser.hxx" // Parser +#include "codegen.hxx" // Code-Generator +#pragma hdrstop + +SV_IMPL_PTRARR(SbErrorStack, SbErrorStackEntry*) + +SbiGlobals* GetSbData() +{ + SbiGlobals** pp = (SbiGlobals**) ::GetAppData( SHL_SBC ); + SbiGlobals* p = *pp; + if( !p ) + p = *pp = new SbiGlobals; + return p; +} + +SbiGlobals::SbiGlobals() +{ + pInst = NULL; + pMod = NULL; + pSbFac= NULL; + pUnoFac = NULL; + pCompMod = NULL; // JSM + nInst = 0; + nCode = 0; + nLine = 0; + nCol1 = nCol2 = 0; + bCompiler = FALSE; + bCompWait = FALSE; + bGlobalInitErr = FALSE; + bRunInit = FALSE; + eLanguageMode = SB_LANG_BASIC; + pErrStack = NULL; +} + +SbiGlobals::~SbiGlobals() +{ + delete pErrStack; + delete pSbFac; + delete pUnoFac; +} + diff --git a/basic/source/classes/sbunoobj.cxx b/basic/source/classes/sbunoobj.cxx new file mode 100644 index 000000000000..799ffc0054a5 --- /dev/null +++ b/basic/source/classes/sbunoobj.cxx @@ -0,0 +1,2500 @@ +/************************************************************************* + * + * $RCSfile: sbunoobj.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 16:12:10 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +//#include <stl_queue.h> + +#ifndef _VOS_MUTEX_HXX_ //autogen +#include <vos/mutex.hxx> +#endif +#ifndef _SV_SVAPP_HXX //autogen +#include <vcl/svapp.hxx> +#endif +#ifndef _TOOLERR_HXX //autogen +#include <tools/errcode.hxx> +#endif +#ifndef _SFXHINT_HXX //autogen +#include <svtools/hint.hxx> +#endif +#ifndef _SBXCLASS_HXX //autogen +#include <svtools/sbx.hxx> +#endif + +#include <cppuhelper/implbase1.hxx> +#include <cppuhelper/typeprovider.hxx> +#include <cppuhelper/extract.hxx> + +#ifndef _UNOTOOLS_PROCESSFACTORY_HXX_ +#include <unotools/processfactory.hxx> +#endif + +#include <rtl/ustrbuf.hxx> +#include <rtl/strbuf.hxx> + + +#include <com/sun/star/lang/XTypeProvider.hpp> +#include <com/sun/star/lang/XMultiServiceFactory.hpp> +#include <com/sun/star/beans/PropertyAttribute.hpp> +#include <com/sun/star/beans/PropertyConcept.hpp> +#include <com/sun/star/beans/MethodConcept.hpp> +#include <com/sun/star/beans/XPropertySet.hpp> +#include <com/sun/star/script/XAllListener.hpp> +#include <com/sun/star/script/XInvocationAdapterFactory.hpp> +#include <com/sun/star/container/XNameAccess.hpp> +#include <com/sun/star/container/XHierarchicalNameAccess.hpp> +#include <com/sun/star/reflection/XIdlArray.hpp> +#include <com/sun/star/reflection/XIdlReflection.hpp> +#include <com/sun/star/reflection/XIdlClassProvider.hpp> + +using namespace com::sun::star::uno; +using namespace com::sun::star::lang; +using namespace com::sun::star::reflection; +using namespace com::sun::star::beans; +using namespace com::sun::star::script; +using namespace com::sun::star::container; +using namespace cppu; +using namespace rtl; + + +#include<sbstar.hxx> +#include<sbuno.hxx> +#include<sberrors.hxx> +#include<sbunoobj.hxx> +#include"sbjsmod.hxx" +#include<basmgr.hxx> +#include<sbintern.hxx> +#include<runtime.hxx> + +TYPEINIT1(SbUnoMethod,SbxMethod) +TYPEINIT1(SbUnoProperty,SbxProperty) +TYPEINIT1(SbUnoObject,SbxObject) +TYPEINIT1(SbUnoClass,SbxObject) + +//#define U2S(Str) String( OUStringToOString( Str, RTL_TEXTENCODING_ASCII_US ) ) +//#define S2U(Str) OStringToOUString( OString( (Str).GetStr() ), RTL_TEXTENCODING_ASCII_US ) + +typedef WeakImplHelper1< XAllListener > BasicAllListenerHelper; + +// Flag, um immer ueber Invocation zu gehen +//#define INVOCATION_ONLY + + +// Identifier fuer die dbg_-Properies als Strings anlegen +static String ID_DBG_SUPPORTEDINTERFACES( RTL_CONSTASCII_USTRINGPARAM("Dbg_SupportedInterfaces") ); +static String ID_DBG_PROPERTIES( RTL_CONSTASCII_USTRINGPARAM("Dbg_Properties") ); +static String ID_DBG_METHODS( RTL_CONSTASCII_USTRINGPARAM("Dbg_Methods") ); + + +// CoreReflection statisch speichern +Reference< XIdlReflection > getCoreReflection_Impl( void ) +{ + static Reference< XIdlReflection > xCoreReflection; + + // Haben wir schon CoreReflection, sonst besorgen + if( !xCoreReflection.is() ) + { + Reference< XMultiServiceFactory > xFactory = utl::getProcessServiceFactory(); + if ( xFactory.is() ) + { + Reference< XInterface > xI = xFactory->createInstance( rtl::OUString::createFromAscii("com.sun.star.reflection.CoreReflection") ); + //if (xI.is()) + //{ + xCoreReflection = Reference<XIdlReflection>::query( xI ); + //xI->queryInterface( XIdlReflection::getSmartUik(), xCoreReflection ); + //} + } + } + return xCoreReflection; +} + +// TODO: Spaeter auslagern +Reference<XIdlClass> TypeToIdlClass( const Type& rType ) +{ + // void als Default-Klasse eintragen + Reference<XIdlClass> xRetClass; + typelib_TypeDescription * pTD = 0; + rType.getDescription( &pTD ); + if( pTD ) + { + OUString sOWName( pTD->pTypeName ); + Reference< XIdlReflection > xRefl = getCoreReflection_Impl(); + xRetClass = xRefl->forName( sOWName ); + } + return xRetClass; +} + +// Fehlermeldungs-Message bei Exception zusammenbauen +String implGetExceptionMsg( Exception& e1 ) +{ + // TODO: NAME??? + static String aBaseMsg( RTL_CONSTASCII_USTRINGPARAM("\nException " ) ); + String aMsg = aBaseMsg; + aMsg.AppendAscii( ": " ); + aMsg += String( e1.Message ); + //aMsg += ": " + U2S( ((Exception&)e1).Message ); + return aMsg; +} + +// Error-Message fuer WrappedTargetExceptions +String implGetWrappedMsg( WrappedTargetException& e1 ) +{ + Any aWrappedAny = e1.TargetException; + + // Haben wir wirklich eine gewrappte Exception? + if( aWrappedAny.getValueType().getTypeClass() == TypeClass_EXCEPTION ) + { + RuntimeException& e = *( (RuntimeException*)aWrappedAny.getValue() ); + return implGetExceptionMsg( e ); + } + // Sonst WrappedTargetException selbst liefern + else + { + return implGetExceptionMsg( e1 ); + } +} + +// Von Uno nach Sbx wandeln +SbxDataType unoToSbxType( const Reference< XIdlClass >& xIdlClass ) +{ + SbxDataType eRetType = SbxVOID; + + if( xIdlClass.is() ) + { + TypeClass eType = xIdlClass->getTypeClass(); + switch( eType ) + { + case TypeClass_INTERFACE: + case TypeClass_TYPE: + case TypeClass_STRUCT: eRetType = SbxOBJECT; break; + + /* folgende Typen lassen wir erstmal weg + case TypeClass_SERVICE: break; + case TypeClass_CLASS: break; + case TypeClass_TYPEDEF: break; + case TypeClass_UNION: break; + case TypeClass_EXCEPTION: break; + case TypeClass_ARRAY: break; + */ + case TypeClass_ENUM: eRetType = SbxLONG; break; + case TypeClass_SEQUENCE: + eRetType = (SbxDataType) ( SbxOBJECT | SbxARRAY ); + break; + + /* + case TypeClass_VOID: break; + case TypeClass_UNKNOWN: break; + */ + + case TypeClass_ANY: eRetType = SbxVARIANT; break; + case TypeClass_BOOLEAN: eRetType = SbxBOOL; break; + case TypeClass_CHAR: eRetType = SbxCHAR; break; + case TypeClass_STRING: eRetType = SbxSTRING; break; + case TypeClass_FLOAT: eRetType = SbxSINGLE; break; + case TypeClass_DOUBLE: eRetType = SbxDOUBLE; break; + //case TypeClass_OCTET: break; + case TypeClass_BYTE: eRetType = SbxBYTE; break; + //case TypeClass_INT: eRetType = SbxINT; break; + case TypeClass_SHORT: eRetType = SbxINTEGER; break; + case TypeClass_LONG: eRetType = SbxLONG; break; + //case TypeClass_HYPER: break; + //case TypeClass_UNSIGNED_OCTET: break; + case TypeClass_UNSIGNED_SHORT: eRetType = SbxUSHORT; break; + case TypeClass_UNSIGNED_LONG: eRetType = SbxULONG; break; + //case TypeClass_UNSIGNED_HYPER: break; + //case TypeClass_UNSIGNED_INT: eRetType = SbxUINT; break; + //case TypeClass_UNSIGNED_BYTE: eRetType = SbxUSHORT; break; + } + } + return eRetType; +} + +void unoToSbxValue( SbxVariable* pVar, const Any& aValue ) +{ + Type aType = aValue.getValueType(); + TypeClass eTypeClass = aType.getTypeClass(); + switch( eTypeClass ) + { + case TypeClass_TYPE: + { + // Map Type to IdlClass + Type aType; + aValue >>= aType; + Reference<XIdlClass> xClass = TypeToIdlClass( aType ); + Any aClassAny; + aClassAny <<= xClass; + + // SbUnoObject instanzieren + String aName; + SbUnoObject* pSbUnoObject = new SbUnoObject( aName, aClassAny ); + SbxObjectRef xWrapper = (SbxObject*)pSbUnoObject; + + // #51475 Wenn das Objekt ungueltig ist null liefern + if( pSbUnoObject->getUnoAny().getValueType().getTypeClass() == TypeClass_VOID ) + { + pVar->PutObject( NULL ); + } + else + { + pVar->PutObject( xWrapper ); + } + } + break; + + // Interfaces und Structs muessen in ein SbUnoObject gewrappt werden + case TypeClass_INTERFACE: + case TypeClass_STRUCT: + { + // SbUnoObject instanzieren + String aName; + SbUnoObject* pSbUnoObject = new SbUnoObject( aName, aValue ); + SbxObjectRef xWrapper = (SbxObject*)pSbUnoObject; + + // #51475 Wenn das Objekt ungueltig ist null liefern + if( pSbUnoObject->getUnoAny().getValueType().getTypeClass() == TypeClass_VOID ) + { + pVar->PutObject( NULL ); + } + else + { + pVar->PutObject( xWrapper ); + } + } + break; + + /* folgende Typen lassen wir erstmal weg + case TypeClass_SERVICE: break; + case TypeClass_CLASS: break; + case TypeClass_TYPEDEF: break; + case TypeClass_UNION: break; + case TypeClass_ENUM: break; + case TypeClass_EXCEPTION: break; + case TypeClass_ARRAY: break; + */ + + case TypeClass_ENUM: + { + sal_Int32 nEnum = 0; + enum2int( nEnum, aValue ); + pVar->PutLong( nEnum ); + } + break; + + case TypeClass_SEQUENCE: + { + Reference< XIdlClass > xIdlTargetClass = TypeToIdlClass( aType ); + Reference< XIdlArray > xIdlArray = xIdlTargetClass->getArray(); + sal_Int32 i, nLen = xIdlArray->getLen( aValue ); + // In Basic Array anlegen + SbxDimArrayRef xArray = new SbxDimArray( SbxVARIANT ); + if( nLen >= 0 ) + xArray->unoAddDim( 0, nLen - 1 ); + + // Elemente als Variablen eintragen + for( i = 0 ; i < nLen ; i++ ) + { + // Elemente wandeln + Any aElementAny = xIdlArray->get( aValue, (UINT32)i ); + //Any aElementAny = pSeqReflection->get( aValue, (UINT32)i ); + SbxVariableRef xVar = new SbxVariable( SbxVARIANT ); + unoToSbxValue( (SbxVariable*)xVar, aElementAny ); + + // Ins Array braten + short nIndex = (short)i; + xArray->Put( (SbxVariable*)xVar, &nIndex ); + } + + // Array zurueckliefern + USHORT nFlags = pVar->GetFlags(); + pVar->ResetFlag( SBX_FIXED ); + pVar->PutObject( (SbxDimArray*)xArray ); + pVar->SetFlags( nFlags ); + + // #54548, Die Parameter duerfen hier nicht weggehauen werden + //pVar->SetParameters( NULL ); + } + break; + + /* + case TypeClass_SEQUENCE: break; + case TypeClass_VOID: break; + case TypeClass_UNKNOWN: break; + + case TypeClass_ANY: + { + // Any rausholen und konvertieren + //Any* pAny = (Any*)aValue.get(); + //if( pAny ) + //unoToSbxValue( pVar, *pAny ); + } + break; + */ + + case TypeClass_BOOLEAN: pVar->PutBool( *(sal_Bool*)aValue.getValue() ); break; + case TypeClass_CHAR: { sal_Unicode val; aValue >>= val; pVar->PutChar( val ); } break; + case TypeClass_STRING: { OUString val; aValue >>= val; pVar->PutString( String( val ) ); } break; + case TypeClass_FLOAT: { float val; aValue >>= val; pVar->PutSingle( val ); } break; + case TypeClass_DOUBLE: { double val; aValue >>= val; pVar->PutDouble( val ); } break; + //case TypeClass_OCTET: break; + case TypeClass_BYTE: { sal_Int8 val; aValue >>= val; pVar->PutByte( val ); } break; + //case TypeClass_INT: break; + case TypeClass_SHORT: { sal_Int16 val; aValue >>= val; pVar->PutInteger( val ); } break; + case TypeClass_LONG: { sal_Int32 val; aValue >>= val; pVar->PutLong( val ); } break; + //case TypeClass_HYPER: break; + //case TypeClass_UNSIGNED_OCTET:break; + case TypeClass_UNSIGNED_SHORT: { sal_uInt16 val; aValue >>= val; pVar->PutUShort( val ); } break; + case TypeClass_UNSIGNED_LONG: { sal_uInt32 val; aValue >>= val; pVar->PutULong( val ); } break; + //case TypeClass_UNSIGNED_HYPER:break; + //case TypeClass_UNSIGNED_INT: break; + //case TypeClass_UNSIGNED_BYTE: break; + default: pVar->PutEmpty(); break; + } +} + +// Reflection fuer Sbx-Typen liefern +Type getUnoTypeForSbxBaseType( SbxDataType eType ) +{ + Type aRetType = getCppuVoidType(); + switch( eType ) + { + //case SbxEMPTY: eRet = TypeClass_VOID; break; + case SbxNULL: aRetType = ::getCppuType( (const Reference< XInterface > *)0 ); break; + case SbxINTEGER: aRetType = ::getCppuType( (sal_Int16*)0 ); break; + case SbxLONG: aRetType = ::getCppuType( (sal_Int32*)0 ); break; + case SbxSINGLE: aRetType = ::getCppuType( (float*)0 ); break; + case SbxDOUBLE: aRetType = ::getCppuType( (double*)0 ); break; + //case SbxCURRENCY: break; + case SbxDATE: aRetType = ::getCppuType( (double*)0 ); break; + case SbxSTRING: aRetType = ::getCppuType( (OUString*)0 ); break; + //case SbxOBJECT: break; + //case SbxERROR: break; + case SbxBOOL: aRetType = ::getCppuType( (sal_Bool*)0 ); break; + case SbxVARIANT: aRetType = ::getCppuType( (Any*)0 ); break; + //case SbxDATAOBJECT: break; + case SbxCHAR: aRetType = ::getCppuType( (sal_Unicode*)0 ); break; + case SbxBYTE: aRetType = ::getCppuType( (sal_Int8*)0 ); break; + case SbxUSHORT: aRetType = ::getCppuType( (sal_uInt16*)0 ); break; + case SbxULONG: aRetType = ::getCppuType( (sal_uInt32*)0 ); break; + //case SbxLONG64: break; + //case SbxULONG64: break; + // Maschinenabhaengige zur Sicherheit auf Hyper abbilden + case SbxINT: aRetType = ::getCppuType( (sal_Int32*)0 ); break; + case SbxUINT: aRetType = ::getCppuType( (sal_uInt32*)0 ); break; + //case SbxVOID: break; + //case SbxHRESULT: break; + //case SbxPOINTER: break; + //case SbxDIMARRAY: break; + //case SbxCARRAY: break; + //case SbxUSERDEF: break; + //case SbxLPSTR: break; + //case SbxLPWSTR: break; + //case SbxCoreSTRING: break; + } + return aRetType; +} + +// Konvertierung von Sbx nach Uno ohne bekannte Zielklasse fuer TypeClass_ANY +Type getUnoTypeForSbxValue( SbxValue* pVal ) +{ + Type aRetType = getCppuVoidType(); + if( !pVal ) + return aRetType; + + // SbxType nach Uno wandeln + SbxDataType eBaseType = pVal->SbxValue::GetType(); + if( eBaseType == SbxOBJECT ) + { + SbxBaseRef xObj = (SbxBase*)pVal->GetObject(); + if( !xObj ) + { + StarBASIC::Error( SbERR_INVALID_OBJECT ); + return aRetType; + } + + if( xObj->ISA(SbxDimArray) ) + { + SbxBase* pObj = (SbxBase*)xObj; + SbxDimArray* pArray = (SbxDimArray*)pObj; + + // es muss ein eindimensionales Array sein + short nLower, nUpper; + if( pArray->GetDims() == 1 && pArray->GetDim( 1, nLower, nUpper ) ) + { + INT32 nSize = nUpper - nLower + 1; + Type aElementType; + if( nSize == 0 ) + { + aElementType = getUnoTypeForSbxBaseType( (SbxDataType)(pArray->GetType() & 0xfff) ); + } + else + { + // Wenn alle Elemente des Arrays vom gleichen Typ sind, wird + // der genommen, sonst wird das ganze als Any-Sequence betrachtet + sal_Bool bInit = sal_False; + + short nIdx = nLower; + for( UINT32 i = 0 ; i < nSize ; i++,nIdx++ ) + { + SbxVariableRef xVar = pArray->Get( &nIdx ); + Type aType = getUnoTypeForSbxValue( (SbxVariable*)xVar ); + if( !bInit ) + { + aElementType = aType; + bInit = sal_True; + } + else if( aElementType != aType ) + { + // Verschiedene Typen -> AnySequence + aElementType = getCppuType( (Any*)0 ); + break; + } + } + } + + OUString aSeqTypeName( RTL_CONSTASCII_USTRINGPARAM("[]") ); + aSeqTypeName += aElementType.getTypeName(); + aRetType = Type( TypeClass_SEQUENCE, aSeqTypeName ); + } + // Ein Array mit Dim > 1 wird nicht konvertiert -> default==void liefern + } + // Kein Array, sondern... + else if( xObj->ISA(SbUnoObject) ) + { + aRetType = ((SbUnoObject*)(SbxBase*)xObj)->getUnoAny().getValueType(); + } + // Sonst ist es ein Nicht-Uno-Basic-Objekt -> default==void liefern + } + // Kein Objekt, Basistyp konvertieren + else + { + aRetType = getUnoTypeForSbxBaseType( eBaseType ); + } + return aRetType; +} + +// Deklaration Konvertierung von Sbx nach Uno mit bekannter Zielklasse +Any sbxToUnoValue( SbxVariable* pVar, const Reference< XIdlClass >& xIdlTargetClass ); + +// Konvertierung von Sbx nach Uno ohne bekannte Zielklasse fuer TypeClass_ANY +Any sbxToUnoValue( SbxVariable* pVar ) +{ + Type aType = getUnoTypeForSbxValue( pVar ); + return sbxToUnoValue( pVar, TypeToIdlClass( aType ) ); +} + +// Konvertierung von Sbx nach Uno mit bekannter Zielklasse +Any sbxToUnoValue( SbxVariable* pVar, const Reference< XIdlClass >& xIdlTargetClass ) +{ + Any aRetVal; + //aRetVal.setVoid(); + + TypeClass eType = xIdlTargetClass->getTypeClass(); + switch( eType ) + { + case TypeClass_INTERFACE: + case TypeClass_STRUCT: + { + // Null-Referenz? + if( pVar->IsNull() && eType == TypeClass_INTERFACE ) + { + Reference< XInterface > xRef; + OUString aClassName = xIdlTargetClass->getName(); + Type aClassType( xIdlTargetClass->getTypeClass(), aClassName.getStr() ); + aRetVal <<= aClassType; + } + else + { + SbxBaseRef pObj = (SbxBase*)pVar->GetObject(); + if( pObj && pObj->ISA(SbUnoObject) ) + aRetVal = ((SbUnoObject*)(SbxBase*)pObj)->getUnoAny(); + } + } + break; + + /* folgende Typen lassen wir erstmal weg + case TypeClass_SERVICE: break; + case TypeClass_CLASS: break; + case TypeClass_TYPEDEF: break; + case TypeClass_UNION: break; + case TypeClass_ENUM: break; + case TypeClass_EXCEPTION: break; + case TypeClass_ARRAY: break; + */ + + // Array -> Sequence + case TypeClass_ENUM: + { + OUString aClassName = xIdlTargetClass->getName(); + Type aEnumType( xIdlTargetClass->getTypeClass(), aClassName.getStr() ); + aRetVal = int2enum( pVar->GetLong(), aEnumType ); + } + break; + + case TypeClass_SEQUENCE: + { + SbxBaseRef xObj = (SbxBase*)pVar->GetObject(); + if( xObj && xObj->ISA(SbxDimArray) ) + { + SbxBase* pObj = (SbxBase*)xObj; + SbxDimArray* pArray = (SbxDimArray*)pObj; + + // Instanz der geforderten Sequence erzeugen + xIdlTargetClass->createObject( aRetVal ); + + // es muss ein eindimensionales Array sein + short nLower, nUpper; + if( pArray->GetDims() == 1 && pArray->GetDim( 1, nLower, nUpper ) ) + { + INT32 nSeqSize = nUpper - nLower + 1; + + Reference< XIdlArray > xArray = xIdlTargetClass->getArray(); + xArray->realloc( aRetVal, nSeqSize ); + + // Element-Type + OUString aClassName = xIdlTargetClass->getName(); + typelib_TypeDescription * pSeqTD = 0; + typelib_typedescription_getByName( &pSeqTD, aClassName.pData ); + OSL_ASSERT( pSeqTD ); +#if SUPD > 600 + Type aElemType( ((typelib_IndirectTypeDescription *)pSeqTD)->pType ); +#else + typelib_TypeDescription * pElementTD = + ((typelib_IndirectTypeDescription *)pSeqTD)->pType; + Type aElemType( pElementTD->pWeakRef ); +#endif + Reference< XIdlClass > xElementClass = TypeToIdlClass( aElemType ); + + // Alle Array-Member umwandeln und eintragen + short nIdx = nLower; + for( sal_Int32 i = 0 ; i < nSeqSize ; i++,nIdx++ ) + { + SbxVariableRef xVar = pArray->Get( &nIdx ); + + // Wert von Sbx nach Uno wandeln + Any aAnyValue = sbxToUnoValue( (SbxVariable*)xVar, xElementClass ); + + try + { + // In die Sequence uebernehmen + xArray->set( aRetVal, i, aAnyValue ); + } + catch( IllegalArgumentException& e1 ) + { + StarBASIC::Error( SbERR_INTERNAL_ERROR, implGetExceptionMsg( e1 ) ); + } + catch (IndexOutOfBoundsException& e2) + { + StarBASIC::Error( SbERR_OUT_OF_RANGE ); + } + } + } + } + } + break; + + /* + case TypeClass_VOID: break; + case TypeClass_UNKNOWN: break; + */ + + // Bei Any die Klassen-unabhaengige Konvertierungs-Routine nutzen + case TypeClass_ANY: + { + aRetVal = sbxToUnoValue( pVar ); + } + break; + + case TypeClass_BOOLEAN: aRetVal <<= (sal_Bool)( pVar->GetBool() ); break; + case TypeClass_CHAR: aRetVal <<= (sal_Unicode)( pVar->GetChar() ); break; + case TypeClass_STRING: aRetVal <<= OUString( pVar->GetString() ); break; + case TypeClass_FLOAT: aRetVal <<= pVar->GetSingle(); break; + case TypeClass_DOUBLE: aRetVal <<= pVar->GetDouble(); break; + //case TypeClass_OCTET: break; + case TypeClass_BYTE: aRetVal <<= (sal_Int8)( pVar->GetByte() ); break; + //case TypeClass_INT: break; + case TypeClass_SHORT: aRetVal <<= (sal_Int16)( pVar->GetInteger() ); break; + case TypeClass_LONG: aRetVal <<= (sal_Int32)( pVar->GetLong() ); break; + //case TypeClass_HYPER: break; + //case TypeClass_UNSIGNED_OCTET:break; + case TypeClass_UNSIGNED_SHORT: aRetVal <<= (sal_uInt16)( pVar->GetUShort() ); break; + case TypeClass_UNSIGNED_LONG: aRetVal <<= (sal_uInt32)( pVar->GetULong() ); break; + //case TypeClass_UNSIGNED_HYPER:break; + //case TypeClass_UNSIGNED_INT: break; + //case TypeClass_UNSIGNED_BYTE: break; + } + + return aRetVal; +} + +// Dbg-Hilfsmethode zum Auslesen der in einem Object implementierten Interfaces +String Impl_GetInterfaceInfo( const Reference< XInterface >& x, const Reference< XIdlClass >& xClass, USHORT nRekLevel ) +{ + Type aIfaceType = ::getCppuType( (const Reference< XInterface > *)0 ); + static Reference< XIdlClass > xIfaceClass = TypeToIdlClass( aIfaceType ); + + String aRetStr; + for( USHORT i = 0 ; i < nRekLevel ; i++ ) + aRetStr.AppendAscii( " " ); + aRetStr += String( xClass->getName() ); + OUString aClassName = xClass->getName(); + Type aClassType( xClass->getTypeClass(), aClassName.getStr() ); + + // Pruefen, ob das Interface wirklich unterstuetzt wird + if( !x->queryInterface( aClassType ).hasValue() ) + { + aRetStr.AppendAscii( " (ERROR: Not really supported!)\n" ); + } + // Gibt es Super-Interfaces + else + { + aRetStr.AppendAscii( "\n" ); + + // Super-Interfaces holen + Sequence< Reference< XIdlClass > > aSuperClassSeq = xClass->getSuperclasses(); + const Reference< XIdlClass >* pClasses = aSuperClassSeq.getConstArray(); + UINT32 nSuperIfaceCount = aSuperClassSeq.getLength(); + for( UINT32 j = 0 ; j < nSuperIfaceCount ; j++ ) + { + const Reference< XIdlClass >& rxIfaceClass = pClasses[j]; + if( !rxIfaceClass->equals( xIfaceClass ) ) + aRetStr += Impl_GetInterfaceInfo( x, rxIfaceClass, nRekLevel + 1 ); + } + } + return aRetStr; +} + +// Dbg-Hilfsmethode zum Auslesen der in einem Object implementierten Interfaces +String Impl_GetSupportedInterfaces( const String& rName, const Any& aToInspectObj ) +{ + //static Reference< XIdlClass > xUsrObjectClass = UsrObject::getUsrObjectIdlClass(); + + // #54898: Nur TypeClass Interface zulasssen + TypeClass eType = aToInspectObj.getValueType().getTypeClass(); + String aRet; + if( eType != TypeClass_INTERFACE ) + { + aRet += ID_DBG_SUPPORTEDINTERFACES; + aRet.AppendAscii( " not available for \"" ); + aRet += rName; + aRet.AppendAscii( "\"\n(TypeClass is not TypeClass_INTERFACE)" ); + } + else + { + // Interface aus dem Any besorgen + const Reference< XInterface > x = *(Reference< XInterface >*)aToInspectObj.getValue(); + + // XIdlClassProvider-Interface ansprechen + Reference< XIdlClassProvider > xClassProvider( x, UNO_QUERY ); + Reference< XTypeProvider > xTypeProvider( x, UNO_QUERY ); + + aRet.AssignAscii( "Supported interfaces by object " ); + if( xTypeProvider.is() ) + aRet.AppendAscii( "(using XTypeProvider) " ); + if( rName.Len() > 20 ) + aRet.AppendAscii( "\n" ); + aRet.AppendAscii( "(Type \"" ); + aRet += rName; + aRet.AppendAscii( "\"):\n" ); + if( xTypeProvider.is() ) + { + // Interfaces der Implementation holen + Sequence< Type > aTypeSeq = xTypeProvider->getTypes(); + //Sequence< Reference< XIdlClass > > aClassSeq = xTypeProvider->getTypes(); + const Type* pTypeArray = aTypeSeq.getConstArray(); + UINT32 nIfaceCount = aTypeSeq.getLength(); + for( UINT32 j = 0 ; j < nIfaceCount ; j++ ) + { + const Type& rType = pTypeArray[j]; + aRet += Impl_GetInterfaceInfo( x, TypeToIdlClass( rType ), 1 ); + } + } + else if( xClassProvider.is() ) + { + + DBG_ERROR( "XClassProvider not supported in UNO3" ); + } + } + return aRet; +} + + + +// Dbg-Hilfsmethode SbxDataType -> String +String Dbg_SbxDataType2String( SbxDataType eType ) +{ + String aRet( RTL_CONSTASCII_USTRINGPARAM("Unknown Sbx-Type!") ); + switch( eType ) + { + case SbxEMPTY: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxEMPTY") ); break; + case SbxNULL: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxNULL") ); break; + case SbxINTEGER: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxINTEGER") ); break; + case SbxLONG: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxLONG") ); break; + case SbxSINGLE: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxSINGLE") ); break; + case SbxDOUBLE: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxDOUBLE") ); break; + case SbxCURRENCY: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxCURRENCY") ); break; + case SbxDATE: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxDATE") ); break; + case SbxSTRING: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxSTRING") ); break; + case SbxOBJECT: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxOBJECT") ); break; + case SbxERROR: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxERROR") ); break; + case SbxBOOL: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxBOOL") ); break; + case SbxVARIANT: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxVARIANT") ); break; + case SbxDATAOBJECT: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxDATAOBJECT") ); break; + case SbxCHAR: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxCHAR") ); break; + case SbxBYTE: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxBYTE") ); break; + case SbxUSHORT: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxUSHORT") ); break; + case SbxULONG: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxULONG") ); break; + case SbxLONG64: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxLONG64") ); break; + case SbxULONG64: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxULONG64") ); break; + case SbxINT: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxINT") ); break; + case SbxUINT: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxUINT") ); break; + case SbxVOID: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxVOID") ); break; + case SbxHRESULT: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxHRESULT") ); break; + case SbxPOINTER: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxPOINTER") ); break; + case SbxDIMARRAY: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxDIMARRAY") ); break; + case SbxCARRAY: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxCARRAY") ); break; + case SbxUSERDEF: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxUSERDEF") ); break; + case SbxLPSTR: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxLPSTR") ); break; + case SbxLPWSTR: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxLPWSTR") ); break; + case SbxCoreSTRING: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxCoreSTRING" ) ); break; + case SbxOBJECT | SbxARRAY: aRet = String( RTL_CONSTASCII_USTRINGPARAM("SbxARRAY") ); break; + } + return aRet; +} + +// Dbg-Hilfsmethode zum Anzeigen der Properties eines SbUnoObjects +String Impl_DumpProperties( const String& rName, SbUnoObject* pUnoObj ) +{ + String aRet( RTL_CONSTASCII_USTRINGPARAM("Properties of object ") ); + if( rName.Len() > 20 ) + aRet.AppendAscii( "\n" ); + aRet.AppendAscii( "(Type \"" ); + aRet += rName; + aRet.AppendAscii( "\"):" ); + + // Uno-Infos auswerten, um Arrays zu erkennen + Reference< XIntrospectionAccess > xAccess = pUnoObj->getIntrospectionAccess(); + if( !xAccess.is() ) + { + Reference< XInvocation > xInvok = pUnoObj->getInvocation(); + if( xInvok.is() ) + xAccess = xInvok->getIntrospection(); + } + if( !xAccess.is() ) + { + aRet.AppendAscii( "\nUnknown, no introspection available" ); + return aRet; + } + + Sequence<Property> props = xAccess->getProperties( PropertyConcept::ALL - PropertyConcept::DANGEROUS ); + UINT32 nUnoPropCount = props.getLength(); + const Property* pUnoProps = props.getConstArray(); + + SbxArray* pProps = pUnoObj->GetProperties(); + USHORT nPropCount = pProps->Count(); + USHORT nPropsPerLine = 1 + nPropCount / 30; + for( USHORT i = 0; i < nPropCount; i++ ) + { + SbxVariable* pVar = pProps->Get( i ); + if( pVar ) + { + String aPropStr; + if( (i % nPropsPerLine) == 0 ) + aPropStr.AppendAscii( "\n" ); + + // Typ und Namen ausgeben + // Ist es in Uno eine Sequence? + SbxDataType eType = pVar->GetFullType(); + + BOOL bMaybeVoid = FALSE; + if( i < nUnoPropCount ) + { + const Property& rProp = pUnoProps[ i ]; + + // #63133: Bei MAYBEVOID Typ aus Uno neu konvertieren, + // damit nicht immer nur SbxEMPTY ausgegben wird. + if( rProp.Attributes & PropertyAttribute::MAYBEVOID ) + { + eType = unoToSbxType( TypeToIdlClass( rProp.Type ) ); + bMaybeVoid = TRUE; + } + if( eType == SbxOBJECT ) + { + Type aType = rProp.Type; + if( aType.getTypeClass() == TypeClass_SEQUENCE ) + eType = (SbxDataType) ( SbxOBJECT | SbxARRAY ); + } + } + aPropStr += Dbg_SbxDataType2String( eType ); + if( bMaybeVoid ) + aPropStr.AppendAscii( "/void" ); + aPropStr.AppendAscii( " " ); + aPropStr += pVar->GetName(); + + if( i == nPropCount - 1 ) + aPropStr.AppendAscii( "\n" ); + else + aPropStr.AppendAscii( "; " ); + + aRet += aPropStr; + } + } + return aRet; +} + +// Dbg-Hilfsmethode zum Anzeigen der Methoden eines SbUnoObjects +String Impl_DumpMethods( const String& rName, SbUnoObject* pUnoObj ) +{ + String aRet( RTL_CONSTASCII_USTRINGPARAM("Methods of object ") ); + if( rName.Len() > 20 ) + aRet.AppendAscii( "\n" ); + aRet.AppendAscii( "(Type \"" ); + aRet += rName; + aRet.AppendAscii( "\"):" ); + + // XIntrospectionAccess, um die Typen der Parameter auch ausgeben zu koennen + Reference< XIntrospectionAccess > xAccess = pUnoObj->getIntrospectionAccess(); + if( !xAccess.is() ) + { + Reference< XInvocation > xInvok = pUnoObj->getInvocation(); + if( xInvok.is() ) + xAccess = xInvok->getIntrospection(); + } + if( !xAccess.is() ) + { + aRet.AppendAscii( "\nUnknown, no introspection available" ); + return aRet; + } + Sequence< Reference< XIdlMethod > > methods = xAccess->getMethods + ( MethodConcept::ALL - MethodConcept::DANGEROUS ); + const Reference< XIdlMethod >* pUnoMethods = methods.getConstArray(); + + SbxArray* pMethods = pUnoObj->GetMethods(); + USHORT nMethodCount = pMethods->Count(); + USHORT nPropsPerLine = 1 + nMethodCount / 30; + for( USHORT i = 0; i < nMethodCount; i++ ) + { + SbxVariable* pVar = pMethods->Get( i ); + if( pVar ) + { + String aPropStr; + if( (i % nPropsPerLine) == 0 ) + aPropStr.AppendAscii( "\n" ); + + // Methode ansprechen + const Reference< XIdlMethod >& rxMethod = pUnoMethods[i]; + + // Ist es in Uno eine Sequence? + SbxDataType eType = pVar->GetFullType(); + if( eType == SbxOBJECT ) + { + Reference< XIdlClass > xClass = rxMethod->getReturnType(); + if( xClass.is() && xClass->getTypeClass() == TypeClass_SEQUENCE ) + eType = (SbxDataType) ( SbxOBJECT | SbxARRAY ); + } + // Name und Typ ausgeben + aPropStr += Dbg_SbxDataType2String( eType ); + aPropStr.AppendAscii( " " ); + aPropStr += pVar->GetName(); + aPropStr.AppendAscii( " ( " ); + + // get-Methode darf keinen Parameter haben + Sequence< Reference< XIdlClass > > aParamsSeq = rxMethod->getParameterTypes(); + UINT32 nParamCount = aParamsSeq.getLength(); + const Reference< XIdlClass >* pParams = aParamsSeq.getConstArray(); + + if( nParamCount > 0 ) + { + for( USHORT j = 0; j < nParamCount; j++ ) + { + String aTypeStr = Dbg_SbxDataType2String( unoToSbxType( pParams[ j ] ) ); + aPropStr += aTypeStr; + + if( j < nParamCount - 1 ) + aPropStr.AppendAscii( ", " ); + } + } + else + aPropStr.AppendAscii( "void" ); + + aPropStr.AppendAscii( " ) " ); + + if( i == nMethodCount - 1 ) + aPropStr.AppendAscii( "\n" ); + else + aPropStr.AppendAscii( "; " ); + + aRet += aPropStr; + } + } + return aRet; +} + +// Implementation SbUnoObject +void SbUnoObject::SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType, + const SfxHint& rHint, const TypeId& rHintType ) +{ + if( bNeedIntrospection ) doIntrospection(); + + const SbxHint* pHint = PTR_CAST(SbxHint,&rHint); + if( pHint ) + { + SbxVariable* pVar = pHint->GetVar(); + SbxArray* pParams = pVar->GetParameters(); + SbUnoProperty* pProp = PTR_CAST(SbUnoProperty,pVar); + SbUnoMethod* pMeth = PTR_CAST(SbUnoMethod,pVar); + if( pProp ) + { + if( pHint->GetId() == SBX_HINT_DATAWANTED ) + { + // Test-Properties + INT32 nId = (INT32)pProp->nId; + if( nId < 0 ) + { + // Id == -1: Implementierte Interfaces gemaess ClassProvider anzeigen + if( nId == -1 ) // Property ID_DBG_SUPPORTEDINTERFACES" + { + String aRetStr = Impl_GetSupportedInterfaces( GetClassName(), getUnoAny() ); + pVar->PutString( aRetStr ); + } + // Id == -2: Properties ausgeben + else if( nId == -2 ) // Property ID_DBG_PROPERTIES + { + // Jetzt muessen alle Properties angelegt werden + implCreateAll(); + String aRetStr = Impl_DumpProperties( GetClassName(), this ); + pVar->PutString( aRetStr ); + } + // Id == -3: Methoden ausgeben + else if( nId == -3 ) // Property ID_DBG_METHODS + { + // Jetzt muessen alle Properties angelegt werden + implCreateAll(); + String aRetStr = Impl_DumpMethods( GetClassName(), this ); + pVar->PutString( aRetStr ); + } + return; + } + + if( mxUnoAccess.is() ) + { + try + { + // Wert holen + Reference< XPropertySet > xPropSet( mxUnoAccess->queryAdapter( ::getCppuType( (const Reference< XPropertySet > *)0 ) ), UNO_QUERY ); + Any aRetAny = xPropSet->getPropertyValue( pProp->GetName() ); + // Die Nutzung von getPropertyValue (statt ueber den Index zu gehen) ist + // nicht optimal, aber die Umstellung auf XInvocation steht ja ohnehin an + // Ansonsten kann auch FastPropertySet genutzt werden + + // Wert von Uno nach Sbx uebernehmen + unoToSbxValue( pVar, aRetAny ); + } + catch( WrappedTargetException& e1 ) + { + StarBASIC::Error( SbERR_INTERNAL_ERROR, implGetWrappedMsg( e1 ) ); + } + catch( RuntimeException& e2 ) + { + StarBASIC::Error( SbERR_INTERNAL_ERROR, implGetExceptionMsg( e2 ) ); + } + catch( Exception& e3 ) + { + StarBASIC::Error( SbERR_INTERNAL_ERROR, implGetExceptionMsg( e3 ) ); + } + } + else if( mxInvocation.is() ) + { + try + { + // Wert holen + Any aRetAny = mxInvocation->getValue( pProp->GetName() ); + + // Wert von Uno nach Sbx uebernehmen + unoToSbxValue( pVar, aRetAny ); + } + catch( WrappedTargetException& e1 ) + { + StarBASIC::Error( SbERR_INTERNAL_ERROR, implGetWrappedMsg( e1 ) ); + } + catch( RuntimeException& e2 ) + { + StarBASIC::Error( SbERR_INTERNAL_ERROR, implGetExceptionMsg( e2 ) ); + } + catch( Exception& e3 ) + { + StarBASIC::Error( SbERR_INTERNAL_ERROR, implGetExceptionMsg( e3 ) ); + } + } + } + else if( pHint->GetId() == SBX_HINT_DATACHANGED ) + { + if( mxUnoAccess.is() ) + { + if( pProp->aUnoProp.Attributes & PropertyAttribute::READONLY ) + { + StarBASIC::Error( SbERR_PROP_READONLY ); + return; + } + + // Wert von Uno nach Sbx uebernehmen + Any aAnyValue = sbxToUnoValue( pVar, TypeToIdlClass( pProp->aUnoProp.Type ) ); + try + { + // Wert setzen + Reference< XPropertySet > xPropSet( mxUnoAccess->queryAdapter( ::getCppuType( (const Reference< XPropertySet > *)0 ) ), UNO_QUERY ); + xPropSet->setPropertyValue( pProp->GetName(), aAnyValue ); + // Die Nutzung von getPropertyValue (statt ueber den Index zu gehen) ist + // nicht optimal, aber die Umstellung auf XInvocation steht ja ohnehin an + // Ansonsten kann auch FastPropertySet genutzt werden + } + catch( WrappedTargetException& e1 ) + { + StarBASIC::Error( SbERR_INTERNAL_ERROR, implGetWrappedMsg( e1 ) ); + } + catch( IllegalArgumentException& e2 ) + { + StarBASIC::Error( SbERR_INTERNAL_ERROR, implGetExceptionMsg( e2 ) ); + } + catch( RuntimeException& e3 ) + { + StarBASIC::Error( SbERR_INTERNAL_ERROR, implGetExceptionMsg( e3 ) ); + } + catch( Exception& e4 ) + { + StarBASIC::Error( SbERR_INTERNAL_ERROR, implGetExceptionMsg( e4 ) ); + } + } + else if( mxInvocation.is() ) + { + // Wert von Uno nach Sbx uebernehmen + Any aAnyValue = sbxToUnoValue( pVar ); + try + { + // Wert setzen + mxInvocation->setValue( pProp->GetName(), aAnyValue ); + } + catch( WrappedTargetException& e1 ) + { + StarBASIC::Error( SbERR_INTERNAL_ERROR, implGetWrappedMsg( e1 ) ); + } + catch( RuntimeException& e2 ) + { + StarBASIC::Error( SbERR_INTERNAL_ERROR, implGetExceptionMsg( e2 ) ); + } + catch( Exception& e3 ) + { + StarBASIC::Error( SbERR_INTERNAL_ERROR, implGetExceptionMsg( e3 ) ); + } + } + } + } + else if( pMeth ) + { + if( pHint->GetId() == SBX_HINT_DATAWANTED ) + { + UINT32 nParamCount = 0; + Sequence<Any> args; + BOOL bOutParams = FALSE; + UINT32 i; + if( pParams ) + { + // Anzahl Parameter -1 wegen Param0 == this + nParamCount = (UINT32)pParams->Count() - 1; + args.realloc( nParamCount ); + Any* pAnyArgs = args.getArray(); + + if( mxUnoAccess.is() ) + { + // Infos holen + const Sequence<ParamInfo>& rInfoSeq = pMeth->getParamInfos(); + const ParamInfo* pParamInfos = rInfoSeq.getConstArray(); + UINT32 nUnoParamCount = rInfoSeq.getLength(); + + // Ueberschuessige Parameter ignorieren, Alternative: Error schmeissen + if( nParamCount > nUnoParamCount ) + nParamCount = nUnoParamCount; + + for( i = 0 ; i < nParamCount ; i++ ) + { + const ParamInfo& rInfo = pParamInfos[i]; + const Reference< XIdlClass >& rxClass = rInfo.aType; + //const XIdlClassRef& rxClass = pUnoParams[i]; + + // ACHTUNG: Bei den Sbx-Parametern den Offset nicht vergessen! + pAnyArgs[i] = sbxToUnoValue( pParams->Get( (USHORT)(i+1) ), rxClass ); + + // Wenn es nicht schon feststeht pruefen, ob Out-Parameter vorliegen + if( !bOutParams ) + { + ParamMode aParamMode = rInfo.aMode; + if( aParamMode != ParamMode_IN ) + bOutParams = TRUE; + } + } + } + else if( mxInvocation.is() ) + { + for( i = 0 ; i < nParamCount ; i++ ) + { + // ACHTUNG: Bei den Sbx-Parametern den Offset nicht vergessen! + pAnyArgs[i] = sbxToUnoValue( pParams->Get( (USHORT)(i+1) ) ); + } + } + } + + // Methode callen + try + { + if( mxUnoAccess.is() ) + { + Any aRetAny = pMeth->m_xUnoMethod->invoke( getUnoAny(), args ); + + // Wert von Uno nach Sbx uebernehmen + unoToSbxValue( pVar, aRetAny ); + + // Muessen wir Out-Parameter zurueckkopieren? + if( bOutParams ) + { + const Any* pAnyArgs = args.getConstArray(); + + // Infos holen + const Sequence<ParamInfo>& rInfoSeq = pMeth->getParamInfos(); + const ParamInfo* pParamInfos = rInfoSeq.getConstArray(); + + UINT32 i; + for( i = 0 ; i < nParamCount ; i++ ) + { + const ParamInfo& rInfo = pParamInfos[i]; + ParamMode aParamMode = rInfo.aMode; + if( aParamMode != ParamMode_IN ) + unoToSbxValue( (SbxVariable*)pParams->Get( (USHORT)(i+1) ), pAnyArgs[ i ] ); + } + } + } + else if( mxInvocation.is() ) + { + Sequence< INT16 > OutParamIndex; + Sequence< Any > OutParam; + Any aRetAny = mxInvocation->invoke( pMeth->GetName(), args, OutParamIndex, OutParam ); + + // Wert von Uno nach Sbx uebernehmen + unoToSbxValue( pVar, aRetAny ); + + const INT16* pIndices = OutParamIndex.getConstArray(); + UINT32 nLen = OutParamIndex.getLength(); + if( nLen ) + { + const Any* pNewValues = OutParam.getConstArray(); + for( UINT32 i = 0 ; i < nLen ; i++ ) + { + INT16 iTarget = pIndices[ i ]; + if( iTarget >= nParamCount ) + break; + unoToSbxValue( (SbxVariable*)pParams->Get( (USHORT)(i+1) ), pNewValues[ i ] ); + } + } + } + + // #55460, Parameter hier weghauen, da das in unoToSbxValue() + // bei Arrays wegen #54548 nicht mehr gemacht wird + if( pParams ) + pVar->SetParameters( NULL ); + } + catch( WrappedTargetException& e1 ) + { + StarBASIC::Error( SbERR_INTERNAL_ERROR, implGetWrappedMsg( e1 ) ); + } + catch( RuntimeException& e2 ) + { + StarBASIC::Error( SbERR_INTERNAL_ERROR, implGetExceptionMsg( e2 ) ); + } + catch( Exception& e3 ) + { + StarBASIC::Error( SbERR_INTERNAL_ERROR, implGetExceptionMsg( e3 ) ); + } + /* + catch( NullPointerException& e1 ) + { + } + catch( InvocationTargetException& e2 ) + { + } + catch( IllegalArgumentException& e3) + { + } + */ + } + } + else + SbxObject::SFX_NOTIFY( rBC, rBCType, rHint, rHintType ); + } +} + + +#ifdef INVOCATION_ONLY +// Aus USR +Reference< XInvocation > createDynamicInvocationFor( const Any& aAny ); +#endif + +SbUnoObject::SbUnoObject( const String& aName, const Any& aUnoObj_ ) + : SbxObject( aName ) +{ + static Reference< XIntrospection > xIntrospection; + + // Default-Properties von Sbx wieder rauspruegeln + Remove( XubString( RTL_CONSTASCII_USTRINGPARAM("Name") ), SbxCLASS_DONTCARE ); + Remove( XubString( RTL_CONSTASCII_USTRINGPARAM("Parent") ), SbxCLASS_DONTCARE ); + + // Typ des Objekts pruefen + TypeClass eType = aUnoObj_.getValueType().getTypeClass(); + Reference< XInterface > x; + if( eType == TypeClass_INTERFACE ) + { + // Interface aus dem Any besorgen + x = *(Reference< XInterface >*)aUnoObj_.getValue(); + if( !x.is() ) + return; + } + +#ifdef INVOCATION_ONLY + // Invocation besorgen + mxInvocation = createDynamicInvocationFor( aUnoObj_ ); +#else + // Hat das Object selbst eine Invocation? + mxInvocation = Reference< XInvocation >( x, UNO_QUERY ); +#endif + + if( mxInvocation.is() ) + { + // MaterialHolder holen + mxMaterialHolder = Reference< XMaterialHolder >::query( mxInvocation ); + + // ExactName holen + mxExactName = Reference< XExactName >::query( mxInvocation ); + + // Rest bezieht sich nur auf Introspection + bNeedIntrospection = FALSE; + return; + } + + // Introspection-Flag + bNeedIntrospection = TRUE; + maTmpUnoObj = aUnoObj_; + + + //*** Namen bestimmen *** + BOOL bFatalError = TRUE; + + // Ist es ein Interface oder eine struct? + BOOL bSetClassName = FALSE; + String aClassName; + if( eType == TypeClass_STRUCT ) + { + // Struct ist Ok + bFatalError = FALSE; + + // #67173 Echten Klassen-Namen eintragen + if( aName.Len() == 0 ) + { + aClassName = String( aUnoObj_.getValueType().getTypeName() ); + bSetClassName = TRUE; + } + } + else if( eType == TypeClass_INTERFACE ) + { + // #70197 Interface geht immer durch Typ im Any + bFatalError = FALSE; + + // Nach XIdlClassProvider-Interface fragen + Reference< XIdlClassProvider > xClassProvider( x, UNO_QUERY ); + if( xClassProvider.is() ) + { + // #67173 Echten Klassen-Namen eintragen + if( aName.Len() == 0 ) + { + Sequence< Reference< XIdlClass > > szClasses = xClassProvider->getIdlClasses(); + UINT32 nLen = szClasses.getLength(); + if( nLen ) + { + const Reference< XIdlClass > xImplClass = szClasses.getConstArray()[ 0 ]; + if( xImplClass.is() ) + { + aClassName = String( xImplClass->getName() ); + bSetClassName = TRUE; + } + } + } + } + } + if( bSetClassName ) + SetClassName( aClassName ); + + // Weder Interface noch Struct -> FatalError + if( bFatalError ) + { + StarBASIC::FatalError( SbERR_INTERNAL_ERROR ); + return; + } + + // #67781 Introspection erst on demand durchfuehren +} + +SbUnoObject::~SbUnoObject() +{} + + +// #76470 Introspection on Demand durchfuehren +void SbUnoObject::doIntrospection( void ) +{ + static Reference< XIntrospection > xIntrospection; + + if( !bNeedIntrospection ) + return; + bNeedIntrospection = FALSE; + + if( !xIntrospection.is() ) + { + // Introspection-Service holen + Reference< XMultiServiceFactory > xFactory( utl::getProcessServiceFactory() ); + if ( xFactory.is() ) + { + Reference< XInterface > xI = xFactory->createInstance( rtl::OUString::createFromAscii("com.sun.star.beans.Introspection") ); + if (xI.is()) + xIntrospection = Reference< XIntrospection >::query( xI ); + //xI->queryInterface( ::getCppuType( (const Reference< XIntrospection > *)0 ), xIntrospection ); + } + } + if( !xIntrospection.is() ) + { + StarBASIC::FatalError( SbERR_INTERNAL_ERROR ); + return; + } + + // Introspection durchfuehren + try + { + mxUnoAccess = xIntrospection->inspect( maTmpUnoObj ); + } + catch( RuntimeException& e ) + { + String aMsg = implGetExceptionMsg( e ); + } + + if( !mxUnoAccess.is() ) + { + // #51475 Ungueltiges Objekt kennzeichnen (kein mxMaterialHolder) + return; + } + + // MaterialHolder vom Access holen + mxMaterialHolder = Reference< XMaterialHolder >::query( mxUnoAccess ); + + // ExactName vom Access holen + mxExactName = Reference< XExactName >::query( mxUnoAccess ); +} + + + + +// #67781 Start einer Liste aller SbUnoMethod-Instanzen +static SbUnoMethod* pFirst = NULL; + +void clearUnoMethods( void ) +{ + SbUnoMethod* pMeth = pFirst; + while( pMeth ) + { + pMeth->SbxValue::Clear(); + pMeth = pMeth->pNext; + } +} + + +SbUnoMethod::SbUnoMethod +( + const String& aName, + SbxDataType eSbxType, + Reference< XIdlMethod > xUnoMethod_ +) + : SbxMethod( aName, eSbxType ) +{ + m_xUnoMethod = xUnoMethod_; + pParamInfoSeq = NULL; + + // #67781 Methode in Liste eintragen + pNext = pFirst; + pPrev = NULL; + pFirst = this; + if( pNext ) + pNext->pPrev = this; +} + +SbUnoMethod::~SbUnoMethod() +{ + delete pParamInfoSeq; + + if( this == pFirst ) + pFirst = pNext; + else if( pPrev ) + pPrev->pNext = pNext; + if( pNext ) + pNext->pPrev = pPrev; +} + +const Sequence<ParamInfo>& SbUnoMethod::getParamInfos( void ) +{ + if( !pParamInfoSeq ) + { + Sequence<ParamInfo> aTmp = m_xUnoMethod->getParameterInfos() ; + pParamInfoSeq = new Sequence<ParamInfo>( aTmp ); + //pParamInfoSeq = new Sequence<ParamInfo>( m_xUnoMethod->getParameterInfos() ); + } + return *pParamInfoSeq; +} + +SbUnoProperty::SbUnoProperty +( + const String& aName, + SbxDataType eSbxType, + const Property& aUnoProp_, + UINT32 nId_ +) + : SbxProperty( aName, eSbxType ) +{ + aUnoProp = aUnoProp_; + nId = nId_; + + // #54548, bei bedarf Dummy-Array einsetzen, damit SbiRuntime::CheckArray() geht + static SbxArrayRef xDummyArray = new SbxArray( SbxVARIANT ); + if( eSbxType & SbxARRAY ) + PutObject( xDummyArray ); +} + +SbUnoProperty::~SbUnoProperty() +{} + + +// #72732 Spezielle SbxVariable, die beim put/get prueft, +// ob der Kontext fuer eine UnoClass sinnvoll ist. Sonst +// liegt eventuell ein Schreibfehler im Basic-Source vor. +BOOL UnoClassMemberVariable::Get( SbxValues& rRes ) const +{ + // Zugriff auf den Member einer UnoClass mit Parametern ist unsinnig + if( GetParameters() ) + { + if( mpRuntime ) + mpRuntime->Error( SbERR_NO_METHOD ); + } + return SbxVariable::Get( rRes ); +} + +BOOL UnoClassMemberVariable::Put( const SbxValues& rRes ) +{ + if( bInternalUse ) + { + return SbxVariable::Put( rRes ); + } + // Schreibzugriff auf den Member einer UnoClass ist immer falsch + mpRuntime->Error( SbERR_NO_METHOD ); + return FALSE; +} + +TYPEINIT1(UnoClassMemberVariable,SbxVariable) + + +SbxVariable* SbUnoObject::Find( const XubString& rName, SbxClassType t ) +{ + static Reference< XIdlMethod > xDummyMethod; + static Property aDummyProp; + + SbxVariable* pRes = SbxObject::Find( rName, t ); + + if( bNeedIntrospection ) doIntrospection(); + + // Neu 4.3.1999: Properties on Demand anlegen, daher jetzt perIntrospectionAccess + // suchen, ob doch eine Property oder Methode des geforderten Namens existiert + if( !pRes && mxExactName.is() ) + { + OUString aUNonCaseName( rName ); + OUString aUName = mxExactName->getExactName( aUNonCaseName ); + if( mxUnoAccess.is() ) + { + if( aUName.len() ) + { + if( mxUnoAccess->hasProperty( aUName, PropertyConcept::ALL - PropertyConcept::DANGEROUS ) ) + { + const Property& rProp = mxUnoAccess-> + getProperty( aUName, PropertyConcept::ALL - PropertyConcept::DANGEROUS ); + + // #58455 Wenn die Property void sein kann, muss als Typ Variant gesetzt werden + SbxDataType eSbxType; + if( rProp.Attributes & PropertyAttribute::MAYBEVOID ) + eSbxType = SbxVARIANT; + else + eSbxType = unoToSbxType( TypeToIdlClass( rProp.Type ) ); + + // Property anlegen und reinbraten + SbxVariableRef xVarRef = new SbUnoProperty( rProp.Name, eSbxType, rProp, 0 ); + QuickInsert( (SbxVariable*)xVarRef ); + pRes = xVarRef; + } + else if( mxUnoAccess->hasMethod( aUName, + MethodConcept::ALL - MethodConcept::DANGEROUS ) ) + { + // Methode ansprechen + const Reference< XIdlMethod >& rxMethod = mxUnoAccess-> + getMethod( aUName, MethodConcept::ALL - MethodConcept::DANGEROUS ); + + // SbUnoMethode anlegen und reinbraten + SbxVariableRef xMethRef = new SbUnoMethod + ( rxMethod->getName(), unoToSbxType( rxMethod->getReturnType() ), rxMethod ); + QuickInsert( (SbxVariable*)xMethRef ); + pRes = xMethRef; + } + } + + // Wenn immer noch nichts gefunden wurde, muss geprueft werden, ob NameAccess vorliegt + if( !pRes ) + { + try + { + Reference< XNameAccess > xNameAccess( mxUnoAccess->queryAdapter( ::getCppuType( (const Reference< XPropertySet > *)0 ) ), UNO_QUERY ); + OUString aUName( rName ); + + if( xNameAccess.is() && xNameAccess->hasByName( aUName ) ) + { + Any aAny = xNameAccess->getByName( aUName ); + + // ACHTUNG: Die hier erzeugte Variable darf wegen bei XNameAccess + // nicht als feste Property in das Object aufgenommen werden und + // wird daher nirgendwo gehalten. + // Wenn das Probleme gibt, muss das kuenstlich gemacht werden oder + // es muss eine Klasse SbUnoNameAccessProperty geschaffen werden, + // bei der die Existenz staendig neu ueberprueft und die ggf. weg- + // geworfen wird, wenn der Name nicht mehr gefunden wird. + pRes = new SbxVariable( SbxVARIANT ); + unoToSbxValue( pRes, aAny ); + } + } + catch( WrappedTargetException& e1 ) + { + // Anlegen, damit der Exception-Fehler nicht ueberschrieben wird + if( !pRes ) + pRes = new SbxVariable( SbxVARIANT ); + + StarBASIC::Error( SbERR_INTERNAL_ERROR, implGetWrappedMsg( e1 ) ); + } + catch( RuntimeException& e2 ) + { + // Anlegen, damit der Exception-Fehler nicht ueberschrieben wird + if( !pRes ) + pRes = new SbxVariable( SbxVARIANT ); + + StarBASIC::Error( SbERR_INTERNAL_ERROR, implGetExceptionMsg( e2 ) ); + } + } + } + else if( mxInvocation.is() ) + { + if( aUName.len() ) + { + if( mxInvocation->hasProperty( aUName ) ) + { + // Property anlegen und reinbraten + SbxVariableRef xVarRef = new SbUnoProperty( aUName, SbxVARIANT, aDummyProp, 0 ); + QuickInsert( (SbxVariable*)xVarRef ); + pRes = xVarRef; + } + else if( mxInvocation->hasMethod( aUName ) ) + { + // SbUnoMethode anlegen und reinbraten + SbxVariableRef xMethRef = new SbUnoMethod( aUName, SbxVARIANT, xDummyMethod ); + QuickInsert( (SbxVariable*)xMethRef ); + pRes = xMethRef; + } + } + } + } + + // Ganz am Schluss noch pruefen, ob die Dbg_-Properties gemeint sind + + if( !pRes ) + { + if( rName.EqualsIgnoreCaseAscii( ID_DBG_SUPPORTEDINTERFACES ) || + rName.EqualsIgnoreCaseAscii( ID_DBG_PROPERTIES ) || + rName.EqualsIgnoreCaseAscii( ID_DBG_METHODS ) ) + { + // Anlegen + implCreateDbgProperties(); + + // Jetzt muessen sie regulaer gefunden werden + pRes = SbxObject::Find( rName, SbxCLASS_DONTCARE ); + } + } + return pRes; +} + +// Hilfs-Methode zum Anlegen der dbg_-Properties +void SbUnoObject::implCreateDbgProperties( void ) +{ + Property aProp; + + // Id == -1: Implementierte Interfaces gemaess ClassProvider anzeigen + SbxVariableRef xVarRef = new SbUnoProperty( ID_DBG_SUPPORTEDINTERFACES, SbxSTRING, aProp, -1 ); + QuickInsert( (SbxVariable*)xVarRef ); + + // Id == -2: Properties ausgeben + xVarRef = new SbUnoProperty( ID_DBG_PROPERTIES, SbxSTRING, aProp, -2 ); + QuickInsert( (SbxVariable*)xVarRef ); + + // Id == -3: Methoden ausgeben + xVarRef = new SbUnoProperty( ID_DBG_METHODS, SbxSTRING, aProp, -3 ); + QuickInsert( (SbxVariable*)xVarRef ); +} + +void SbUnoObject::implCreateAll( void ) +{ + // Bestehende Methoden und Properties alle wieder wegwerfen + pMethods = new SbxArray; + pProps = new SbxArray; + + if( bNeedIntrospection ) doIntrospection(); + + // Instrospection besorgen + Reference< XIntrospectionAccess > xAccess = mxUnoAccess; + if( !xAccess.is() ) + { + if( mxInvocation.is() ) + xAccess = mxInvocation->getIntrospection(); + } + if( !xAccess.is() ) + return; + + // Properties anlegen + Sequence<Property> props = xAccess->getProperties( PropertyConcept::ALL - PropertyConcept::DANGEROUS ); + UINT32 nPropCount = props.getLength(); + const Property* pProps = props.getConstArray(); + + UINT32 i; + for( i = 0 ; i < nPropCount ; i++ ) + { + const Property& rProp = pProps[ i ]; + + // #58455 Wenn die Property void sein kann, muss als Typ Variant gesetzt werden + SbxDataType eSbxType; + if( rProp.Attributes & PropertyAttribute::MAYBEVOID ) + eSbxType = SbxVARIANT; + else + eSbxType = unoToSbxType( TypeToIdlClass( rProp.Type ) ); + + // Property anlegen und reinbraten + SbxVariableRef xVarRef = new SbUnoProperty( rProp.Name, eSbxType, rProp, i ); + QuickInsert( (SbxVariable*)xVarRef ); + } + + // Dbg_-Properties anlegen + implCreateDbgProperties(); + + // Methoden anlegen + Sequence< Reference< XIdlMethod > > aMethodSeq = xAccess->getMethods + ( MethodConcept::ALL - MethodConcept::DANGEROUS ); + UINT32 nMethCount = aMethodSeq.getLength(); + const Reference< XIdlMethod >* pMethods = aMethodSeq.getConstArray(); + for( i = 0 ; i < nMethCount ; i++ ) + { + // Methode ansprechen + const Reference< XIdlMethod >& rxMethod = pMethods[i]; + + // SbUnoMethode anlegen und reinbraten + SbxVariableRef xMethRef = new SbUnoMethod + ( rxMethod->getName(), unoToSbxType( rxMethod->getReturnType() ), rxMethod ); + QuickInsert( (SbxVariable*)xMethRef ); + } +} + + +// Wert rausgeben +Any SbUnoObject::getUnoAny( void ) +{ + Any aRetAny; + if( bNeedIntrospection ) doIntrospection(); + if( mxMaterialHolder.is() ) + aRetAny = mxMaterialHolder->getMaterial(); + else if( mxInvocation.is() ) + aRetAny <<= mxInvocation; + return aRetAny; +} + +// Hilfsmethode zum Anlegen einer Uno-Struct per CoreReflection +SbUnoObject* Impl_CreateUnoStruct( const String& aClassName ) +{ + // CoreReflection holen + Reference< XIdlReflection > xCoreReflection = getCoreReflection_Impl(); + if( !xCoreReflection.is() ) + return NULL; + + // Klasse suchen + Reference< XIdlClass > xClass = xCoreReflection->forName( aClassName ); + if( !xClass.is() ) + return NULL; + + // Ist es ueberhaupt ein struct? + TypeClass eType = xClass->getTypeClass(); + if( eType != TypeClass_STRUCT ) + return NULL; + + // Instanz erzeugen + Any aNewAny; + xClass->createObject( aNewAny ); + + // SbUnoObject daraus basteln + SbUnoObject* pUnoObj = new SbUnoObject( aClassName, aNewAny ); + return pUnoObj; +} + + +// Factory-Klasse fuer das Anlegen von Uno-Structs per DIM AS NEW +SbxBase* SbUnoFactory::Create( UINT16 nSbxId, UINT32 ) +{ + // Ueber SbxId laeuft in Uno nix + return NULL; +} + +SbxObject* SbUnoFactory::CreateObject( const String& rClassName ) +{ + return Impl_CreateUnoStruct( rClassName ); +} + + +// Provisorische Schnittstelle fuer UNO-Anbindung +// Liefert ein SbxObject, das ein Uno-Interface wrappt +SbxObjectRef GetSbUnoObject( const String& aName, const Any& aUnoObj_ ) +{ + return new SbUnoObject( aName, aUnoObj_ ); +} + +void RTL_Impl_CreateUnoStruct( StarBASIC* pBasic, SbxArray& rPar, BOOL bWrite ) +{ + // Wir brauchen mindestens 1 Parameter + if ( rPar.Count() < 2 ) + { + StarBASIC::Error( SbERR_BAD_ARGUMENT ); + return; + } + + // Klassen-Name der struct holen + String aClassName = rPar.Get(1)->GetString(); + + // Versuchen, gleichnamige Struct zu erzeugen + SbUnoObjectRef xUnoObj = Impl_CreateUnoStruct( aClassName ); + if( !xUnoObj ) + return; + + // Objekt zurueckliefern + SbxVariableRef refVar = rPar.Get(0); + refVar->PutObject( (SbUnoObject*)xUnoObj ); +} + +void RTL_Impl_CreateUnoService( StarBASIC* pBasic, SbxArray& rPar, BOOL bWrite ) +{ + // Wir brauchen mindestens 1 Parameter + if ( rPar.Count() < 2 ) + { + StarBASIC::Error( SbERR_BAD_ARGUMENT ); + return; + } + + // Klassen-Name der struct holen + String aServiceName = rPar.Get(1)->GetString(); + + // Service suchen und instanzieren + Reference< XMultiServiceFactory > xFactory( utl::getProcessServiceFactory() ); + Reference< XInterface > xInterface; + if ( xFactory.is() ) + { + try + { + xInterface = xFactory->createInstance( aServiceName ); + } + catch( WrappedTargetException& e1 ) + { + StarBASIC::Error( SbERR_INTERNAL_ERROR, implGetWrappedMsg( e1 ) ); + } + catch( RuntimeException& e2 ) + { + StarBASIC::Error( SbERR_INTERNAL_ERROR, implGetExceptionMsg( e2 ) ); + } + } + + SbxVariableRef refVar = rPar.Get(0); + if( xInterface.is() ) + { + Any aAny; + aAny <<= xInterface; + + // SbUnoObject daraus basteln und zurueckliefern + SbUnoObjectRef xUnoObj = new SbUnoObject( aServiceName, aAny ); + if( xUnoObj->getUnoAny().getValueType().getTypeClass() != TypeClass_VOID ) + { + // Objekt zurueckliefern + refVar->PutObject( (SbUnoObject*)xUnoObj ); + } + else + { + refVar->PutObject( NULL ); + } + } + else + { + refVar->PutObject( NULL ); + } +} + +void RTL_Impl_GetProcessServiceManager( StarBASIC* pBasic, SbxArray& rPar, BOOL bWrite ) +{ + SbxVariableRef refVar = rPar.Get(0); + + // Globalen Service-Manager holen + Reference< XMultiServiceFactory > xFactory( utl::getProcessServiceFactory() ); + if( xFactory.is() ) + { + Any aAny; + aAny <<= xFactory; + + // SbUnoObject daraus basteln und zurueckliefern + SbUnoObjectRef xUnoObj = new SbUnoObject( String( RTL_CONSTASCII_USTRINGPARAM("ProcessServiceManager") ), aAny ); + refVar->PutObject( (SbUnoObject*)xUnoObj ); + } + else + { + refVar->PutObject( NULL ); + } +} + +void RTL_Impl_HasInterfaces( StarBASIC* pBasic, SbxArray& rPar, BOOL bWrite ) +{ + // Wir brauchen mindestens 2 Parameter + USHORT nParCount = rPar.Count(); + if( nParCount < 3 ) + { + StarBASIC::Error( SbERR_BAD_ARGUMENT ); + return; + } + + // Variable fuer Rueckgabewert + SbxVariableRef refVar = rPar.Get(0); + refVar->PutBool( FALSE ); + + // Uno-Objekt holen + SbxBaseRef pObj = (SbxBase*)rPar.Get( 1 )->GetObject(); + if( !(pObj && pObj->ISA(SbUnoObject)) ) + return; + Any aAny = ((SbUnoObject*)(SbxBase*)pObj)->getUnoAny(); + TypeClass eType = aAny.getValueType().getTypeClass(); + if( eType != TypeClass_INTERFACE ) + return; + + // Interface aus dem Any besorgen + Reference< XInterface > x = *(Reference< XInterface >*)aAny.getValue(); + + // CoreReflection holen + Reference< XIdlReflection > xCoreReflection = getCoreReflection_Impl(); + if( !xCoreReflection.is() ) + return; + + for( USHORT i = 2 ; i < nParCount ; i++ ) + { + // Interface-Name der struct holen + String aIfaceName = rPar.Get( i )->GetString(); + + // Klasse suchen + Reference< XIdlClass > xClass = xCoreReflection->forName( aIfaceName ); + if( !xClass.is() ) + return; + + // Pruefen, ob das Interface unterstuetzt wird + OUString aClassName = xClass->getName(); + Type aClassType( xClass->getTypeClass(), aClassName.getStr() ); + if( !x->queryInterface( aClassType ).hasValue() ) + return; + } + + // Alles hat geklappt, dann TRUE liefern + refVar->PutBool( TRUE ); +} + +void RTL_Impl_IsUnoStruct( StarBASIC* pBasic, SbxArray& rPar, BOOL bWrite ) +{ + // Wir brauchen mindestens 1 Parameter + if ( rPar.Count() < 2 ) + { + StarBASIC::Error( SbERR_BAD_ARGUMENT ); + return; + } + + // Variable fuer Rueckgabewert + SbxVariableRef refVar = rPar.Get(0); + refVar->PutBool( FALSE ); + + // Uno-Objekt holen + SbxVariableRef xParam = rPar.Get( 1 ); + if( !xParam->IsObject() ) + return; + SbxBaseRef pObj = (SbxBase*)rPar.Get( 1 )->GetObject(); + if( !(pObj && pObj->ISA(SbUnoObject)) ) + return; + Any aAny = ((SbUnoObject*)(SbxBase*)pObj)->getUnoAny(); + TypeClass eType = aAny.getValueType().getTypeClass(); + if( eType == TypeClass_STRUCT ) + refVar->PutBool( TRUE ); +} + + +void RTL_Impl_EqualUnoObjects( StarBASIC* pBasic, SbxArray& rPar, BOOL bWrite ) +{ + if ( rPar.Count() < 3 ) + { + StarBASIC::Error( SbERR_BAD_ARGUMENT ); + return; + } + + // Variable fuer Rueckgabewert + SbxVariableRef refVar = rPar.Get(0); + refVar->PutBool( FALSE ); + + // Uno-Objekte holen + SbxVariableRef xParam1 = rPar.Get( 1 ); + if( !xParam1->IsObject() ) + return; + SbxBaseRef pObj1 = (SbxBase*)xParam1->GetObject(); + if( !(pObj1 && pObj1->ISA(SbUnoObject)) ) + return; + Any aAny1 = ((SbUnoObject*)(SbxBase*)pObj1)->getUnoAny(); + TypeClass eType1 = aAny1.getValueType().getTypeClass(); + if( eType1 != TypeClass_INTERFACE ) + return; + Reference< XInterface > x1; + aAny1 >>= x1; + //XInterfaceRef x1 = *(XInterfaceRef*)aAny1.get(); + + SbxVariableRef xParam2 = rPar.Get( 2 ); + if( !xParam2->IsObject() ) + return; + SbxBaseRef pObj2 = (SbxBase*)xParam2->GetObject(); + if( !(pObj2 && pObj2->ISA(SbUnoObject)) ) + return; + Any aAny2 = ((SbUnoObject*)(SbxBase*)pObj2)->getUnoAny(); + TypeClass eType2 = aAny2.getValueType().getTypeClass(); + if( eType2 != TypeClass_INTERFACE ) + return; + Reference< XInterface > x2; + aAny2 >>= x2; + //XInterfaceRef x2 = *(XInterfaceRef*)aAny2.get(); + + if( x1 == x2 ) + refVar->PutBool( TRUE ); +} + +// Funktion, um einen globalen Bezeichner im +// UnoScope zu suchen und fuer Sbx zu wrappen +SbxVariable* findUnoClass( const String& rName ) +{ + // CoreReflection holen + Reference< XIdlReflection > xCoreReflection = getCoreReflection_Impl(); + if( !xCoreReflection.is() ) + return NULL; + + // Klasse suchen + Reference< XIdlClass > xClass = xCoreReflection->forName( rName ); + + // #72382 Klasse wird jetzt immer angelegt, da Module unbekannt sind + SbUnoClass* pUnoClass = new SbUnoClass( rName, xClass ); + return pUnoClass; +} + +SbxVariable* SbUnoClass::Find( const XubString& rName, SbxClassType t ) +{ + SbxVariable* pRes = SbxObject::Find( rName, t ); + + // Wenn nichts gefunden wird, ist das Sub-Modul noch nicht bekannt + if( !pRes ) + { + // Wenn es schon eine Klasse ist, nach einen Feld fragen + if( m_xClass.is() ) + { + // Ist es ein Field + OUString aUStr( rName ); + Reference< XIdlField > xField = m_xClass->getField( aUStr ); + Reference< XIdlClass > xClass; + if( xField.is() ) + { + try + { + Any aAny; + aAny = xField->get( aAny ); + + // Nach Sbx wandeln + pRes = new SbxVariable( SbxVARIANT ); + pRes->SetName( rName ); + unoToSbxValue( pRes, aAny ); + } + catch( WrappedTargetException& e1 ) + { + StarBASIC::Error( SbERR_INTERNAL_ERROR, implGetWrappedMsg( e1 ) ); + } + catch( RuntimeException& e2 ) + { + StarBASIC::Error( SbERR_INTERNAL_ERROR, implGetExceptionMsg( e2 ) ); + } + } + } + else + { + // Vollqualifizierten Namen erweitern + String aNewName = GetName(); + aNewName.AppendAscii( "." ); + aNewName += rName; + + // CoreReflection holen + Reference< XIdlReflection > xCoreReflection = getCoreReflection_Impl(); + if( xCoreReflection.is() ) + { + // Ist es eine Konstante? + Reference< XHierarchicalNameAccess > xHarryName( xCoreReflection, UNO_QUERY ); + if( xHarryName.is() ) + { + try + { + Any aValue = xHarryName->getByHierarchicalName( aNewName ); + TypeClass eType = aValue.getValueType().getTypeClass(); + + // Interface gefunden? Dann ist es eine Klasse + if( eType == TypeClass_INTERFACE ) + { + Reference< XInterface > xIface = *(Reference< XInterface >*)aValue.getValue(); + Reference< XIdlClass > xClass( xIface, UNO_QUERY ); + if( xClass.is() ) + { + pRes = new SbxVariable( SbxVARIANT ); + SbxObjectRef xWrapper = (SbxObject*)new SbUnoClass( aNewName, xClass ); + pRes->PutObject( xWrapper ); + + } + } + else + { + pRes = new SbxVariable( SbxVARIANT ); + unoToSbxValue( pRes, aValue ); + } + } + catch( NoSuchElementException& e1 ) + { + String aMsg = implGetExceptionMsg( e1 ); + } + } + + // Sonst wieder als Klasse annehmen + if( !pRes ) + { + // neue Klasse erzeugen + Reference< XIdlClass > xClass; + pRes = new SbxVariable( SbxVARIANT ); + SbxObjectRef xWrapper = (SbxObject*)new SbUnoClass( aNewName, xClass ); + pRes->PutObject( xWrapper ); + } + } + } + + if( pRes ) + { + pRes->SetName( rName ); + + // Variable einfuegen, damit sie spaeter im Find gefunden wird + QuickInsert( pRes ); + + // Uns selbst gleich wieder als Listener rausnehmen, + // die Werte sind alle konstant + if( pRes->IsBroadcaster() ) + EndListening( pRes->GetBroadcaster(), TRUE ); + } + } + return pRes; +} + + +//======================================================================== +//======================================================================== +//======================================================================== + +// Implementation eines EventAttacher-bezogenen AllListeners, der +// nur einzelne Events an einen allgemeinen AllListener weiterleitet +class BasicAllListener_Impl : public BasicAllListenerHelper +{ + virtual void firing_impl(const AllEventObject& Event, Any* pRet); + +public: + SbxObjectRef xSbxObj; + OUString aPrefixName; + + BasicAllListener_Impl( const OUString& aPrefixName ); + ~BasicAllListener_Impl(); + + // Methoden von XInterface + //virtual BOOL queryInterface( Uik aUik, Reference< XInterface > & rOut ); + + // Methoden von XAllListener + virtual void SAL_CALL firing(const AllEventObject& Event) throw ( RuntimeException ); + virtual Any SAL_CALL approveFiring(const AllEventObject& Event) throw ( RuntimeException ); + + // Methoden von XEventListener + virtual void SAL_CALL disposing(const EventObject& Source) throw ( RuntimeException ); +}; + + +//======================================================================== +BasicAllListener_Impl::BasicAllListener_Impl +( + const OUString & aPrefixName_ +) + : aPrefixName( aPrefixName_ ) +{ +} + +//======================================================================== +BasicAllListener_Impl::~BasicAllListener_Impl() +{ +} + +//======================================================================== + +void BasicAllListener_Impl::firing_impl( const AllEventObject& Event, Any* pRet ) +{ + NAMESPACE_VOS(OGuard) guard( Application::GetSolarMutex() ); + + if( xSbxObj.Is() ) + { + OUString aMethodName = aPrefixName; + aMethodName = aMethodName + Event.MethodName; + + SbxVariable * pP = xSbxObj; + while( pP->GetParent() ) + { + pP = pP->GetParent(); + StarBASIC * pLib = PTR_CAST(StarBASIC,pP); + if( pLib ) + { + // In Basic Array anlegen + SbxArrayRef xSbxArray = new SbxArray( SbxVARIANT ); + const Any * pArgs = Event.Arguments.getConstArray(); + INT32 nCount = Event.Arguments.getLength(); + for( INT32 i = 0; i < nCount; i++ ) + { + // Elemente wandeln + SbxVariableRef xVar = new SbxVariable( SbxVARIANT ); + unoToSbxValue( (SbxVariable*)xVar, pArgs[i] ); + xSbxArray->Put( xVar, i +1 ); + } + + pLib->Call( aMethodName, xSbxArray ); + + // Return-Wert aus dem Param-Array holen, wenn verlangt + if( pRet ) + { + SbxVariable* pVar = xSbxArray->Get( 0 ); + if( pVar ) + *pRet = sbxToUnoValue( pVar ); + } + break; + } + } + } +} + + +// Methoden von XAllListener +void BasicAllListener_Impl::firing( const AllEventObject& Event ) throw ( RuntimeException ) +{ + firing_impl( Event, NULL ); +} + +Any BasicAllListener_Impl::approveFiring( const AllEventObject& Event ) throw ( RuntimeException ) +{ + Any aRetAny; + firing_impl( Event, &aRetAny ); + return aRetAny; +} + +//======================================================================== +// Methoden von XEventListener +void BasicAllListener_Impl ::disposing(const EventObject& ) throw ( RuntimeException ) +{ + NAMESPACE_VOS(OGuard) guard( Application::GetSolarMutex() ); + + xSbxObj.Clear(); +} + + + +//************************************************************************* +// class InvocationToAllListenerMapper +// helper class to map XInvocation to XAllListener (also in project eventattacher!) +//************************************************************************* +class InvocationToAllListenerMapper : public WeakImplHelper1< XInvocation > +{ +public: + InvocationToAllListenerMapper( const Reference< XIdlClass >& ListenerType, + const Reference< XAllListener >& AllListener, const Any& Helper ); + + // XInvocation + virtual Reference< XIntrospectionAccess > SAL_CALL getIntrospection(void) throw( RuntimeException ); + virtual Any SAL_CALL invoke(const OUString& FunctionName, const Sequence< Any >& Params, Sequence< sal_Int16 >& OutParamIndex, Sequence< Any >& OutParam) + throw( IllegalArgumentException, CannotConvertException, InvocationTargetException, RuntimeException ); + virtual void SAL_CALL setValue(const OUString& PropertyName, const Any& Value) + throw( UnknownPropertyException, CannotConvertException, InvocationTargetException, RuntimeException ); + virtual Any SAL_CALL getValue(const OUString& PropertyName) throw( UnknownPropertyException, RuntimeException ); + virtual sal_Bool SAL_CALL hasMethod(const OUString& Name) throw( RuntimeException ); + virtual sal_Bool SAL_CALL hasProperty(const OUString& Name) throw( RuntimeException ); + +private: + Reference< XIdlReflection > m_xCoreReflection; + Reference< XAllListener > m_xAllListener; + Reference< XIdlClass > m_xListenerType; + Any m_Helper; +}; + + +// Function to replace AllListenerAdapterService::createAllListerAdapter +Reference< XInterface > createAllListenerAdapter +( + const Reference< XInvocationAdapterFactory >& xInvocationAdapterFactory, + const Reference< XIdlClass >& xListenerType, + const Reference< XAllListener >& xListener, + const Any& Helper +) +{ + Reference< XInterface > xAdapter; + if( xInvocationAdapterFactory.is() && xListenerType.is() && xListener.is() ) + { + Reference< XInvocation > xInvocationToAllListenerMapper = + (XInvocation*)new InvocationToAllListenerMapper( xListenerType, xListener, Helper ); + Type aListenerType( xListenerType->getTypeClass(), xListenerType->getName() ); + xAdapter = xInvocationAdapterFactory->createAdapter( xInvocationToAllListenerMapper, aListenerType ); + } + return xAdapter; +} + + +//-------------------------------------------------------------------------------------------------- +// InvocationToAllListenerMapper +InvocationToAllListenerMapper::InvocationToAllListenerMapper + ( const Reference< XIdlClass >& ListenerType, const Reference< XAllListener >& AllListener, const Any& Helper ) + : m_xAllListener( AllListener ) + , m_Helper( Helper ) + , m_xListenerType( ListenerType ) +{ +} + +//************************************************************************* +Reference< XIntrospectionAccess > SAL_CALL InvocationToAllListenerMapper::getIntrospection(void) + throw( RuntimeException ) +{ + return Reference< XIntrospectionAccess >(); +} + +//************************************************************************* +Any SAL_CALL InvocationToAllListenerMapper::invoke(const OUString& FunctionName, const Sequence< Any >& Params, + Sequence< sal_Int16 >& OutParamIndex, Sequence< Any >& OutParam) + throw( IllegalArgumentException, CannotConvertException, + InvocationTargetException, RuntimeException ) +{ + Any aRet; + + // Check if to firing or approveFiring has to be called + Reference< XIdlMethod > xMethod = m_xListenerType->getMethod( FunctionName ); + sal_Bool bApproveFiring = sal_False; + if( !xMethod.is() ) + return aRet; + Reference< XIdlClass > xReturnType = xMethod->getReturnType(); + Sequence< Reference< XIdlClass > > aExceptionSeq = xMethod->getExceptionTypes(); + if( ( xReturnType.is() && xReturnType->getTypeClass() != TypeClass_VOID ) || + aExceptionSeq.getLength() > 0 ) + { + bApproveFiring = sal_True; + } + else + { + Sequence< ParamInfo > aParamSeq = xMethod->getParameterInfos(); + sal_uInt32 nParamCount = aParamSeq.getLength(); + if( nParamCount > 1 ) + { + const ParamInfo* pInfos = aParamSeq.getConstArray(); + for( sal_uInt32 i = 0 ; i < nParamCount ; i++ ) + { + if( pInfos[ i ].aMode != ParamMode_IN ) + { + bApproveFiring = sal_True; + break; + } + } + } + } + + AllEventObject aAllEvent; + aAllEvent.Source = (OWeakObject*) this; + aAllEvent.Helper = m_Helper; + aAllEvent.ListenerType = Type(m_xListenerType->getTypeClass(), m_xListenerType->getName() ); + aAllEvent.MethodName = FunctionName; + aAllEvent.Arguments = Params; + if( bApproveFiring ) + aRet = m_xAllListener->approveFiring( aAllEvent ); + else + m_xAllListener->firing( aAllEvent ); + return aRet; +} + +//************************************************************************* +void SAL_CALL InvocationToAllListenerMapper::setValue(const OUString& PropertyName, const Any& Value) + throw( UnknownPropertyException, CannotConvertException, + InvocationTargetException, RuntimeException ) +{ +} + +//************************************************************************* +Any SAL_CALL InvocationToAllListenerMapper::getValue(const OUString& PropertyName) + throw( UnknownPropertyException, RuntimeException ) +{ + return Any(); +} + +//************************************************************************* +sal_Bool SAL_CALL InvocationToAllListenerMapper::hasMethod(const OUString& Name) + throw( RuntimeException ) +{ + Reference< XIdlMethod > xMethod = m_xListenerType->getMethod( Name ); + return xMethod.is(); +} + +//************************************************************************* +sal_Bool SAL_CALL InvocationToAllListenerMapper::hasProperty(const OUString& Name) + throw( RuntimeException ) +{ + Reference< XIdlField > xField = m_xListenerType->getField( Name ); + return xField.is(); +} + +//======================================================================== +// Uno-Service erzeugen +// 1. Parameter == Prefix-Name der Makros +// 2. Parameter == voll qualifizierter Name des Listeners +void SbRtl_CreateUnoListener( StarBASIC* pBasic, SbxArray& rPar, BOOL bWrite ) +//RTLFUNC(CreateUnoListener) +{ + // Wir brauchen mindestens 1 Parameter + if ( rPar.Count() != 3 ) + { + StarBASIC::Error( SbERR_BAD_ARGUMENT ); + return; + } + + // Klassen-Name der struct holen + String aPrefixName = rPar.Get(1)->GetString(); + String aListenerClassName = rPar.Get(2)->GetString(); + + // CoreReflection holen + Reference< XIdlReflection > xCoreReflection = getCoreReflection_Impl(); + if( !xCoreReflection.is() ) + return; + + // AllListenerAdapterService holen + Reference< XMultiServiceFactory > xFactory( utl::getProcessServiceFactory() ); + if( !xFactory.is() ) + return; + + // Klasse suchen + Reference< XIdlClass > xClass = xCoreReflection->forName( aListenerClassName ); + if( !xClass.is() ) + return; + + // AB, 30.11.1999 InvocationAdapterFactory holen + Reference< XInvocationAdapterFactory > xInvocationAdapterFactory = Reference< XInvocationAdapterFactory >( + xFactory->createInstance( rtl::OUString::createFromAscii("com.sun.star.script.InvocationAdapterFactory") ), UNO_QUERY ); + + BasicAllListener_Impl * p; + Reference< XAllListener > xAllLst = p = new BasicAllListener_Impl( aPrefixName ); + Any aTmp; + Reference< XInterface > xLst = createAllListenerAdapter( xInvocationAdapterFactory, xClass, xAllLst, aTmp ); + if( !xLst.is() ) + return; + + OUString aClassName = xClass->getName(); + Type aClassType( xClass->getTypeClass(), aClassName.getStr() ); + aTmp = xLst->queryInterface( aClassType ); + if( !aTmp.hasValue() ) + return; + + p->xSbxObj = new SbUnoObject( aListenerClassName, aTmp ); + p->xSbxObj->SetParent( pBasic ); + + // Objekt zurueckliefern + SbxVariableRef refVar = rPar.Get(0); + refVar->PutObject( p->xSbxObj ); +} + + + diff --git a/basic/source/classes/sbxmod.cxx b/basic/source/classes/sbxmod.cxx new file mode 100644 index 000000000000..187a5b45280c --- /dev/null +++ b/basic/source/classes/sbxmod.cxx @@ -0,0 +1,1984 @@ +/************************************************************************* + * + * $RCSfile: sbxmod.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: hr $ $Date: 2000-09-18 16:12:10 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (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.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#if STLPORT_VERSION < 321 +#include <tools/presys.h> +#include <list> +#include <tools/postsys.h> +#else +#include <list> +#endif + +#include <vos/macros.hxx> +#include <vcl/svapp.hxx> + +#ifndef _STREAM_HXX //autogen +#include <tools/stream.hxx> +#endif +#ifndef _SFXBRDCST_HXX //autogen +#include <svtools/brdcst.hxx> +#endif +#ifndef _SHL_HXX //autogen +#include <tools/shl.hxx> +#endif +#pragma hdrstop +#include <svtools/sbx.hxx> +#include "sb.hxx" +#include <sbjsmeth.hxx> +#include "sbjsmod.hxx" +#include "sbintern.hxx" +#include "image.hxx" +#include "opcodes.hxx" +#include "runtime.hxx" +#include "token.hxx" +#include "sbunoobj.hxx" +#include <hilight.hxx> +#include <basrdll.hxx> + + +// for the bsearch +#ifdef WNT +#define CDECL _cdecl +#endif +#ifdef OS2 +#define CDECL _Optlink +#endif +#if defined(UNX) || defined(MAC) +#define CDECL +#endif + + +// TEST +#include <stdio.h> + +#include "segmentc.hxx" +#pragma SW_SEGMENT_CLASS( SBASIC, SBASIC_CODE ) + +TYPEINIT1(SbModule,SbxObject) +TYPEINIT1(SbMethod,SbxMethod) +TYPEINIT1(SbProperty,SbxProperty) +TYPEINIT1(SbJScriptModule,SbModule) +TYPEINIT1(SbJScriptMethod,SbMethod) + +SV_DECL_VARARR(SbiBreakpoints,USHORT,4,4) +SV_IMPL_VARARR(SbiBreakpoints,USHORT) + + +SV_IMPL_VARARR(HighlightPortions, HighlightPortion) + +// ########################################################################## +// ACHTUNG!!! Alle Woerter dieser Tabelle mssen KLEIN geschrieben werden!!! +// ########################################################################## +static char* strListBasicKeyWords[] = { + "access", + "alias", + "and", + "any", + "append", + "as", + "base", + "binary", + "boolean", + "byval", + "call", + "case", + "cdecl", + "close", + "compare", + "const", + "currency", + "date", + "declare", + "defbool", + "defcur", + "defdate", + "defdbl", + "deferr", + "defint", + "deflng", + "defobj", + "defsng", + "defstr", + "defvar", + "dim", + "do", + "double", + "each", + "else", + "elseif", + "end", + "end function", + "end if", + "end select", + "end sub", + "end type", + "endif", + "eqv", + "erase", + "error", + "exit", + "explicit", + "for", + "function", + "global", + "gosub", + "goto", + "if", + "imp", + "in", + "input", + "integer", + "is", + "let", + "lib" + "line", + "line input", + "local", + "lock", + "long", + "loop", + "lprint", + "lset", + "mod", + "name", + "new", + "next", + "not", + "object", + "on", + "open", + "option", + "optional", + "or", + "output", + "preserve", + "print", + "private", + "public", + "random", + "read", + "redim", + "rem", + "resume", + "return", + "rset", + "select", + "set", + "shared", + "single", + "static", + "step", + "stop", + "string", + "sub", + "system", + "text", + "then", + "to", + "type", + "until", + "variant", + "wend", + "while", + "with", + "write", + "xor" +}; + +int CDECL compare_strings( const void *arg1, const void *arg2 ) +{ + char* pCh = *(char**)arg2; + return strcmp( (char *)arg1, *(char **)arg2 ); +} + + + +///////////////////////////////////////////////////////////////////////////// + +// Ein BASIC-Modul hat EXTSEARCH gesetzt, damit die im Modul enthaltenen +// Elemente von anderen Modulen aus gefunden werden koennen. + +SbModule::SbModule( const String& rName ) + : SbxObject( String( RTL_CONSTASCII_USTRINGPARAM("StarBASICModule") ) ), + pImage( NULL ), pBreaks( NULL ) +{ + SetName( rName ); + SetFlag( SBX_EXTSEARCH | SBX_GBLSEARCH ); +} + +SbModule::~SbModule() +{ + if( pImage ) + delete pImage; + if( pBreaks ) + delete pBreaks; +} + +BOOL SbModule::IsCompiled() const +{ + return BOOL( pImage != 0 ); +} + +// Aus dem Codegenerator: Loeschen des Images und Invalidieren der Entries + +void SbModule::StartDefinitions() +{ + delete pImage; pImage = NULL; + // Methoden und Properties bleiben erhalten, sind jedoch ungueltig + // schliesslich sind ja u.U. die Infos belegt + USHORT i; + for( i = 0; i < pMethods->Count(); i++ ) + { + SbMethod* p = PTR_CAST(SbMethod,pMethods->Get( i ) ); + if( p ) + p->bInvalid = TRUE; + } + for( i = 0; i < pProps->Count(); ) + { + SbProperty* p = PTR_CAST(SbProperty,pProps->Get( i ) ); + if( p ) + pProps->Remove( i ); + else + i++; + } +} + +// Methode anfordern/anlegen + +SbMethod* SbModule::GetMethod( const String& rName, SbxDataType t ) +{ + SbxVariable* p = pMethods->Find( rName, SbxCLASS_METHOD ); + SbMethod* pMeth = p ? PTR_CAST(SbMethod,p) : NULL; + if( p && !pMeth ) + pMethods->Remove( p ); + if( !pMeth ) + { + pMeth = new SbMethod( rName, t, this ); + pMeth->SetParent( this ); + pMeth->SetFlags( SBX_READ ); + pMethods->Put( pMeth, pMethods->Count() ); + StartListening( pMeth->GetBroadcaster(), TRUE ); + } + // Per Default ist die Methode GUELTIG, da sie auch vom Compiler + // (Codegenerator) erzeugt werden kann + pMeth->bInvalid = FALSE; + pMeth->ResetFlag( SBX_FIXED ); + pMeth->SetFlag( SBX_WRITE ); + pMeth->SetType( t ); + pMeth->ResetFlag( SBX_WRITE ); + if( t != SbxVARIANT ) + pMeth->SetFlag( SBX_FIXED ); + return pMeth; +} + +// Property anfordern/anlegen + +SbProperty* SbModule::GetProperty( const String& rName, SbxDataType t ) +{ + SbxVariable* p = pProps->Find( rName, SbxCLASS_PROPERTY ); + SbProperty* pProp = p ? PTR_CAST(SbProperty,p) : NULL; + if( p && !pProp ) + pProps->Remove( p ); + if( !pProp ) + { + pProp = new SbProperty( rName, t, this ); + pProp->SetFlag( SBX_READWRITE ); + pProp->SetParent( this ); + pProps->Put( pProp, pProps->Count() ); + StartListening( pProp->GetBroadcaster(), TRUE ); + } + return pProp; +} + +// Aus dem Codegenerator: Ungueltige Eintraege entfernen + +void SbModule::EndDefinitions( BOOL bNewState ) +{ + for( USHORT i = 0; i < pMethods->Count(); ) + { + SbMethod* p = PTR_CAST(SbMethod,pMethods->Get( i ) ); + if( p ) + { + if( p->bInvalid ) + pMethods->Remove( p ); + else + { + p->bInvalid = bNewState; + i++; + } + } + } + SetModified( TRUE ); +} + +void SbModule::Clear() +{ + delete pImage; pImage = NULL; + SbxObject::Clear(); +} + +const String& SbModule::GetSource() const +{ + return aSource; +} + +// Parent und BASIC sind eins! + +void SbModule::SetParent( SbxObject* p ) +{ + DBG_ASSERT( !p || p->IsA( TYPE(StarBASIC) ), "SbModules nur in BASIC eintragen" ); + pParent = p; +} + +void SbModule::SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId& rBCType, + const SfxHint& rHint, const TypeId& rHintType ) +{ + const SbxHint* pHint = PTR_CAST(SbxHint,&rHint); + if( pHint ) + { + SbxVariable* pVar = pHint->GetVar(); + SbProperty* pProp = PTR_CAST(SbProperty,pVar); + SbMethod* pMeth = PTR_CAST(SbMethod,pVar); + if( pProp ) + { + if( pProp->GetModule() != this ) + SetError( SbxERR_BAD_ACTION ); + } + else if( pMeth ) + { + if( pHint->GetId() == SBX_HINT_DATAWANTED ) + { + if( pMeth->bInvalid && !Compile() ) + // Auto-Compile hat nicht geklappt! + StarBASIC::Error( SbERR_BAD_PROP_VALUE ); + else + { + // Aufruf eines Unterprogramms + SbModule* pOld = pMOD; + pMOD = this; + Run( (SbMethod*) pVar ); + pMOD = pOld; + } + } + } + else + SbxObject::SFX_NOTIFY( rBC, rBCType, rHint, rHintType ); + } +} + +// Das Setzen der Source macht das Image ungueltig +// und scant die Methoden-Definitionen neu ein + +void SbModule::SetSource( const String& r ) +{ + aSource = r; + StartDefinitions(); + SbiTokenizer aTok( r ); + while( !aTok.IsEof() ) + { + SbiToken eEndTok = NIL; + + // Suchen nach SUB oder FUNCTION + SbiToken eLastTok = NIL; + while( !aTok.IsEof() ) + { + // #32385: Nicht bei declare + SbiToken eCurTok = aTok.Next(); + if( eLastTok != DECLARE ) + { + if( eCurTok == SUB ) + { + eEndTok = ENDSUB; break; + } + if( eCurTok == FUNCTION ) + { + eEndTok = ENDFUNC; break; + } + } + eLastTok = eCurTok; + } + // Definition der Methode + SbMethod* pMeth; + if( eEndTok != NIL ) + { + USHORT nLine1 = aTok.GetLine(); + if( aTok.Next() == SYMBOL ) + { + String aName( aTok.GetSym() ); + SbxDataType t = aTok.GetType(); + if( t == SbxVARIANT && eEndTok == ENDSUB ) + t = SbxVOID; + pMeth = GetMethod( aName, t ); + pMeth->nLine1 = pMeth->nLine2 = nLine1; + // Die Methode ist erst mal GUELTIG + pMeth->bInvalid = FALSE; + } + else + eEndTok = NIL; + } + // Skip bis END SUB/END FUNCTION + if( eEndTok != NIL ) + { + while( !aTok.IsEof() ) + { + if( aTok.Next() == eEndTok ) + { + pMeth->nLine2 = aTok.GetLine(); + break; + } + } + if( aTok.IsEof() ) + pMeth->nLine2 = aTok.GetLine(); + } + } + EndDefinitions( TRUE ); +} + +void SbModule::SetComment( const String& r ) +{ + aComment = r; + SetModified( TRUE ); +} + +SbMethod* SbModule::GetFunctionForLine( USHORT nLine ) +{ + for( USHORT i = 0; i < pMethods->Count(); i++ ) + { + SbMethod* p = (SbMethod*) pMethods->Get( i ); + if( p->GetSbxId() == SBXID_BASICMETHOD ) + { + if( nLine >= p->nLine1 && nLine <= p->nLine2 ) + return p; + } + } + return NULL; +} + +// Ausstrahlen eines Hints an alle Basics + +static void _SendHint( SbxObject* pObj, ULONG nId, SbMethod* p ) +{ + // Selbst ein BASIC? + if( pObj->IsA( TYPE(StarBASIC) ) && pObj->IsBroadcaster() ) + pObj->GetBroadcaster().Broadcast( SbxHint( nId, p ) ); + // Dann die Unterobjekte fragen + SbxArray* pObjs = pObj->GetObjects(); + for( USHORT i = 0; i < pObjs->Count(); i++ ) + { + SbxVariable* pVar = pObjs->Get( i ); + if( pVar->IsA( TYPE(SbxObject) ) ) + _SendHint( PTR_CAST(SbxObject,pVar), nId, p ); + } +} + +static void SendHint( SbxObject* pObj, ULONG nId, SbMethod* p ) +{ + while( pObj->GetParent() ) + pObj = pObj->GetParent(); + _SendHint( pObj, nId, p ); +} + +// #57841 Uno-Objekte, die in RTL-Funktionen gehalten werden, +// beim Programm-Ende freigeben, damit nichts gehalten wird. +void ClearUnoObjectsInRTL_Impl_Rek( StarBASIC* pBasic ) +{ + // return-Wert von CreateUnoService loeschen + static String aName( RTL_CONSTASCII_USTRINGPARAM("CreateUnoService") ); + SbxVariable* pVar = pBasic->GetRtl()->Find( aName, SbxCLASS_METHOD ); + if( pVar ) + pVar->SbxValue::Clear(); + + // Ueber alle Sub-Basics gehen + SbxArray* pObjs = pBasic->GetObjects(); + USHORT nCount = pObjs->Count(); + for( USHORT i = 0 ; i < nCount ; i++ ) + { + SbxVariable* pObjVar = pObjs->Get( i ); + StarBASIC* pSubBasic = PTR_CAST( StarBASIC, pObjVar ); + if( pSubBasic ) + ClearUnoObjectsInRTL_Impl_Rek( pSubBasic ); + } +} + +void ClearUnoObjectsInRTL_Impl( StarBASIC* pBasic ) +{ + // #67781 Rueckgabewerte der Uno-Methoden loeschen + clearUnoMethods(); + + // Oberstes Basic suchen + SbxObject* p = pBasic; + while( p->GetParent() ) + p = p->GetParent(); + + // Rekursiven Loeschvorgang ausloesen + ClearUnoObjectsInRTL_Impl_Rek( (StarBASIC*)p ); +} + +// Ausfuehren eines BASIC-Unterprogramms +USHORT SbModule::Run( SbMethod* pMeth ) +{ + USHORT nRes = 0; + BOOL bDelInst = BOOL( pINST == NULL ); + StarBASICRef xBasic; + if( bDelInst ) + { + // #32779: Basic waehrend der Ausfuehrung festhalten + xBasic = (StarBASIC*) GetParent(); + + pINST = new SbiInstance( (StarBASIC*) GetParent() ); + + // Error-Stack loeschen + SbErrorStack*& rErrStack = GetSbData()->pErrStack; + delete rErrStack; + rErrStack = NULL; + } + // Rekursion zu tief? + if( ++pINST->nCallLvl <= MAXRECURSION ) + { + // Globale Variable in allen Mods definieren + GlobalRunInit( /* bBasicStart = */ bDelInst ); + + // Trat ein Compiler-Fehler auf? Dann starten wir nicht + if( GetSbData()->bGlobalInitErr == FALSE ) + { + if( bDelInst ) + { + SendHint( GetParent(), SBX_HINT_BASICSTART, pMeth ); + + // 16.10.96: #31460 Neues Konzept fuer StepInto/Over/Out + // Erklaerung siehe runtime.cxx bei SbiInstance::CalcBreakCallLevel() + // BreakCallLevel ermitteln + pINST->CalcBreakCallLevel( pMeth->GetDebugFlags() ); + } + + SbModule* pOldMod = pMOD; + pMOD = this; + SbiRuntime* pRt = new SbiRuntime( this, pMeth, pMeth->nStart ); + pRt->pNext = pINST->pRun; + pINST->pRun = pRt; + while( pRt->Step() ) {} + + // #63710 Durch ein anderes Thread-Handling bei Events kann es passieren, + // dass show-Aufruf an einem Dialog zurueckkehrt (durch schliessen des + // Dialogs per UI), BEVOR ein per Event ausgeloester weitergehender Call, + // der in Basic weiter oben im Stack steht und auf einen Basic-Breakpoint + // gelaufen ist, zurueckkehrt. Dann wird unten die Instanz zerstoert und + // wenn das noch im Call stehende Basic weiterlaeuft, gibt es einen GPF. + // Daher muss hier gewartet werden, bis andere Call zurueckkehrt. + if( bDelInst ) + { + // Hier mit 1 statt 0 vergleichen, da vor nCallLvl-- + while( pINST->nCallLvl != 1 ) + GetpApp()->Yield(); + } + + nRes = TRUE; + pINST->pRun = pRt->pNext; + pINST->nCallLvl--; // Call-Level wieder runter + + // Gibt es eine uebergeordnete Runtime-Instanz? + // Dann SbDEBUG_BREAK uebernehmen, wenn gesetzt + SbiRuntime* pRtNext = pRt->pNext; + if( pRtNext && (pRt->GetDebugFlags() & SbDEBUG_BREAK) ) + pRtNext->SetDebugFlags( SbDEBUG_BREAK ); + + delete pRt; + pMOD = pOldMod; + if( bDelInst ) + { + // #57841 Uno-Objekte, die in RTL-Funktionen gehalten werden, + // beim Programm-Ende freigeben, damit nichts gehalten wird. + ClearUnoObjectsInRTL_Impl( xBasic ); + + DBG_ASSERT(pINST->nCallLvl==0,"BASIC-Call-Level > 0") + delete pINST, pINST = NULL, bDelInst = FALSE; + SendHint( GetParent(), SBX_HINT_BASICSTOP, pMeth ); + } + } + } + else + StarBASIC::FatalError( SbERR_STACK_OVERFLOW ); + if( bDelInst ) + { + // #57841 Uno-Objekte, die in RTL-Funktionen gehalten werden, + // beim Programm-Ende freigeben, damit nichts gehalten wird. + ClearUnoObjectsInRTL_Impl( xBasic ); + + delete pINST; + pINST = NULL; + } + return nRes; +} + +// Ausfuehren der Init-Methode eines Moduls nach dem Laden +// oder der Compilation + +void SbModule::RunInit() +{ + if( pImage + && !pImage->bInit + && pImage->GetFlag( SBIMG_INITCODE ) ) + { + // Flag setzen, dass RunInit aktiv ist (Testtool) + GetSbData()->bRunInit = TRUE; + + // BOOL bDelInst = BOOL( pINST == NULL ); + // if( bDelInst ) + // pINST = new SbiInstance( (StarBASIC*) GetParent() ); + SbModule* pOldMod = pMOD; + pMOD = this; + // Der Init-Code beginnt immer hier + SbiRuntime* pRt = new SbiRuntime( this, NULL, 0 ); + pRt->pNext = pINST->pRun; + pINST->pRun = pRt; + while( pRt->Step() ) {} + pINST->pRun = pRt->pNext; + delete pRt; + pMOD = pOldMod; + // if( bDelInst ) + // delete pINST, pINST = NULL; + pImage->bInit = TRUE; + + // RunInit ist nicht mehr aktiv + GetSbData()->bRunInit = FALSE; + } +} + +// Mit private/dim deklarierte Variablen loeschen +void SbModule::ClearPrivateVars() +{ + for( int i = 0 ; i < pProps->Count() ; i++ ) + { + SbProperty* p = PTR_CAST(SbProperty,pProps->Get( i ) ); + if( p ) + { + // Arrays nicht loeschen, sondern nur deren Inhalt + if( p->GetType() & SbxARRAY ) + { + SbxArray* pArray = PTR_CAST(SbxArray,p->GetObject()); + if( pArray ) + { + for( int j = 0 ; j < pArray->Count() ; j++ ) + { + SbxVariable* pj = PTR_CAST(SbxVariable,pArray->Get( j )); + pj->SbxValue::Clear(); + /* + USHORT nFlags = pj->GetFlags(); + pj->SetFlags( (nFlags | SBX_WRITE) & (~SBX_FIXED) ); + pj->PutEmpty(); + pj->SetFlags( nFlags ); + */ + } + } + } + else + { + p->SbxValue::Clear(); + /* + USHORT nFlags = p->GetFlags(); + p->SetFlags( (nFlags | SBX_WRITE) & (~SBX_FIXED) ); + p->PutEmpty(); + p->SetFlags( nFlags ); + */ + } + } + } +} + +// Zunaechst in dieses Modul, um 358-faehig zu bleiben +// (Branch in sb.cxx vermeiden) +void StarBASIC::ClearAllModuleVars( void ) +{ + // Eigene Module initialisieren + for ( USHORT nMod = 0; nMod < pModules->Count(); nMod++ ) + { + SbModule* pModule = (SbModule*)pModules->Get( nMod ); + // Nur initialisieren, wenn der Startcode schon ausgefuehrt wurde + if( pModule->pImage && pModule->pImage->bInit ) + pModule->ClearPrivateVars(); + } + // Alle Objekte ueberpruefen, ob es sich um ein Basic handelt + // Wenn ja, auch dort initialisieren + for ( USHORT nObj = 0; nObj < pObjs->Count(); nObj++ ) + { + SbxVariable* pVar = pObjs->Get( nObj ); + StarBASIC* pBasic = PTR_CAST(StarBASIC,pVar); + if( pBasic ) + pBasic->ClearAllModuleVars(); + } + +} + +// Ausfuehren des Init-Codes aller Module +void SbModule::GlobalRunInit( BOOL bBasicStart ) +{ + // Wenn kein Basic-Start, nur initialisieren, wenn Modul uninitialisiert + if( !bBasicStart ) + if( !(pImage && !pImage->bInit) ) + return; + + // GlobalInitErr-Flag fuer Compiler-Error initialisieren + // Anhand dieses Flags kann in SbModule::Run() nach dem Aufruf + // von GlobalRunInit festgestellt werden, ob beim initialisieren + // der Module ein Fehler auftrat. Dann wird nicht gestartet. + GetSbData()->bGlobalInitErr = FALSE; + + // Parent vom Modul ist ein Basic + StarBASIC *pBasic = PTR_CAST(StarBASIC,GetParent()); + if( pBasic ) + { + pBasic->InitAllModules(); + + SbxObject* pParent = pBasic->GetParent(); + if( pParent ) + pBasic = PTR_CAST(StarBASIC,pParent); + if( pBasic ) + pBasic->InitAllModules(); + } +} + +// Suche nach dem naechsten STMNT-Befehl im Code. Wird vom STMNT- +// Opcode verwendet, um die Endspalte zu setzen. + +const BYTE* SbModule::FindNextStmnt( const BYTE* p, USHORT& nLine, USHORT& nCol ) const +{ + USHORT nPC = (USHORT) ( p - (const BYTE*) pImage->GetCode() ); + while( nPC < pImage->GetCodeSize() ) + { + SbiOpcode eOp = (SbiOpcode ) ( *p++ ); + nPC++; + if( eOp >= SbOP1_START && eOp <= SbOP1_END ) + p += 2, nPC += 2; + else if( eOp == _STMNT ) + { + USHORT nl, nc; + nl = *p++; nl |= *p++ << 8; + nc = *p++; nc |= *p++ << 8; + nLine = nl; nCol = nc; + return p; + } + else if( eOp >= SbOP2_START && eOp <= SbOP2_END ) + p += 4, nPC += 4; + else if( !( eOp >= SbOP0_START && eOp <= SbOP0_END ) ) + { + StarBASIC::FatalError( SbERR_INTERNAL_ERROR ); + break; + } + } + return NULL; +} + +// Testen, ob eine Zeile STMNT-Opcodes enthaelt + +BOOL SbModule::IsBreakable( USHORT nLine ) const +{ + if( !pImage ) + return FALSE; + const BYTE* p = (const BYTE* ) pImage->GetCode(); + USHORT nl, nc; + while( ( p = FindNextStmnt( p, nl, nc ) ) != NULL ) + if( nl == nLine ) + return TRUE; + return FALSE; +} + +USHORT SbModule::GetBPCount() const +{ + return pBreaks ? pBreaks->Count() : 0; +} + +USHORT SbModule::GetBP( USHORT n ) const +{ + if( pBreaks && n < pBreaks->Count() ) + return pBreaks->GetObject( n ); + else + return 0; +} + +BOOL SbModule::IsBP( USHORT nLine ) const +{ + if( pBreaks ) + { + const USHORT* p = pBreaks->GetData(); + USHORT n = pBreaks->Count(); + for( USHORT i = 0; i < n; i++, p++ ) + { + USHORT b = *p; + if( b == nLine ) + return TRUE; + if( b < nLine ) + break; + } + } + return FALSE; +} + +BOOL SbModule::SetBP( USHORT nLine ) +{ + if( !IsBreakable( nLine ) ) + return FALSE; + if( !pBreaks ) + pBreaks = new SbiBreakpoints; + const USHORT* p = pBreaks->GetData(); + USHORT n = pBreaks->Count(); + USHORT i; + for( i = 0; i < n; i++, p++ ) + { + USHORT b = *p; + if( b == nLine ) + return TRUE; + if( b < nLine ) + break; + } + pBreaks->Insert( &nLine, 1, i ); + + // #38568: Zur Laufzeit auch hier SbDEBUG_BREAK setzen + if( pINST && pINST->pRun ) + pINST->pRun->SetDebugFlags( SbDEBUG_BREAK ); + + return IsBreakable( nLine ); +} + +BOOL SbModule::ClearBP( USHORT nLine ) +{ + BOOL bRes = FALSE; + if( pBreaks ) + { + const USHORT* p = pBreaks->GetData(); + USHORT n = pBreaks->Count(); + for( USHORT i = 0; i < n; i++, p++ ) + { + USHORT b = *p; + if( b == nLine ) + { + pBreaks->Remove( i, 1 ); bRes = TRUE; break; + } + if( b < nLine ) + break; + } + if( !pBreaks->Count() ) + delete pBreaks, pBreaks = NULL; + } + return bRes; +} + +void SbModule::ClearAllBP() +{ + delete pBreaks; pBreaks = NULL; +} + +BOOL SbModule::LoadData( SvStream& rStrm, USHORT nVer ) +{ + Clear(); + if( !SbxObject::LoadData( rStrm, 1 ) ) + return FALSE; + // Sicherheitshalber... + SetFlag( SBX_EXTSEARCH | SBX_GBLSEARCH ); + BYTE bImage; + rStrm >> bImage; + if( bImage ) + { + SbiImage* p = new SbiImage; + if( !p->Load( rStrm ) ) + { + delete p; + return FALSE; + } + aComment = p->aComment; + SetName( p->aName ); + // Ist Code vorhanden? + if( p->GetCodeSize() ) + { + aSource = p->aSource; + // Alte Version: Image weg + if( nVer == 1 ) + { + SetSource( p->aSource ); + delete p; + } + else + pImage = p; + } + else + { + SetSource( p->aSource ); + delete p; + } + } + return TRUE; +} + +BOOL SbModule::StoreData( SvStream& rStrm ) const +{ + if( !SbxObject::StoreData( rStrm ) ) + return FALSE; + if( pImage ) + { + pImage->aSource = aSource; + pImage->aComment = aComment; + pImage->aName = GetName(); + rStrm << (BYTE) 1; + return pImage->Save( rStrm ); + } + else + { + SbiImage aImg; + aImg.aSource = aSource; + aImg.aComment = aComment; + aImg.aName = GetName(); + rStrm << (BYTE) 1; + return aImg.Save( rStrm ); + } +} + +BOOL SbModule::LoadCompleted() +{ + SbxArray* p = GetMethods(); + USHORT i; + for( i = 0; i < p->Count(); i++ ) + { + SbMethod* q = PTR_CAST(SbMethod,p->Get( i ) ); + if( q ) + q->pMod = this; + } + p = GetProperties(); + for( i = 0; i < p->Count(); i++ ) + { + SbProperty* q = PTR_CAST(SbProperty,p->Get( i ) ); + if( q ) + q->pMod = this; + } + return TRUE; +} + + +///////////////////////////////////////////////////////////////////////// +// Hilfsklasse zur Untersuchung von JavaScript-Modulen, zunaechst zum +// Heraussuchen der Funktionen, spaeter auch zum Syntax-Highlighting verwenden + +// Flags fuer Zeichen-Eigenschaften +#define CHAR_START_IDENTIFIER 0x0001 +#define CHAR_IN_IDENTIFIER 0x0002 +#define CHAR_START_NUMBER 0x0004 +#define CHAR_IN_NUMBER 0x0008 +#define CHAR_IN_HEX_NUMBER 0x0010 +#define CHAR_IN_OCT_NUMBER 0x0020 +#define CHAR_START_STRING 0x0040 +#define CHAR_OPERATOR 0x0080 +#define CHAR_SPACE 0x0100 +#define CHAR_EOL 0x0200 + +#define CHAR_EOF 0x00 + + +// Token-Typen TT_... + +//enum TokenType +//{ +// TT_UNKNOWN, +// TT_IDENTIFIER, +// TT_WHITESPACE, +// TT_NUMBER, +// TT_STRING, +//// TT_HTMLSTRING, +//// TT_LONG, +//// TT_DOUBLE, +//// TT_BOOLEAN, +//// TT_NULLOBJECT, +//// TT_CHAR, +// TT_EOL, +//// TT_LONG2DOUBLE, +// TT_COMMENT, +//// TT_SKIP, +// TT_ERROR, +// TT_OPERATOR, +// TT_KEYWORD +//}; + + +class SimpleTokenizer_Impl +{ + // Zeichen-Info-Tabelle + USHORT aCharTypeTab[256]; + + const char* mpStringBegin; + const char* mpActualPos; + + // Zeile und Spalte + UINT32 nLine; + UINT32 nCol; + + char peekChar( void ) { return *mpActualPos; } + char getChar( void ) { nCol++; return *mpActualPos++; } + + // Hilfsfunktion: Zeichen-Flag Testen + BOOL testCharFlags( unsigned char c, USHORT nTestFlags ); + + // Neues Token holen, Leerstring == nix mehr da + BOOL getNextToken( /*out*/TokenTypes& reType, + /*out*/const char*& rpStartPos, /*out*/const char*& rpEndPos ); + + String getTokStr( /*out*/const char* pStartPos, /*out*/const char* pEndPos ); + + // TEST: Token ausgeben + String getFullTokenStr( /*out*/TokenTypes eType, + /*out*/const char* pStartPos, /*out*/const char* pEndPos ); + + BOOL isBeginComment( UINT32 nLine ); + void setCommentState(UINT32 nLine, BOOL bCommentBegin, BOOL bCommentEnd); + + NAMESPACE_STD(list)<BOOL>* pCommentsBegin; + NAMESPACE_STD(list)<BOOL>* pCommentsEnd; + + char** ppListKeyWords; + UINT16 nKeyWordCount; + BOOL bStarScriptMode; + + BOOL bLineHasCommentBegin; + BOOL bLineHasCommentEnd; + +public: + SimpleTokenizer_Impl( void ); + ~SimpleTokenizer_Impl( void ); + + UINT16 parseLine( UINT32 nLine, const String* aSource ); + void getHighlightPortions( UINT32 nParseLine, const String& rLine, + /*out*/HighlightPortions& portions ); + void addLines(UINT32 nLine, INT32 nCount); + void outCommentList(); + void setKeyWords( char** ppKeyWords, UINT16 nCount ); +}; + +// Hilfsfunktion: Zeichen-Flag Testen +BOOL SimpleTokenizer_Impl::testCharFlags( unsigned char c, USHORT nTestFlags ) +{ + if( c != 0 ) + return ( (aCharTypeTab[c] & nTestFlags) != 0 ); + return FALSE; +} + +void SimpleTokenizer_Impl::setKeyWords( char** ppKeyWords, UINT16 nCount ) +{ + ppListKeyWords = ppKeyWords; + nKeyWordCount = nCount; +} + +// Neues Token holen +BOOL SimpleTokenizer_Impl::getNextToken( /*out*/TokenTypes& reType, + /*out*/const char*& rpStartPos, /*out*/const char*& rpEndPos ) +{ + reType = TT_UNKNOWN; + + // Position merken + rpStartPos = mpActualPos; + + // Zeichen untersuchen + char c = peekChar(); + if( c == CHAR_EOF ) + return FALSE; + + // Zeichen lesen + getChar(); + + //*** Alle Moeglichkeiten durchgehen *** + // Spce? + if ( (testCharFlags( c, CHAR_SPACE ) == TRUE) && (!bLineHasCommentBegin) ) + { + while( testCharFlags( peekChar(), CHAR_SPACE ) == TRUE ) + getChar(); + + reType = TT_WHITESPACE; + } + + // Identifier? + else if ( (testCharFlags( c, CHAR_START_IDENTIFIER ) == TRUE) && (!bLineHasCommentBegin) ) + { + BOOL bIdentifierChar; + int nPos = 0; + do + { + // Naechstes Zeichen holen + c = peekChar(); + bIdentifierChar = testCharFlags( c, CHAR_IN_IDENTIFIER ); + if( bIdentifierChar ) + getChar(); + } + while( bIdentifierChar ); + + reType = TT_IDENTIFIER; + + // Schluesselwort-Tabelle + if (ppListKeyWords != NULL) + { + ByteString aByteStr(rpStartPos, mpActualPos-rpStartPos); + if ( !bStarScriptMode ) + aByteStr.ToLowerAscii(); + + if ( bsearch( aByteStr.GetBuffer(), ppListKeyWords, nKeyWordCount, sizeof( char* ), + compare_strings ) ) + { + reType = TT_KEYWORD; + + if ( (!bStarScriptMode) && (aByteStr.Equals( "rem" )) ) + { + // Alle Zeichen bis Zeilen-Ende oder EOF entfernen + char cPeek = peekChar(); + while( cPeek != CHAR_EOF && testCharFlags( cPeek, CHAR_EOL ) == FALSE ) + { + c = getChar(); + cPeek = peekChar(); + } + + reType = TT_COMMENT; + } + } + } + } + + // Operator? + else if ( (testCharFlags( c, CHAR_OPERATOR ) == TRUE) || bLineHasCommentBegin + || ((!bStarScriptMode) && (c == '\'')) ) + { + // Kommentar ? + if ( (( c == '/' ) || bLineHasCommentBegin) || ((!bStarScriptMode) && (c == '\'')) ) + { + char cNext = peekChar(); + if ( cNext == '/' || ( bStarScriptMode && (cNext == '*' || bLineHasCommentBegin)) + || ((!bStarScriptMode) && (c == '\'')) ) // Kommentar + { + if ((c == '*') && (cNext == '/')) // Kommentarende am Zeilenanfang + { + getChar(); // Zeichen entfernen + + bLineHasCommentEnd = TRUE; + bLineHasCommentBegin = FALSE; + + reType = TT_COMMENT; + } + else if ( (cNext == '/' && (!bStarScriptMode || !bLineHasCommentBegin)) + || ((!bStarScriptMode) && (c == '\'')) )// C++ - Kommentar + { + c = getChar(); // '/' entfernen + + // Alle Zeichen bis Zeilen-Ende oder EOF entfernen + char cPeek = peekChar(); + while( cPeek != CHAR_EOF && testCharFlags( cPeek, CHAR_EOL ) == FALSE ) + { + c = getChar(); + cPeek = peekChar(); + + if (c == '*' && cPeek == '/') + { + bLineHasCommentEnd = TRUE; + } + } + + reType = TT_COMMENT; + } + else if (( cNext == '*' ) || bLineHasCommentBegin) // C -Kommentar + { + bLineHasCommentBegin = !bLineHasCommentBegin; + + // Alle Zeichen bis */ entfernen + do + { + c = getChar(); + cNext = peekChar(); + + // Zeilennummer auch im Kommentar pflegen + if( testCharFlags( c, CHAR_EOL ) == TRUE ) + { + // Doppelt-EOL rausschmeissen (CR/LF) + if( cNext != c && testCharFlags( cNext, CHAR_EOL ) == TRUE ) + { + c = getChar(); + cNext = peekChar(); + } + + setCommentState(nLine, bLineHasCommentBegin, bLineHasCommentEnd); + bLineHasCommentBegin = FALSE; + bLineHasCommentEnd = FALSE; + + // Positions-Daten auf Zeilen-Beginn setzen + nCol = 0; + nLine++; + } + else if (c == '*' && cNext == '/') // am Kommentarende + { + if (bLineHasCommentBegin) // das Ende ist in der gleichen Zeile + { // wie der Anfang des Kommentars + bLineHasCommentBegin = FALSE; // also zurcksetzen + } + else + { + bLineHasCommentEnd = TRUE; + } + } + } + while( cNext != CHAR_EOF && ( c != '*' || cNext != '/' ) ); + + // Alles ausser EOF lesen + if( cNext != CHAR_EOF ) + getChar(); + + reType = TT_COMMENT; + } + } + } + // HTML-Kommentar + else if( c == '<' ) + { + char cNext = peekChar(); + if( cNext == '!' ) + { + getChar(); // '!' ist verloren, wenn nicht wirklich Tag + + cNext = peekChar(); + if( cNext == '-' ) + { + getChar(); // '-' ist verloren, wenn nicht wirklich Tag + + cNext = peekChar(); + if( cNext == '-' ) + { + getChar(); + + // HTML-Kommentar: Alle Zeichen bis Zeilen-Ende oder EOF entfernen + char cPeek = peekChar(); + while( cPeek != CHAR_EOF && testCharFlags( cPeek, CHAR_EOL ) == FALSE ) + { + c = getChar(); + cPeek = peekChar(); + } + + reType = TT_COMMENT; + } + else + { + // Verlorene Zeichen nachliefern + mpActualPos -= 2; + } + } + else + { + // Verlorenes Zeichen nachliefern + mpActualPos--; + } + } + } + + // Echter Operator, kann hier einfach behandelt werden, + // da nicht der wirkliche Operator, wie z.B. += interessiert, + // sondern nur die Tatsache, dass es sich um einen handelt. + if( reType != TT_COMMENT ) + { + reType = TT_OPERATOR; + } + } + + // Objekt-Trenner? Muss vor Number abgehandelt werden + else if( c == '.' && ( peekChar() < '0' || peekChar() > '9' ) ) + { + reType = TT_OPERATOR; + } + + // Zahl? + else if( testCharFlags( c, CHAR_START_NUMBER ) == TRUE ) + { + // Buffer-Position initialisieren + int nPos = 0; + + // Zahlensystem, 10 = normal, wird bei Oct/Hex geaendert + int nRadix = 10; + + // Ist es eine Hex- oder Oct-Zahl? + if( c == '0' ) + { + // Octal? + // Java-Script geht von einem Octal-Wert aus, wenn nach 0 eine + // Ziffer im oktalen Ziffernbereich folgt + if( testCharFlags( peekChar(), CHAR_IN_OCT_NUMBER ) ) + { + nRadix = 8; // Octal-Basis + + // Alle Ziffern einlesen + while( testCharFlags( peekChar(), CHAR_IN_OCT_NUMBER ) ) + c = getChar(); + } + + // Dementsprechend wird bei 0x Hex geparsed + else if( peekChar() == 'x' || peekChar() == 'X' ) + { + // x entfernen + getChar(); + nRadix = 16; // Hex-Basis + + // Alle Ziffern einlesen und puffern + while( testCharFlags( peekChar(), CHAR_IN_HEX_NUMBER ) ) + c = getChar(); + } + } + + // Wenn nicht Oct oder Hex als double ansehen + if( nRadix == 10 ) + { + // Flag, ob das letzte Zeichen ein Exponent war + BOOL bAfterExpChar = FALSE; + + // Alle Ziffern einlesen + while( testCharFlags( peekChar(), CHAR_IN_NUMBER ) || + (bAfterExpChar && peekChar() == '+' ) || + (bAfterExpChar && peekChar() == '-' ) ) + // Nach Exponent auch +/- OK + { + c = getChar(); // Zeichen lesen + bAfterExpChar = ( c == 'e' || c == 'E' ); + } + } + + reType = TT_NUMBER; + } + + // String? + else if( testCharFlags( c, CHAR_START_STRING ) == TRUE ) + { + // Merken, welches Zeichen den String eroeffnet hat + char cEndString = c; + + // Alle Ziffern einlesen und puffern + while( peekChar() != cEndString ) + { + // #58846 EOF vor getChar() abfangen, damit EOF micht verloren geht + if( peekChar() == CHAR_EOF ) + { + // ERROR: unterminated string literal + reType = TT_ERROR; + break; + } + c = getChar(); + if( testCharFlags( c, CHAR_EOL ) == TRUE ) + { + // ERROR: unterminated string literal + reType = TT_ERROR; + break; + } + // Escape-Character untersuchen + else if ( (c == '\\') && (bStarScriptMode) ) + { + // Kann hier ganz einfach gehandelt werden: + // Einfach ein weiteres Zeichen lesen + char cNext = getChar(); + } + } + + // Zeichen lesen + if( reType != TT_ERROR ) + { + getChar(); + reType = TT_STRING; + } + } + + // Zeilenende? + else if( testCharFlags( c, CHAR_EOL ) == TRUE ) + { + // Falls ein weiteres anderes EOL-Char folgt, weg damit + char cNext = peekChar(); + if( cNext != c && testCharFlags( cNext, CHAR_EOL ) == TRUE ) + getChar(); + + setCommentState(nLine, bLineHasCommentBegin, bLineHasCommentEnd); + bLineHasCommentBegin = FALSE; + bLineHasCommentEnd = FALSE; + + // Positions-Daten auf Zeilen-Beginn setzen + nCol = 0; + nLine++; + + reType = TT_EOL; + } + + // Alles andere bleibt TT_UNKNOWN + + + // End-Position eintragen + rpEndPos = mpActualPos; + return TRUE; +} + +void SimpleTokenizer_Impl::setCommentState(UINT32 nLine, BOOL bCommentBegin, BOOL bCommentEnd) +{ + while (pCommentsBegin->size() <= nLine) + pCommentsBegin->push_back(FALSE); + + while (pCommentsEnd->size() <= nLine) + pCommentsEnd->push_back(FALSE); + + NAMESPACE_STD(list)<BOOL>::iterator posBegins, posEnds; + UINT32 nCounter = 0; + + posBegins = pCommentsBegin->begin(); + posEnds = pCommentsEnd->begin(); + + while (nCounter < nLine) + { + posBegins++; + posEnds++; + nCounter++; + } + + *posBegins = bCommentBegin; + *posEnds = bCommentEnd; +} + +void SimpleTokenizer_Impl::addLines(UINT32 nLine, INT32 nCount) +{ + NAMESPACE_STD(list)<BOOL>::iterator posBegins, posEnds; + UINT32 nCounter = 0; + + if (!pCommentsBegin->empty()) + { + posBegins = pCommentsBegin->begin(); + posEnds = pCommentsEnd->begin(); + + while (nCounter < nLine) + { + posBegins++; + posEnds++; + nCounter++; + } + + INT32 nDiff = nCount; + while (nDiff != 0) + { + if (nDiff > 0) + { + pCommentsBegin->insert(posBegins, FALSE); + pCommentsEnd->insert(posEnds, FALSE); + nDiff--; + } + else + { + pCommentsBegin->erase(posBegins++); + pCommentsEnd->erase(posEnds++); + UINT16 dummy = pCommentsBegin->size(); + + nDiff++; + } + } + } + else if (nCount > 0) + { + INT32 nDiff = nCount; + while (nDiff != 0) + { + pCommentsBegin->push_back(FALSE); + pCommentsEnd->push_back(FALSE); + nDiff--; + } + } +} + +String SimpleTokenizer_Impl::getTokStr + ( /*out*/const char* pStartPos, /*out*/const char* pEndPos ) +{ + return String( pStartPos, (USHORT)( pEndPos - pStartPos ) ); +} + +// TEST: Token ausgeben +String SimpleTokenizer_Impl::getFullTokenStr( /*out*/TokenTypes eType, + /*out*/const char* pStartPos, /*out*/const char* pEndPos ) +{ + String aOut; + switch( eType ) + { + case TT_UNKNOWN: aOut = String( RTL_CONSTASCII_USTRINGPARAM("TT_UNKNOWN:") ); break; + case TT_IDENTIFIER: aOut = String( RTL_CONSTASCII_USTRINGPARAM("TT_IDENTIFIER:") ); break; + case TT_WHITESPACE: aOut = String( RTL_CONSTASCII_USTRINGPARAM("TT_WHITESPACE:") ); break; + case TT_NUMBER: aOut = String( RTL_CONSTASCII_USTRINGPARAM("TT_NUMBER:") ); break; + case TT_STRING: aOut = String( RTL_CONSTASCII_USTRINGPARAM("TT_STRING:") ); break; + case TT_EOL: aOut = String( RTL_CONSTASCII_USTRINGPARAM("TT_EOL:") ); break; + case TT_COMMENT: aOut = String( RTL_CONSTASCII_USTRINGPARAM("TT_COMMENT:") ); break; + case TT_ERROR: aOut = String( RTL_CONSTASCII_USTRINGPARAM("TT_ERROR:") ); break; + case TT_OPERATOR: aOut = String( RTL_CONSTASCII_USTRINGPARAM("TT_OPERATOR:") ); break; + case TT_KEYWORD: aOut = String( RTL_CONSTASCII_USTRINGPARAM("TT_KEYWORD:") ); break; + } + if( eType != TT_EOL ) + { + aOut += String( pStartPos, (USHORT)( pEndPos - pStartPos ) ); + } + aOut += String( RTL_CONSTASCII_USTRINGPARAM("\n") ); + return aOut; +} + +SimpleTokenizer_Impl::SimpleTokenizer_Impl( void ) +{ + memset( aCharTypeTab, 0, sizeof( aCharTypeTab ) ); + + // Zeichen-Tabelle fuellen + USHORT i; + + // Zulaessige Zeichen fuer Identifier + USHORT nHelpMask = (USHORT)( CHAR_START_IDENTIFIER | CHAR_IN_IDENTIFIER ); + for( i = 'a' ; i <= 'z' ; i++ ) + aCharTypeTab[i] |= nHelpMask; + for( i = 'A' ; i <= 'Z' ; i++ ) + aCharTypeTab[i] |= nHelpMask; + // '_' extra eintragen + aCharTypeTab['_'] |= nHelpMask; + // AB 23.6.97: '$' ist auch erlaubt + aCharTypeTab['$'] |= nHelpMask; + + // Ziffern (Identifier und Number ist moeglich) + nHelpMask = (USHORT)( CHAR_IN_IDENTIFIER | CHAR_START_NUMBER | + CHAR_IN_NUMBER | CHAR_IN_HEX_NUMBER ); + for( i = '0' ; i <= '9' ; i++ ) + aCharTypeTab[i] |= nHelpMask; + + // e und E sowie . von Hand ergaenzen + aCharTypeTab['e'] |= CHAR_IN_NUMBER; + aCharTypeTab['E'] |= CHAR_IN_NUMBER; + aCharTypeTab['.'] |= (USHORT)( CHAR_IN_NUMBER | CHAR_START_NUMBER ); + + // Hex-Ziffern + for( i = 'a' ; i <= 'f' ; i++ ) + aCharTypeTab[i] |= CHAR_IN_HEX_NUMBER; + for( i = 'A' ; i <= 'F' ; i++ ) + aCharTypeTab[i] |= CHAR_IN_HEX_NUMBER; + + // Oct-Ziffern + for( i = '0' ; i <= '7' ; i++ ) + aCharTypeTab[i] |= CHAR_IN_OCT_NUMBER; + + // String-Beginn/End-Zeichen + aCharTypeTab['\''] |= CHAR_START_STRING; + aCharTypeTab['\"'] |= CHAR_START_STRING; + + // Operator-Zeichen + aCharTypeTab['!'] |= CHAR_OPERATOR; + aCharTypeTab['%'] |= CHAR_OPERATOR; + aCharTypeTab['&'] |= CHAR_OPERATOR; + aCharTypeTab['('] |= CHAR_OPERATOR; + aCharTypeTab[')'] |= CHAR_OPERATOR; + aCharTypeTab['*'] |= CHAR_OPERATOR; + aCharTypeTab['+'] |= CHAR_OPERATOR; + aCharTypeTab[','] |= CHAR_OPERATOR; + aCharTypeTab['-'] |= CHAR_OPERATOR; + aCharTypeTab['/'] |= CHAR_OPERATOR; + aCharTypeTab[':'] |= CHAR_OPERATOR; + aCharTypeTab['<'] |= CHAR_OPERATOR; + aCharTypeTab['='] |= CHAR_OPERATOR; + aCharTypeTab['>'] |= CHAR_OPERATOR; + aCharTypeTab['?'] |= CHAR_OPERATOR; + aCharTypeTab['^'] |= CHAR_OPERATOR; + aCharTypeTab['|'] |= CHAR_OPERATOR; + aCharTypeTab['~'] |= CHAR_OPERATOR; + aCharTypeTab['{'] |= CHAR_OPERATOR; + aCharTypeTab['}'] |= CHAR_OPERATOR; + aCharTypeTab['['] |= CHAR_OPERATOR; + aCharTypeTab[']'] |= CHAR_OPERATOR; + aCharTypeTab[';'] |= CHAR_OPERATOR; + + // Space + aCharTypeTab[' ' ] |= CHAR_SPACE; + aCharTypeTab['\t'] |= CHAR_SPACE; + + // Zeilen-Ende-Zeichen + aCharTypeTab['\r'] |= CHAR_EOL; + aCharTypeTab['\n'] |= CHAR_EOL; + + // fuer Syntax Highlighting + pCommentsBegin = new NAMESPACE_STD(list)<BOOL>(); + pCommentsEnd = new NAMESPACE_STD(list)<BOOL>(); + + bStarScriptMode = FALSE; + ppListKeyWords = NULL; +} + +SimpleTokenizer_Impl::~SimpleTokenizer_Impl( void ) +{ + delete(pCommentsBegin); + delete(pCommentsEnd); +} + +SimpleTokenizer_Impl* getSimpleTokenizer( void ) +{ + static SimpleTokenizer_Impl* pSimpleTokenizer = NULL; + if( !pSimpleTokenizer ) + pSimpleTokenizer = new SimpleTokenizer_Impl(); + return pSimpleTokenizer; +} + +// Heraussuchen der jeweils naechsten Funktion aus einem JavaScript-Modul +UINT16 SimpleTokenizer_Impl::parseLine( UINT32 nParseLine, const String* aSource ) +{ + ByteString aByteSource( *aSource, gsl_getSystemTextEncoding() ); + + // Position auf den Anfang des Source-Strings setzen + mpStringBegin = mpActualPos = aByteSource.GetBuffer(); + bLineHasCommentBegin = isBeginComment( nParseLine ); + bLineHasCommentEnd = FALSE; + + // Zeile und Spalte initialisieren + nLine = nParseLine; + nCol = 0L; + + // Variablen fuer die Out-Parameter + TokenTypes eType; + const char* pStartPos; + const char* pEndPos; + + // Schleife ueber alle Tokens + UINT16 nTokenCount = 0; + while( getNextToken( eType, pStartPos, pEndPos ) ) + nTokenCount++; + + // die Endzustaende der Zeilen in die Listen eintragen + setCommentState(nParseLine, bLineHasCommentBegin, bLineHasCommentEnd); + + return nTokenCount; +} + +void SimpleTokenizer_Impl::getHighlightPortions( UINT32 nParseLine, const String& rLine, + /*out*/HighlightPortions& portions ) +{ + ByteString aByteLine( rLine, gsl_getSystemTextEncoding() ); + + // Position auf den Anfang des Source-Strings setzen + mpStringBegin = mpActualPos = aByteLine.GetBuffer(); + bLineHasCommentBegin = isBeginComment( nParseLine ); + bLineHasCommentEnd = FALSE; + + // Zeile und Spalte initialisieren + nLine = nParseLine; + nCol = 0L; + + // Variablen fuer die Out-Parameter + TokenTypes eType; + const char* pStartPos; + const char* pEndPos; + + // Schleife ueber alle Tokens + while( getNextToken( eType, pStartPos, pEndPos ) ) + { + HighlightPortion portion; + + portion.nBegin = (UINT16)(pStartPos - mpStringBegin); + portion.nEnd = (UINT16)(pEndPos - mpStringBegin); + portion.tokenType = eType; + + portions.Insert(portion, portions.Count()); + } +} + +BOOL SimpleTokenizer_Impl::isBeginComment( UINT32 nLine ) +{ + NAMESPACE_STD(list)<BOOL>::const_iterator posBegin, posEnd; + BOOL bCommentStart = FALSE; + + UINT32 i = 0; + posBegin=pCommentsBegin->begin(); + posEnd=pCommentsEnd->begin(); + + while ((i < nLine) && (posBegin != pCommentsBegin->end()) && (posEnd != pCommentsEnd->end())) + { + if (bCommentStart && *posEnd) + bCommentStart = FALSE; + if ((!bCommentStart) && *posBegin) + bCommentStart = TRUE; + + posBegin++; + posEnd++; + i++; + } + + return bCommentStart; +} + +void SimpleTokenizer_Impl::outCommentList() +{ + NAMESPACE_STD(list)<BOOL>::const_iterator posBegin, posEnd; + BOOL bCommentStart = FALSE; + + UINT32 i = 0; + posBegin=pCommentsBegin->begin(); + posEnd=pCommentsEnd->begin(); + + printf("\nComments:\n"); + while (posBegin != pCommentsBegin->end()) + { + printf("line: %2d beginComment: %d endComment: %d\n", i, *posBegin, *posEnd); + + posBegin++; + posEnd++; + i++; + } + +} + +////////////////////////////////////////////////////////////////////////// +// Implementierung des SyntaxHighlighter + +SyntaxHighlighter::SyntaxHighlighter() +{ + m_pSimpleTokenizer = new SimpleTokenizer_Impl(); + m_pKeyWords = NULL; + m_nKeyWordCount = 0; +} + +SyntaxHighlighter::~SyntaxHighlighter() +{ + delete(m_pSimpleTokenizer); + delete(m_pKeyWords); +} + +void SyntaxHighlighter::initialize( HighlighterLanguage eLanguage_ ) +{ + eLanguage = eLanguage_; + delete(m_pSimpleTokenizer); + m_pSimpleTokenizer = new SimpleTokenizer_Impl(); + + if (eLanguage == HIGHLIGHT_BASIC) + { + m_pSimpleTokenizer->setKeyWords( strListBasicKeyWords, + sizeof( strListBasicKeyWords ) / sizeof( char* )); + } + else + { + m_pSimpleTokenizer->setKeyWords( NULL, 0 ); + } +} + +const Range SyntaxHighlighter::notifyChange( UINT32 nLine, INT32 nLineCountDifference, + const String* pChangedLines, UINT32 nArrayLength) +{ + if (nLineCountDifference != 0) + m_pSimpleTokenizer->addLines(nLine, nLineCountDifference); + + for (INT32 i=0; i<nArrayLength; i++) + m_pSimpleTokenizer->parseLine(nLine+i, &pChangedLines[i]); + + return Range(nLine, nLine+nArrayLength-1); +} + +void SyntaxHighlighter::getHighlightPortions( UINT32 nLine, const String& rLine, + /*out*/HighlightPortions& portions ) +{ + m_pSimpleTokenizer->getHighlightPortions( nLine, rLine, portions ); +} + + +///////////////////////////////////////////////////////////////////////// +// Implementation SbJScriptModule (Basic-Modul fuer JavaScript-Sourcen) +SbJScriptModule::SbJScriptModule( const String& rName ) + :SbModule( rName ) +{ +} + +BOOL SbJScriptModule::LoadData( SvStream& rStrm, USHORT nVer ) +{ + Clear(); + if( !SbxObject::LoadData( rStrm, 1 ) ) + return FALSE; + + // Source-String holen + rStrm.ReadByteString( aSource, gsl_getSystemTextEncoding() ); + //rStrm >> aSource; + return TRUE; +} + +BOOL SbJScriptModule::StoreData( SvStream& rStrm ) const +{ + if( !SbxObject::StoreData( rStrm ) ) + return FALSE; + + // Source-String schreiben + rStrm.WriteByteString( aSource, gsl_getSystemTextEncoding() ); + //rStrm << aSource; + return TRUE; +} + + +///////////////////////////////////////////////////////////////////////// + +SbMethod::SbMethod( const String& r, SbxDataType t, SbModule* p ) + : SbxMethod( r, t ), pMod( p ) +{ + bInvalid = TRUE; + nStart = + nDebugFlags = + nLine1 = + nLine2 = 0; + // AB: 2.7.1996: HACK wegen 'Referenz kann nicht gesichert werden' + SetFlag( SBX_NO_MODIFY ); +} + +SbMethod::~SbMethod() +{} + +SbxArray* SbMethod::GetLocals() +{ + if( pINST ) + return pINST->GetLocals( this ); + else + return NULL; +} + +SbxArray* SbMethod::GetStatics() +{ + DBG_ERROR( "SbMethod::GetStatics() invalid, AB fragen" ) + return NULL; +} + +BOOL SbMethod::LoadData( SvStream& rStrm, USHORT nVer ) +{ + if( !SbxMethod::LoadData( rStrm, 1 ) ) + return FALSE; + INT16 n; + rStrm >> n; + // nDebugFlags = n; // AB 16.1.96: Nicht mehr uebernehmen + if( nVer == 2 ) + rStrm >> nLine1 >> nLine2 >> nStart >> bInvalid; + // AB: 2.7.1996: HACK wegen 'Referenz kann nicht gesichert werden' + SetFlag( SBX_NO_MODIFY ); + return TRUE; +} + +BOOL SbMethod::StoreData( SvStream& rStrm ) const +{ + if( !SbxMethod::StoreData( rStrm ) ) + return FALSE; + rStrm << (INT16) nDebugFlags + << (INT16) nLine1 + << (INT16) nLine2 + << (INT16) nStart + << (BYTE) bInvalid; + return TRUE; +} + +void SbMethod::GetLineRange( USHORT& l1, USHORT& l2 ) +{ + l1 = nLine1; l2 = nLine2; +} + +// Kann spaeter mal weg + +SbxInfo* SbMethod::GetInfo() +{ + return pInfo; +} + +// Schnittstelle zum Ausfuehren einer Methode aus den Applikationen +// #34191# Mit speziellem RefCounting, damit das Basic nicht durch CloseDocument() +// abgeschossen werden kann. Rueckgabewert wird als String geliefert. +ErrCode SbMethod::Call( SbxValue* pRet ) +{ + // RefCount vom Modul hochzaehlen + SbModule* pMod = (SbModule*)GetParent(); + pMod->AddRef(); + + // RefCount vom Basic hochzaehlen + StarBASIC* pBasic = (StarBASIC*)pMod->GetParent(); + pBasic->AddRef(); + + // Values anlegen, um Return-Wert zu erhalten + SbxValues aVals; + aVals.eType = SbxVARIANT; + Get( aVals ); + if ( pRet ) + pRet->Put( aVals ); + + // Gab es einen Error + ErrCode nErr = SbxBase::GetError(); + SbxBase::ResetError(); + + // Objekte freigeben + pMod->ReleaseRef(); + pBasic->ReleaseRef(); + + return nErr; +} + +///////////////////////////////////////////////////////////////////////// + +// Implementation SbJScriptMethod (Method-Klasse als Wrapper fuer JavaScript-Funktionen) + +SbJScriptMethod::SbJScriptMethod( const String& r, SbxDataType t, SbModule* p ) + : SbMethod( r, t, p ) +{ +} + +SbJScriptMethod::~SbJScriptMethod() +{} + + +///////////////////////////////////////////////////////////////////////// + +SbProperty::SbProperty( const String& r, SbxDataType t, SbModule* p ) + : SbxProperty( r, t ), pMod( p ) +{ + bInvalid = FALSE; +} + +SbProperty::~SbProperty() +{} + + |