blob: 4139b8c5c32d7f1e6b9a702fa0c335dae21c405e [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sc.hxx"
//------------------------------------------------------------------------
#include "decl.h"
#include "lotform.hxx"
#include "compiler.hxx"
#include "lotrange.hxx"
#include "namebuff.hxx"
#include "root.hxx"
#include "ftools.hxx"
#include "tool.h"
#include <math.h>
extern WKTYP eTyp;
static const sal_Char* GetAddInName( const sal_uInt8 nIndex );
static DefTokenId lcl_KnownAddIn( const ByteString& sTest );
//extern double decipher_Number123( sal_uInt32 nValue );
void LotusToSc::DoFunc( DefTokenId eOc, sal_uInt8 nAnz, const sal_Char* pExtString )
{
TokenId eParam[ 256 ];
sal_Int32 nLauf;
TokenId nMerk0, nMerk1;
sal_Bool bAddIn = sal_False;
sal_Bool bNeg = sal_False;
DBG_ASSERT( nAnz < 128, "-LotusToSc::DoFunc(): Neee! -so viel kann ich nicht!" );
if( eOc == ocNoName )
{
ByteString t;
if( pExtString )
{
const ByteString s( "@<<@123>>" );
t = pExtString;
xub_StrLen n = t.Search( s );
if( n != STRING_NOTFOUND )
t.Erase( 0, n + s.Len() );
t.EraseTrailingChars( '(' );
eOc = lcl_KnownAddIn( t );
if( eOc == ocNoName )
t.Insert( "L123_", 0 );
}
else
t = "#UNKNOWN FUNC NAME#";
if( eOc == ocNoName )
{
bAddIn = sal_True;
nMerk0 = aPool.Store( eOc, String( t, eSrcChar ) );
aPool << nMerk0;
}
}
for( nLauf = 0 ; nLauf < nAnz ; nLauf++ )
aStack >> eParam[ nLauf ];
// Spezialfaelle...
switch( eOc )
{
case ocIndex:
DBG_ASSERT( nAnz > 2, "+LotusToSc::DoFunc(): ocIndex braucht mind. 2 Parameter!" );
nMerk0 = eParam[ 0 ];
eParam[ 0 ] = eParam[ 1 ];
eParam[ 1 ] = nMerk0;
IncToken( eParam[ 0 ] );
IncToken( eParam[ 1 ] );
break;
case ocIRR:
{
DBG_ASSERT( nAnz == 2, "+LotusToSc::DoFunc(): ocIRR hat nur 2 Parameter!" );
nMerk0 = eParam[ 0 ];
eParam[ 0 ] = eParam[ 1 ];
eParam[ 1 ] = nMerk0;
}
break;
case ocGetYear:
{
nMerk0 = aPool.Store( 1900.0 );
aPool << ocOpen;
}
break;
case ocChose:
{// 1. Parameter ++
if (nAnz >= 1)
IncToken( eParam[ nAnz - 1 ] );
}
break;
case ocFind:
case ocHLookup:
case ocVLookup:
{// letzten Parameter ++
IncToken( eParam[ 0 ] );
}
break;
case ocMid:
case ocReplace:
{// 2. Parameter ++
if (nAnz >= 2)
IncToken( eParam[ nAnz - 2 ] );
}
break;
case ocZins:
{
// neue Anzahl = 4!
DBG_ASSERT( nAnz == 3,
"*LotusToSc::DoFunc(): ZINS() hat 3 Parameter!" );
nAnz = 4;
eParam[ 3 ] = eParam[ 0 ]; // 3. -> 1.
eParam[ 0 ] = eParam[ 2 ]; // 1. -> 4.
NegToken( eParam[ 1 ] ); // 2. -> -2. (+ 2. -> 3.)
eParam[ 2 ] = n0Token; // -> 2. als Default
}
break;
default:;
}
// ................
if( !bAddIn )
aPool << eOc;
aPool << ocOpen;
if( nAnz > 0 )
{
sal_Int16 nNull = -1; // gibt einen auszulassenden Parameter an
// ACHTUNG: 0 ist der letzte Parameter, nAnz-1 der erste
sal_Int16 nLast = nAnz - 1;
if( eOc == ocRMZ )
{ // Extrawurst ocRMZ letzter Parameter negiert!
// zusaetzlich: 1. -> 3., 3. -> 2., 2. -> 1.
DBG_ASSERT( nAnz == 3,
"+LotusToSc::DoFunc(): ocRMZ hat genau 3 Parameter!" );
aPool << eParam[ 1 ] << ocSep << eParam[ 0 ] << ocSep
<< ocNegSub << eParam[ 2 ];
}
else
{ // Normalfall
// [Parameter{;Parameter}]
aPool << eParam[ nLast ];
for( nLauf = nLast - 1 ; nLauf >= 0 ; nLauf-- )
{
if( nLauf != nNull )
aPool << ocSep << eParam[ nLauf ];
}
}
}
// Spezialfaelle...
if( eOc == ocGetYear )
{
aPool << ocClose << ocSub << nMerk0;
}
else if( eOc == ocFixed )
{
aPool << ocSep << ocTrue << ocOpen << ocClose;
}
else if( eOc == ocFind )
{
nMerk1 = aPool.Store();
DecToken( nMerk1 );
aPool << nMerk1;
}
aPool << ocClose;
// ................
aPool >> aStack;
if( bNeg )
{
aPool << ocOpen << ocSub << aStack << ocClose;
aPool >> aStack;
}
}
void LotusToSc::LotusRelToScRel( sal_uInt16 nCol, sal_uInt16 nRow, ScSingleRefData& rSRD )
{
// Col-Bemachung
if( nCol & 0x8000 )
{
rSRD.SetColRel( sal_True );
if( nCol & 0x0080 )
nCol |= 0xFF00;
else
nCol &= 0x00FF;
// #i36252# first cast unsigned 16-bit to signed 16-bit, and then to SCsCOL
rSRD.nRelCol = static_cast< SCsCOL >( static_cast< sal_Int16 >( nCol ) );
}
else
{
rSRD.SetColRel( sal_False );
rSRD.nCol = static_cast< SCsCOL >( nCol & 0x00FF );
}
// Row-Bemachung
if( nRow & 0x8000 )
{
rSRD.SetRowRel( sal_True );
// vorzeichenrichtige Erweiterung
switch( eTyp )
{
// 5432 1098 7654 3210
// 8421 8421 8421 8421
// xxx xxxx xxxx
case eWK_1:
if( nRow & 0x0400 )
nRow |= 0xF800;
else
nRow &= 0x07FF;
break;
// 8421 8421 8421 8421
// x xxxx xxxx xxxx
case eWK_2:
if( nRow & 0x1000 )
nRow |= 0xE000;
else
nRow &= 0x1FFF;
break;
default:
DBG_ERROR( "*LotusToSc::LotusRelToScRel(): etwas vergessen...?" );
}
}
else
{
rSRD.SetRowRel( sal_False );
switch( eTyp )
{
// 5432 1098 7654 3210
// 8421 8421 8421 8421
// xxx xxxx xxxx
case eWK_1:
nRow &= 0x07FF;
break;
// 8421 8421 8421 8421
// xx xxxx xxxx xxxx
case eWK_2:
nRow &= 0x3FFF;
break;
default:
DBG_ERROR( "*LotusToSc::LotusRelToScRel(): etwas vergessen...?" );
}
}
if( rSRD.IsRowRel() )
// #i36252# first cast unsigned 16-bit to signed 16-bit, and then to SCsROW
rSRD.nRelRow = static_cast< SCsROW >( static_cast< sal_Int16 >( nRow ) );
else
rSRD.nRow = static_cast< SCsROW >( nRow );
if( rSRD.IsRowRel() || rSRD.IsColRel() )
rSRD.CalcAbsIfRel( aEingPos );
}
void LotusToSc::ReadSRD( ScSingleRefData& rSRD, sal_uInt8 nRelBit )
{
sal_uInt8 nTab, nCol;
sal_uInt16 nRow;
Read( nRow );
Read( nTab );
Read( nCol );
sal_Bool b3D = ( static_cast< SCTAB >( nTab ) != aEingPos.Tab() );
rSRD.SetColRel( ( nRelBit & 0x01 ) != 0 );
rSRD.nCol = static_cast< SCsCOL >( nCol );
rSRD.SetRowRel( ( nRelBit & 0x02 ) != 0 );
rSRD.nRow = static_cast< SCsROW >( nRow );
rSRD.SetTabRel( ( ( nRelBit & 0x04) != 0 ) || !b3D );
rSRD.nTab = static_cast< SCsTAB >( nTab );
rSRD.SetFlag3D( b3D );
rSRD.CalcRelFromAbs( aEingPos );
}
void LotusToSc::IncToken( TokenId &rParam )
{
aPool << ocOpen << rParam << nAddToken;
rParam = aPool.Store();
}
void LotusToSc::DecToken( TokenId &rParam )
{
aPool << ocOpen << rParam << nSubToken;
rParam = aPool.Store();
}
void LotusToSc::NegToken( TokenId &rParam )
{
aPool << ocNegSub << ocOpen << rParam << ocClose;
rParam = aPool.Store();
}
void LotusToSc::Reset( const ScAddress& rEingPos )
{
LotusConverterBase::Reset( rEingPos );
TokenId nEins = aPool.Store( 1.0 );
aPool << ocClose << ocAdd << nEins;
nAddToken = aPool.Store();
aPool << ocClose << ocSub << nEins;
nSubToken = aPool.Store();
n0Token = aPool.Store( 0.0 );
}
LotusToSc::LotusToSc( SvStream &rStream, CharSet e, sal_Bool b ) :
LotusConverterBase( rStream, 128 )
{
eSrcChar = e;
bWK3 = sal_False;
bWK123 = b;
}
typedef FUNC_TYPE ( FuncType1 ) ( sal_uInt8 );
typedef DefTokenId ( FuncType2 ) ( sal_uInt8 );
ConvErr LotusToSc::Convert( const ScTokenArray*& rpErg, sal_Int32& rRest,
const FORMULA_TYPE /*eFT*/ )
{
sal_uInt8 nOc;
sal_uInt8 nAnz;
sal_uInt8 nRelBits;
sal_uInt16 nStrLen;
sal_uInt16 nRngIndex;
FUNC_TYPE eType = FT_NOP;
TokenId nMerk0;
DefTokenId eOc;
const sal_Char* pExtName = 0;
RangeNameBufferWK3& rRangeNameBufferWK3 = *pLotusRoot->pRngNmBffWK3;
ScComplexRefData aCRD;
aCRD.InitFlags();
ScSingleRefData& rR = aCRD.Ref1;
LR_ID nId;
TokenId nNewId;
LotusRangeList& rRangeList = *pLotusRoot->pRangeNames;
FuncType1* pIndexToType;
FuncType2* pIndexToToken;
if( bWK3 )
{ // for > WK3
pIndexToType = IndexToTypeWK123;
pIndexToToken = IndexToTokenWK123;
}
else if( bWK123 )
{
pIndexToType = IndexToTypeWK123;
pIndexToToken = IndexToTokenWK123;
}
else
{
pIndexToType = IndexToType;
pIndexToToken = IndexToToken;
rR.SetTabRel( sal_True );
rR.nTab = aEingPos.Tab();
rR.nRelTab = 0;
rR.SetFlag3D( sal_False );
}
aCRD.Ref2 = rR;
nBytesLeft = rRest;
while( eType ) // != FT_Return (==0)
{
Read( nOc );
if( nBytesLeft < 0 )
{
rpErg = aPool[ aStack.Get() ];
return ConvErrCount;
}
eType = ( pIndexToType )( nOc );
eOc = ( pIndexToToken)( nOc );
if( eOc == ocNoName )
pExtName = GetAddInName( nOc );
switch( eType )
{
case FT_Return:
if( bWK3 || bWK123 )
nBytesLeft = 0; // wird ab WK3 nicht benutzt
rRest = nBytesLeft;
break;
case FT_NotImpl:
case FT_FuncFix0: DoFunc( eOc, 0, pExtName ); break;
case FT_FuncFix1: DoFunc( eOc, 1, pExtName ); break;
case FT_FuncFix2: DoFunc( eOc, 2, pExtName ); break;
case FT_FuncFix3: DoFunc( eOc, 3, pExtName ); break;
case FT_FuncFix4: DoFunc( eOc, 4, pExtName ); break;
case FT_FuncVar:
Read( nAnz );
DoFunc( eOc, nAnz, pExtName );
break;
case FT_Neg:
aPool << ocOpen << ocNegSub << aStack << ocClose;
aPool >> aStack;
break;
case FT_Op:
aStack >> nMerk0;
aPool << aStack << eOc << nMerk0;
aPool >> aStack;
break;
case FT_ConstFloat:
{
double fDouble;
Read( fDouble );
aStack << aPool.Store( fDouble );
}
break;
case FT_Variable:
{
sal_uInt16 nCol, nRow;
Read( nCol );
Read( nRow );
LotusRelToScRel( nCol, nRow, rR );
if( bWK3 )
nNewId = aPool.Store( rR );
else
{
nId = rRangeList.GetIndex( rR.nCol, rR.nRow );
if( nId == ID_FAIL )
// kein Range dazu
nNewId = aPool.Store( rR );
else
nNewId = aPool.Store( ( sal_uInt16 ) nId );
}
aStack << nNewId;
}
break;
case FT_Range:
{
sal_uInt16 nColS, nRowS, nColE, nRowE;
Read( nColS );
Read( nRowS );
Read( nColE );
Read( nRowE );
LotusRelToScRel( nColS, nRowS, rR );
LotusRelToScRel( nColE, nRowE, aCRD.Ref2 );
if( bWK3 )
nNewId = aPool.Store( aCRD );
else
{
nId = rRangeList.GetIndex(
rR.nCol, rR.nRow, aCRD.Ref2.nCol, aCRD.Ref2.nRow );
if( nId == ID_FAIL )
// kein Range dazu
nNewId = aPool.Store( aCRD );
else
nNewId = aPool.Store( ( sal_uInt16 ) nId );
}
aStack << nNewId;
}
break;
case FT_Braces:
aPool << ocOpen << aStack << ocClose;
aPool >> aStack;
break;
case FT_ConstInt:
{
sal_Int16 nVal;
Read( nVal );
aStack << aPool.Store( ( double ) nVal );
}
break;
case FT_ConstString:
{
String aTmp( ScfTools::ReadCString( aIn, nBytesLeft, eSrcChar ) );
aStack << aPool.Store( aTmp );
}
break;
case FT_NOP:
break;
// ------------------------------------------ fuer > WK3 -
case FT_Cref:
Read( nRelBits );
ReadSRD( rR, nRelBits );
aStack << aPool.Store( rR );
break;
case FT_Rref:
Read( nRelBits );
ReadCRD( aCRD, nRelBits );
aStack << aPool.Store( aCRD );
break;
case FT_Nrref:
{
String aTmp( ScfTools::ReadCString( aIn, nBytesLeft, eSrcChar ) );
if( rRangeNameBufferWK3.FindRel( aTmp, nRngIndex ) )
aStack << aPool.Store( nRngIndex );
else
{
String aText( RTL_CONSTASCII_USTRINGPARAM( "NRREF " ) );
aText += aTmp;
aStack << aPool.Store( aText );
}
}
break;
case FT_Absnref:
{
String aTmp( ScfTools::ReadCString( aIn, nBytesLeft, eSrcChar ) );
if( rRangeNameBufferWK3.FindAbs( aTmp, nRngIndex ) )
aStack << aPool.Store( nRngIndex );
else
{
String aText( RTL_CONSTASCII_USTRINGPARAM( "ABSNREF " ) );
aText += aTmp;
aStack << aPool.Store( aText );
}
}
break;
case FT_Erref:
Ignore( 4 );
aPool << ocBad;
aPool >> aStack;
break;
case FT_Ecref:
Ignore( 5 );
aPool << ocBad;
aPool >> aStack;
break;
case FT_Econstant:
Ignore( 10 );
aPool << ocBad;
aPool >> aStack;
break;
case FT_Splfunc:
{
Read( nAnz );
Read( nStrLen );
if( nStrLen )
{
sal_Char* p = new (::std::nothrow) sal_Char[ nStrLen + 1 ];
if (p)
{
aIn.Read( p, nStrLen );
p[ nStrLen ] = 0x00;
DoFunc( ocNoName, nAnz, p );
delete[] p;
}
else
DoFunc( ocNoName, nAnz, NULL );
}
else
DoFunc( ocNoName, nAnz, NULL );
}
break;
case FT_Const10Float:
if ( bWK123 )
{
double fValue;
Read( fValue );
aStack << aPool.Store( fValue );
}
else aStack << aPool.Store( ScfTools::ReadLongDouble( aIn ) );
break;
case FT_Snum:
if ( bWK123 )
{
sal_uInt32 nValue;
Read( nValue );
double fValue = Snum32ToDouble( nValue );
aStack << aPool.Store( fValue );
}
else
{
sal_Int16 nVal;
Read( nVal );
aStack << aPool.Store( SnumToDouble( nVal ) );
}
break;
default:
DBG_ERROR( "*LotusToSc::Convert(): unbekannter enum!" );
}
}
rpErg = aPool[ aStack.Get() ];
DBG_ASSERT( nBytesLeft >= 0, "*LotusToSc::Convert(): zuviel verarbeitet!");
DBG_ASSERT( nBytesLeft <= 0, "*LotusToSc::Convert(): wat is mit'm Rest?" );
if( rRest )
aIn.SeekRel( nBytesLeft ); // eventuellen Rest/Ueberlauf korrigieren
rRest = 0;
return ConvOK;
}
FUNC_TYPE LotusToSc::IndexToType( sal_uInt8 nIndex )
{
static const FUNC_TYPE pType[ 256 ] =
{ // Code Bezeichnung
FT_ConstFloat, // 0 8-Byte-IEEE-Float
FT_Variable, // 1 Variable
FT_Range, // 2 Bereich
FT_Return, // 3 return
FT_Braces, // 4 Klammer
FT_ConstInt, // 5 2-Byte-Integer
FT_ConstString, // 6 ASCII-String
FT_NOP, // 7 NOP
FT_Neg, // 8 Negation
FT_Op, // 9 Addition
FT_Op, // 10 Subtraktion
FT_Op, // 11 Multiplikation
FT_Op, // 12 Division
FT_Op, // 13 Potenzierung
FT_Op, // 14 Gleichheit
FT_Op, // 15 Ungleich
FT_Op, // 16 Kleiner-gleich
FT_Op, // 17 Groesser-gleich
FT_Op, // 18 Kleiner
FT_Op, // 19 Groesser
FT_Op, // 20 And (logisch)
FT_Op, // 21 Or (logisch)
FT_FuncFix1, // 22 Not (logisch)
FT_NOP, // 23 unaeres Plus
FT_NotImpl, // 24
FT_NotImpl, // 25
FT_NotImpl, // 26
FT_NotImpl, // 27
FT_NotImpl, // 28
FT_NotImpl, // 29
FT_NotImpl, // 30
FT_FuncFix0, // 31 Not applicable
FT_FuncFix0, // 32 Error
FT_FuncFix1, // 33 Betrag ABS()
FT_FuncFix1, // 34 Ganzzahl INT()
FT_FuncFix1, // 35 Quadratwurzel
FT_FuncFix1, // 36 Zehnerlogarithmus
FT_FuncFix1, // 37 Natuerlicher Logarithmus
FT_FuncFix0, // 38 PI
FT_FuncFix1, // 39 Sinus
FT_FuncFix1, // 40 Cosinus
FT_FuncFix1, // 41 Tangens
FT_FuncFix2, // 42 Arcus-Tangens 2 (4.Quadrant) <----- richtig? -
FT_FuncFix1, // 43 Arcus-Tangens (2.Quadrant)
FT_FuncFix1, // 44 Arcus-Sinus
FT_FuncFix1, // 45 Arcus-Cosinus
FT_FuncFix1, // 46 Exponentialfunktion
FT_FuncFix2, // 47 Modulo
FT_FuncVar, // 48 Auswahl
FT_FuncFix1, // 49 Is not applicable?
FT_FuncFix1, // 50 Is Error?
FT_FuncFix0, // 51 FALSE
FT_FuncFix0, // 52 TRUE
FT_FuncFix0, // 53 Zufallszahl
FT_FuncFix3, // 54 Datum
FT_FuncFix0, // 55 Heute
FT_FuncFix3, // 56 Payment
FT_FuncFix3, // 57 Present Value
FT_FuncFix3, // 58 Future Value
FT_FuncFix3, // 59 If ... then ... else ...
FT_FuncFix1, // 60 Tag des Monats
FT_FuncFix1, // 61 Monat
FT_FuncFix1, // 62 Jahr
FT_FuncFix2, // 63 Runden
FT_FuncFix3, // 64 Zeit
FT_FuncFix1, // 65 Stunde
FT_FuncFix1, // 66 Minute
FT_FuncFix1, // 67 Sekunde
FT_FuncFix1, // 68 Ist Zahl?
FT_FuncFix1, // 69 Ist Text?
FT_FuncFix1, // 70 Len()
FT_FuncFix1, // 71 Val()
FT_FuncFix2, // 72 String()
FT_FuncFix3, // 73 Mid()
FT_FuncFix1, // 74 Char()
FT_FuncFix1, // 75 Ascii()
FT_FuncFix3, // 76 Find()
FT_FuncFix1, // 77 Datevalue
FT_FuncFix1, // 78 Timevalue
FT_FuncFix1, // 79 Cellpointer
FT_FuncVar, // 80 Sum()
FT_FuncVar, // 81 Avg()
FT_FuncVar, // 82 Cnt()
FT_FuncVar, // 83 Min()
FT_FuncVar, // 84 Max()
FT_FuncFix3, // 85 Vlookup()
FT_FuncFix2, // 86 Npv()
FT_FuncVar, // 87 Var()
FT_FuncVar, // 88 Std()
FT_FuncFix2, // 89 Irr()
FT_FuncFix3, // 90 Hlookup()
FT_FuncFix3, // 91 ?
FT_FuncFix3, // 92 ?
FT_FuncFix3, // 93 ?
FT_FuncFix3, // 94 ?
FT_FuncFix3, // 95 ?
FT_FuncFix3, // 96 ?
FT_FuncFix3, // 97 ?
FT_FuncFix3, // 98 Index() <- richtig? -
FT_FuncFix1, // 99 Cols()
FT_FuncFix1, // 100 Rows()
FT_FuncFix2, // 101 Repeat()
FT_FuncFix1, // 102 Upper()
FT_FuncFix1, // 103 Lower()
FT_FuncFix2, // 104 Left()
FT_FuncFix2, // 105 Right()
FT_FuncFix4, // 106 Replace()
FT_FuncFix1, // 107 Proper()
FT_FuncFix2, // 108 Cell()
FT_FuncFix1, // 109 Trim()
FT_FuncFix1, // 110 Clean()
FT_FuncFix1, // 111 F()
FT_FuncFix1, // 112 Wert() (oder W()?)
FT_FuncFix2, // 113 Exact()
FT_NotImpl, // 114 Call()
FT_FuncFix1, // 115 @@()
FT_FuncFix3, // 116 Rate()
FT_FuncFix1, // 117 Term()
FT_FuncFix1, // 118 Cterm()
FT_FuncFix3, // 119 Sln()
FT_FuncFix4, // 120 Syd(), Soy()
FT_FuncFix4, // 121 Ddb()
FT_NotImpl, // 122
FT_NotImpl, // 123
FT_NotImpl, // 124
FT_NotImpl, // 125
FT_NotImpl, // 126
FT_NotImpl, // 127
FT_NotImpl, // 128
FT_NotImpl, // 129
FT_NotImpl, // 130
FT_NotImpl, // 131
FT_NotImpl, // 132
FT_NotImpl, // 133
FT_NotImpl, // 134
FT_NotImpl, // 135
FT_NotImpl, // 136
FT_NotImpl, // 137
FT_NotImpl, // 138
FT_NotImpl, // 139
FT_NotImpl, // 140
FT_NotImpl, // 141
FT_NotImpl, // 142
FT_NotImpl, // 143
FT_NotImpl, // 144
FT_NotImpl, // 145
FT_NotImpl, // 146
FT_NotImpl, // 147
FT_NotImpl, // 148
FT_NotImpl, // 149
FT_NotImpl, // 150
FT_NotImpl, // 151
FT_NotImpl, // 152
FT_NotImpl, // 153
FT_NotImpl, // 154
FT_NotImpl, // 155
FT_FuncVar, // 156 ?
FT_NotImpl, // 157
FT_NotImpl, // 158
FT_NotImpl, // 159
FT_NotImpl, // 160
FT_NotImpl, // 161
FT_NotImpl, // 162
FT_NotImpl, // 163
FT_NotImpl, // 164
FT_NotImpl, // 165
FT_NotImpl, // 166
FT_NotImpl, // 167
FT_NotImpl, // 168
FT_NotImpl, // 169
FT_NotImpl, // 170
FT_NotImpl, // 171
FT_NotImpl, // 172
FT_NotImpl, // 173
FT_NotImpl, // 174
FT_NotImpl, // 175
FT_NotImpl, // 176
FT_NotImpl, // 177
FT_NotImpl, // 178
FT_NotImpl, // 179
FT_NotImpl, // 180
FT_NotImpl, // 181
FT_NotImpl, // 182
FT_NotImpl, // 183
FT_NotImpl, // 184
FT_NotImpl, // 185
FT_NotImpl, // 186
FT_NotImpl, // 187
FT_NotImpl, // 188
FT_NotImpl, // 189
FT_NotImpl, // 190
FT_NotImpl, // 191
FT_NotImpl, // 192
FT_NotImpl, // 193
FT_NotImpl, // 194
FT_NotImpl, // 195
FT_NotImpl, // 196
FT_NotImpl, // 197
FT_NotImpl, // 198
FT_NotImpl, // 199
FT_NotImpl, // 200
FT_NotImpl, // 201
FT_NotImpl, // 202
FT_NotImpl, // 203
FT_NotImpl, // 204
FT_NotImpl, // 205
FT_FuncVar, // 206 ?
FT_NotImpl, // 207
FT_NotImpl, // 208
FT_NotImpl, // 209
FT_NotImpl, // 210
FT_NotImpl, // 211
FT_NotImpl, // 212
FT_NotImpl, // 213
FT_NotImpl, // 214
FT_NotImpl, // 215
FT_NotImpl, // 216
FT_NotImpl, // 217
FT_NotImpl, // 218
FT_NotImpl, // 219
FT_NotImpl, // 220
FT_NotImpl, // 221
FT_NotImpl, // 222
FT_NotImpl, // 223
FT_NotImpl, // 224
FT_NotImpl, // 225
FT_NotImpl, // 226
FT_NotImpl, // 227
FT_NotImpl, // 228
FT_NotImpl, // 229
FT_NotImpl, // 230
FT_NotImpl, // 231
FT_NotImpl, // 232
FT_NotImpl, // 233
FT_NotImpl, // 234
FT_NotImpl, // 235
FT_NotImpl, // 236
FT_NotImpl, // 237
FT_NotImpl, // 238
FT_NotImpl, // 239
FT_NotImpl, // 240
FT_NotImpl, // 241
FT_NotImpl, // 242
FT_NotImpl, // 243
FT_NotImpl, // 244
FT_NotImpl, // 245
FT_NotImpl, // 246
FT_NotImpl, // 247
FT_NotImpl, // 248
FT_NotImpl, // 249
FT_NotImpl, // 250
FT_NotImpl, // 251
FT_NotImpl, // 252
FT_NotImpl, // 253
FT_NotImpl, // 254
FT_FuncVar, // 255 ?
};
return pType[ nIndex ];
}
DefTokenId LotusToSc::IndexToToken( sal_uInt8 nIndex )
{
static const DefTokenId pToken[ 256 ] =
{ // Code Bezeichnung
ocPush, // 0 8-Byte-IEEE-Float
ocPush, // 1 Variable
ocPush, // 2 Bereich
ocPush, // 3 return
ocPush, // 4 Klammer
ocPush, // 5 2-Byte-Integer
ocPush, // 6 ASCII-String
ocPush, // 7 NOP
ocNegSub, // 8 Negation
ocAdd, // 9 Addition
ocSub, // 10 Subtraktion
ocMul, // 11 Multiplikation
ocDiv, // 12 Division
ocPow, // 13 Potenzierung
ocEqual, // 14 Gleichheit
ocNotEqual, // 15 Ungleich
ocLessEqual, // 16 Kleiner-gleich
ocGreaterEqual, // 17 Groesser-gleich
ocLess, // 18 Kleiner
ocGreater, // 19 Groesser
ocAnd, // 20 And (logisch)
ocOr, // 21 Or (logisch)
ocNot, // 22 Not (logisch)
ocPush, // 23 unaeres Plus
ocNoName, // 24
ocNoName, // 25
ocNoName, // 26
ocNoName, // 27
ocNoName, // 28
ocNoName, // 29
ocNoName, // 30
ocNotAvail, // 31 Not available
ocNoName, // 32 Error
ocAbs, // 33 Betrag ABS()
ocInt, // 34 Ganzzahl INT()
ocSqrt, // 35 Quadratwurzel
ocLog10, // 36 Zehnerlogarithmus
ocLn, // 37 Natuerlicher Logarithmus
ocPi, // 38 PI
ocSin, // 39 Sinus
ocCos, // 40 Cosinus
ocTan, // 41 Tangens
ocArcTan2, // 42 Arcus-Tangens 2 (4.Quadrant)
ocArcTan, // 43 Arcus-Tangens (2.Quadrant)
ocArcSin, // 44 Arcus-Sinus
ocArcCos, // 45 Arcus-Cosinus
ocExp, // 46 Exponentialfunktion
ocMod, // 47 Modulo
ocChose, // 48 Auswahl
ocIsNA, // 49 Is not available?
ocIsError, // 50 Is Error?
ocFalse, // 51 FALSE
ocTrue, // 52 TRUE
ocRandom, // 53 Zufallszahl
ocGetDate, // 54 Datum
ocGetActDate, // 55 Heute
ocRMZ, // 56 Payment
ocBW, // 57 Present Value
ocZW, // 58 Future Value
ocIf, // 59 If ... then ... else ...
ocGetDay, // 60 Tag des Monats
ocGetMonth, // 61 Monat
ocGetYear, // 62 Jahr
ocRound, // 63 Runden
ocGetTime, // 64 Zeit
ocGetHour, // 65 Stunde
ocGetMin, // 66 Minute
ocGetSec, // 67 Sekunde
ocIsValue, // 68 Ist Zahl?
ocIsString, // 69 Ist Text?
ocLen, // 70 Len()
ocValue, // 71 Val()
ocFixed, // 72 String() ocFixed ersatzweise + Spezialfall
ocMid, // 73 Mid()
ocChar, // 74 Char()
ocCode, // 75 Ascii()
ocFind, // 76 Find()
ocGetDateValue, // 77 Datevalue
ocGetTimeValue, // 78 Timevalue
ocNoName, // 79 Cellpointer
ocSum, // 80 Sum()
ocAverage, // 81 Avg()
ocCount, // 82 Cnt()
ocMin, // 83 Min()
ocMax, // 84 Max()
ocVLookup, // 85 Vlookup()
ocNPV, // 86 Npv()
ocVar, // 87 Var()
ocNormDist, // 88 Std()
ocIRR, // 89 Irr()
ocHLookup, // 90 Hlookup()
ocDBSum, // 91 XlfDsum
ocDBAverage, // 92 XlfDaverage
ocDBCount, // 93 XlfDcount
ocDBMin, // 94 XlfDmin
ocDBMax, // 95 XlfDmax
ocDBVar, // 96 XlfDvar
ocDBStdDev, // 97 XlfDstdev
ocIndex, // 98 Index()
ocColumns, // 99 Cols()
ocRows, // 100 Rows()
ocRept, // 101 Repeat()
ocUpper, // 102 Upper()
ocLower, // 103 Lower()
ocLeft, // 104 Left()
ocRight, // 105 Right()
ocReplace, // 106 Replace()
ocPropper, // 107 Proper()
ocNoName, // 108 Cell()
ocTrim, // 109 Trim()
ocClean, // 110 Clean()
ocFalse, // 111 F()
ocTrue, // 112 W()
ocExact, // 113 Exact()
ocNoName, // 114 Call()
ocIndirect, // 115 @@()
ocZins, // 116 Rate()
ocNoName, // 117 Term()
ocNoName, // 118 Cterm()
ocLIA, // 119 Sln()
ocDIA, // 120 Syd(), Soy()
ocGDA, // 121 Ddb()
ocNoName, // 122
ocNoName, // 123
ocNoName, // 124
ocNoName, // 125
ocNoName, // 126
ocNoName, // 127
ocNoName, // 128
ocNoName, // 129
ocNoName, // 130
ocNoName, // 131
ocNoName, // 132
ocNoName, // 133
ocNoName, // 134
ocNoName, // 135
ocNoName, // 136
ocNoName, // 137
ocNoName, // 138
ocNoName, // 139
ocNoName, // 140
ocNoName, // 141
ocNoName, // 142
ocNoName, // 143
ocNoName, // 144
ocNoName, // 145
ocNoName, // 146
ocNoName, // 147
ocNoName, // 148
ocNoName, // 149
ocNoName, // 150
ocNoName, // 151
ocNoName, // 152
ocNoName, // 153
ocNoName, // 154
ocNoName, // 155
ocNoName, // 156 ?
ocNoName, // 157
ocNoName, // 158
ocNoName, // 159
ocNoName, // 160
ocNoName, // 161
ocNoName, // 162
ocNoName, // 163
ocNoName, // 164
ocNoName, // 165
ocNoName, // 166
ocNoName, // 167
ocNoName, // 168
ocNoName, // 169
ocNoName, // 170
ocNoName, // 171
ocNoName, // 172
ocNoName, // 173
ocNoName, // 174
ocNoName, // 175
ocNoName, // 176
ocNoName, // 177
ocNoName, // 178
ocNoName, // 179
ocNoName, // 180
ocNoName, // 181
ocNoName, // 182
ocNoName, // 183
ocNoName, // 184
ocNoName, // 185
ocNoName, // 186
ocNoName, // 187
ocNoName, // 188
ocNoName, // 189
ocNoName, // 190
ocNoName, // 191
ocNoName, // 192
ocNoName, // 193
ocNoName, // 194
ocNoName, // 195
ocNoName, // 196
ocNoName, // 197
ocNoName, // 198
ocNoName, // 199
ocNoName, // 200
ocNoName, // 201
ocNoName, // 202
ocNoName, // 203
ocNoName, // 204
ocNoName, // 205
ocNoName, // 206 ?
ocNoName, // 207
ocNoName, // 208
ocNoName, // 209
ocNoName, // 210
ocNoName, // 211
ocNoName, // 212
ocNoName, // 213
ocNoName, // 214
ocNoName, // 215
ocNoName, // 216
ocNoName, // 217
ocNoName, // 218
ocNoName, // 219
ocNoName, // 220
ocNoName, // 221
ocNoName, // 222
ocNoName, // 223
ocNoName, // 224
ocNoName, // 225
ocNoName, // 226
ocNoName, // 227
ocNoName, // 228
ocNoName, // 229
ocNoName, // 230
ocNoName, // 231
ocNoName, // 232
ocNoName, // 233
ocNoName, // 234
ocNoName, // 235
ocNoName, // 236
ocNoName, // 237
ocNoName, // 238
ocNoName, // 239
ocNoName, // 240
ocNoName, // 241
ocNoName, // 242
ocNoName, // 243
ocNoName, // 244
ocNoName, // 245
ocNoName, // 246
ocNoName, // 247
ocNoName, // 248
ocNoName, // 249
ocNoName, // 250
ocNoName, // 251
ocNoName, // 252
ocNoName, // 253
ocNoName, // 254
ocNoName // 255 ?
};
return pToken[ nIndex ];
}
FUNC_TYPE LotusToSc::IndexToTypeWK123( sal_uInt8 nIndex )
{
static const FUNC_TYPE pType[ 256 ] =
{ // Code Bezeichnung
FT_Const10Float, // 0 8-Byte-IEEE-Long-Number
FT_Cref, // 1 Cell Reference
FT_Rref, // 2 Area Reference
FT_Return, // 3 return
FT_Braces, // 4 Klammer
FT_Snum, // 5 Short-Number
FT_ConstString, // 6 ASCII-String
FT_Nrref, // 7 Named range reference
FT_Absnref, // 8 Absolut named range
FT_Erref, // 9 Err range reference
FT_Ecref, // 10 Err cell reference
FT_Econstant, // 11 Err constant
FT_NotImpl, // 12
FT_NotImpl, // 13
FT_Neg, // 14 Negation
FT_Op, // 15 Addition
FT_Op, // 16 Subtraktion
FT_Op, // 17 Multiplikation
FT_Op, // 18 Division
FT_Op, // 19 Potenzierung
FT_Op, // 20 Gleichheit
FT_Op, // 21 Ungleich
FT_Op, // 22 Kleiner-gleich
FT_Op, // 23 Groesser-gleich
FT_Op, // 24 Kleiner
FT_Op, // 25 Groesser
FT_Op, // 26 And (logisch)
FT_Op, // 27 Or (logisch)
FT_FuncFix1, // 28 Not (logisch)
FT_NOP, // 29 unaeres Plus
FT_Op, // 30 Concatenation
FT_FuncFix0, // 31 Not applicable
FT_FuncFix0, // 32 Error
FT_FuncFix1, // 33 Betrag ABS()
FT_FuncFix1, // 34 Ganzzahl INT()
FT_FuncFix1, // 35 Quadratwurzel
FT_FuncFix1, // 36 Zehnerlogarithmus
FT_FuncFix1, // 37 Natuerlicher Logarithmus
FT_FuncFix0, // 38 PI
FT_FuncFix1, // 39 Sinus
FT_FuncFix1, // 40 Cosinus
FT_FuncFix1, // 41 Tangens
FT_FuncFix2, // 42 Arcus-Tangens 2 (4.Quadrant)
FT_FuncFix1, // 43 Arcus-Tangens (2.Quadrant)
FT_FuncFix1, // 44 Arcus-Sinus
FT_FuncFix1, // 45 Arcus-Cosinus
FT_FuncFix1, // 46 Exponentialfunktion
FT_FuncFix2, // 47 Modulo
FT_FuncVar, // 48 Auswahl
FT_FuncFix1, // 49 Is not applicable?
FT_FuncFix1, // 50 Is Error?
FT_FuncFix0, // 51 FALSE
FT_FuncFix0, // 52 TRUE
FT_FuncFix0, // 53 Zufallszahl
FT_FuncFix3, // 54 Datum
FT_FuncFix0, // 55 Heute
FT_FuncFix3, // 56 Payment
FT_FuncFix3, // 57 Present Value
FT_FuncFix3, // 58 Future Value
FT_FuncFix3, // 59 If ... then ... else ...
FT_FuncFix1, // 60 Tag des Monats
FT_FuncFix1, // 61 Monat
FT_FuncFix1, // 62 Jahr
FT_FuncFix2, // 63 Runden
FT_FuncFix3, // 64 Zeit
FT_FuncFix1, // 65 Stunde
FT_FuncFix1, // 66 Minute
FT_FuncFix1, // 67 Sekunde
FT_FuncFix1, // 68 Ist Zahl?
FT_FuncFix1, // 69 Ist Text?
FT_FuncFix1, // 70 Len()
FT_FuncFix1, // 71 Val()
FT_FuncFix2, // 72 String()
FT_FuncFix3, // 73 Mid()
FT_FuncFix1, // 74 Char()
FT_FuncFix1, // 75 Ascii()
FT_FuncFix3, // 76 Find()
FT_FuncFix1, // 77 Datevalue
FT_FuncFix1, // 78 Timevalue
FT_FuncFix1, // 79 Cellpointer
FT_FuncVar, // 80 Sum()
FT_FuncVar, // 81 Avg()
FT_FuncVar, // 82 Cnt()
FT_FuncVar, // 83 Min()
FT_FuncVar, // 84 Max()
FT_FuncFix3, // 85 Vlookup()
FT_FuncFix2, // 86 Npv()
FT_FuncVar, // 87 Var()
FT_FuncVar, // 88 Std()
FT_FuncFix2, // 89 Irr()
FT_FuncFix3, // 90 Hlookup()
FT_FuncVar, // 91 Dsum <-------- neu! -
FT_FuncVar, // 92 Davg <-------- neu! -
FT_FuncVar, // 93 Dcnt <-------- neu! -
FT_FuncVar, // 94 Dmin <-------- neu! -
FT_FuncVar, // 95 Dmax <-------- neu! -
FT_FuncVar, // 96 Dvar <-------- neu! -
FT_FuncVar, // 97 Dstd <-------- neu! -
FT_FuncVar, // 98 Index() <-------- change! -
FT_FuncFix1, // 99 Cols() <-------- neu! -
FT_FuncFix1, // 100 Rows() <-------- neu! -
FT_FuncFix2, // 101 Repeat() <-------- neu! -
FT_FuncFix1, // 102 Upper() <-------- neu! -
FT_FuncFix1, // 103 Lower() <-------- neu! -
FT_FuncFix2, // 104 Left() <-------- neu! -
FT_FuncFix2, // 105 Right() <-------- neu! -
FT_FuncFix4, // 106 Replace() <-------- neu! -
FT_FuncFix1, // 107 Proper() <-------- neu! -
FT_FuncFix2, // 108 Cell() <-------- neu! -
FT_FuncFix1, // 109 Trim() <-------- neu! -
FT_FuncFix1, // 110 Clean() <-------- neu! -
FT_FuncFix1, // 111 S() <--------- change in Bez. -
FT_FuncFix1, // 112 N() <--------- change in Bez. -
FT_FuncFix2, // 113 Exact() <-------- neu! -
FT_NotImpl, // 114 App <--------- change in Bez. -
FT_FuncFix1, // 115 @@() <-------- neu! -
FT_FuncFix3, // 116 Rate() <-------- neu! -
FT_FuncFix3, // 117 Term() <--------- change in Anz.
FT_FuncFix3, // 118 Cterm() <--------- change in Anz.
FT_FuncFix3, // 119 Sln() <-------- neu! -
FT_FuncFix4, // 120 Syd() <-------- neu! -
FT_FuncFix4, // 121 Ddb() <-------- neu! -
FT_Splfunc, // 122 Splfunc <-------- neu! -
FT_FuncFix1, // 123 Sheets <-------- neu! -
FT_FuncFix1, // 124 Info <-------- neu! -
FT_FuncVar, // 125 Sumproduct <-------- neu! -
FT_FuncFix1, // 126 Isrange <-------- neu! -
FT_FuncVar, // 127 Dget <-------- neu! -
FT_FuncVar, // 128 Dquery <-------- neu! -
FT_FuncFix4, // 129 Coord <-------- neu! -
FT_NOP, // 130 Reserved (internal) <-------- neu! -
FT_FuncFix0, // 131 Today <-------- neu! -
FT_FuncVar, // 132 Vdb <-------- neu! -
FT_FuncVar, // 133 Dvars <-------- neu! -
FT_FuncVar, // 134 Dstds <-------- neu! -
FT_FuncVar, // 135 Vars <-------- neu! -
FT_FuncVar, // 136 Stds <-------- neu! -
FT_FuncFix2, // 137 D360 <-------- neu! -
FT_NOP, // 138 Reserved (internal) <-------- neu! -
FT_FuncFix0, // 139 Isapp <-------- neu! - Anzahl ? -
FT_FuncVar, // 140 Isaaf <-------- neu! - Anzahl ? -
FT_FuncFix1, // 141 Weekday <-------- neu! -
FT_FuncFix3, // 142 Datedif <-------- neu! -
FT_FuncVar, // 143 Rank <-------- neu! -
FT_FuncFix2, // 144 Numberstring <-------- neu! -
FT_FuncFix1, // 145 Datestring <-------- neu! -
FT_FuncFix1, // 146 Decimal <-------- neu! -
FT_FuncFix1, // 147 Hex <-------- neu! -
FT_FuncFix4, // 148 Db <-------- neu! -
FT_FuncFix4, // 149 Pmti <-------- neu! -
FT_FuncFix4, // 150 Spi <-------- neu! -
FT_FuncFix1, // 151 Fullp <-------- neu! -
FT_FuncFix1, // 152 Halfp <-------- neu! -
FT_FuncVar, // 153 Pureavg <-------- neu! -
FT_FuncVar, // 154 Purecount <-------- neu! -
FT_FuncVar, // 155 Puremax <-------- neu! -
FT_FuncVar, // 156 Puremin <-------- neu! -
FT_FuncVar, // 157 Purestd <-------- neu! -
FT_FuncVar, // 158 Purevar <-------- neu! -
FT_FuncVar, // 159 Purestds <-------- neu! -
FT_FuncVar, // 160 Purevars <-------- neu! -
FT_FuncFix3, // 161 Pmt2 <-------- neu! -
FT_FuncFix3, // 162 Pv2 <-------- neu! -
FT_FuncFix3, // 163 Fv2 <-------- neu! -
FT_FuncFix3, // 164 Term2 <-------- neu! -
FT_NotImpl, // 165 --- <-------- neu! - Anzahl ? -
FT_FuncFix2, // 166 D360 (US-Version)
FT_NotImpl, // 167
FT_NotImpl, // 168
FT_NotImpl, // 169
FT_NotImpl, // 170
FT_NotImpl, // 171
FT_NotImpl, // 172
FT_NotImpl, // 173
FT_NotImpl, // 174
FT_NotImpl, // 175
FT_NotImpl, // 176
FT_NotImpl, // 177
FT_NotImpl, // 178
FT_NotImpl, // 179
FT_NotImpl, // 180
FT_NotImpl, // 181
FT_NotImpl, // 182
FT_NotImpl, // 183
FT_NotImpl, // 184
FT_NotImpl, // 185
FT_FuncVar, // 186 Solver <-------- neu! -
FT_NotImpl, // 187
FT_NotImpl, // 188
FT_NotImpl, // 189
FT_NotImpl, // 190
FT_NotImpl, // 191
FT_NotImpl, // 192
FT_NotImpl, // 193
FT_NotImpl, // 194
FT_NotImpl, // 195
FT_NotImpl, // 196
FT_NotImpl, // 197
FT_NotImpl, // 198
FT_NotImpl, // 199
FT_NotImpl, // 200
FT_NotImpl, // 201
FT_NotImpl, // 202
FT_NotImpl, // 203
FT_NotImpl, // 204
FT_NotImpl, // 205
FT_NotImpl, // 206
FT_NotImpl, // 207
FT_NotImpl, // 208
FT_NotImpl, // 209
FT_NotImpl, // 210
FT_NotImpl, // 211
FT_NotImpl, // 212
FT_NotImpl, // 213
FT_NotImpl, // 214
FT_NotImpl, // 215
FT_NotImpl, // 216
FT_NotImpl, // 217
FT_NotImpl, // 218
FT_NotImpl, // 219
FT_NotImpl, // 220
FT_NotImpl, // 221
FT_NotImpl, // 222
FT_NotImpl, // 223
FT_NotImpl, // 224
FT_NotImpl, // 225
FT_NotImpl, // 226
FT_NotImpl, // 227
FT_NotImpl, // 228
FT_NotImpl, // 229
FT_NotImpl, // 230
FT_NotImpl, // 231
FT_NotImpl, // 232
FT_NotImpl, // 233
FT_NotImpl, // 234
FT_NotImpl, // 235
FT_NotImpl, // 236
FT_NotImpl, // 237
FT_NotImpl, // 238
FT_NotImpl, // 239
FT_NotImpl, // 240
FT_NotImpl, // 241
FT_NotImpl, // 242
FT_NotImpl, // 243
FT_NotImpl, // 244
FT_NotImpl, // 245
FT_NotImpl, // 246
FT_NotImpl, // 247
FT_NotImpl, // 248
FT_NotImpl, // 249
FT_NotImpl, // 250
FT_NotImpl, // 251
FT_NotImpl, // 252
FT_NotImpl, // 253
FT_NotImpl, // 254
FT_NotImpl, // 255
};
return pType[ nIndex ];
}
DefTokenId LotusToSc::IndexToTokenWK123( sal_uInt8 nIndex )
{
static const DefTokenId pToken[ 256 ] =
{ // Code Bezeichnung
ocPush, // 0 8-Byte-IEEE-Long-Numbers
ocPush, // 1 Variable
ocPush, // 2 Bereich
ocPush, // 3 return
ocPush, // 4 Klammer
ocPush, // 5 Numbers
ocPush, // 6 ASCII-String
ocPush, // 7 Named range reference
ocPush, // 8 Absolut named range
ocPush, // 9 Err range reference
ocPush, // 10 Err cell reference
ocPush, // 11 Err constant
ocPush, // 12
ocPush, // 13
ocNegSub, // 14 Negation
ocAdd, // 15 Addition
ocSub, // 16 Subtraktion
ocMul, // 17 Multiplikation
ocDiv, // 18 Division
ocPow, // 19 Potenzierung
ocEqual, // 20 Gleichheit
ocNotEqual, // 21 Ungleich
ocLessEqual, // 22 Kleiner-gleich
ocGreaterEqual, // 23 Groesser-gleich
ocLess, // 24 Kleiner
ocGreater, // 25 Groesser
ocAnd, // 26 And (logisch)
ocOr, // 27 Or (logisch)
ocNot, // 28 Not (logisch)
ocPush, // 29 unaeres Plus
ocAmpersand, // 30 Concatenation
ocNotAvail, // 31 Not available
ocNoName, // 32 Error
ocAbs, // 33 Betrag ABS()
ocInt, // 34 Ganzzahl INT()
ocSqrt, // 35 Quadratwurzel
ocLog10, // 36 Zehnerlogarithmus
ocLn, // 37 Natuerlicher Logarithmus
ocPi, // 38 PI
ocSin, // 39 Sinus
ocCos, // 40 Cosinus
ocTan, // 41 Tangens
ocArcTan2, // 42 Arcus-Tangens 2 (4.Quadrant)
ocArcTan, // 43 Arcus-Tangens (2.Quadrant)
ocArcSin, // 44 Arcus-Sinus
ocArcCos, // 45 Arcus-Cosinus
ocExp, // 46 Exponentialfunktion
ocMod, // 47 Modulo
ocChose, // 48 Auswahl
ocIsNA, // 49 Is not available?
ocIsError, // 50 Is Error?
ocFalse, // 51 FALSE
ocTrue, // 52 TRUE
ocRandom, // 53 Zufallszahl
ocGetDate, // 54 Datum
ocGetActDate, // 55 Heute
ocRMZ, // 56 Payment
ocBW, // 57 Present Value
ocZW, // 58 Future Value
ocIf, // 59 If ... then ... else ...
ocGetDay, // 60 Tag des Monats
ocGetMonth, // 61 Monat
ocGetYear, // 62 Jahr
ocRound, // 63 Runden
ocGetTime, // 64 Zeit
ocGetHour, // 65 Stunde
ocGetMin, // 66 Minute
ocGetSec, // 67 Sekunde
ocIsValue, // 68 Ist Zahl?
ocIsString, // 69 Ist Text?
ocLen, // 70 Len()
ocValue, // 71 Val()
ocFixed, // 72 String() ocFixed ersatzweise + Spezialfall
ocMid, // 73 Mid()
ocChar, // 74 Char()
ocCode, // 75 Ascii()
ocFind, // 76 Find()
ocGetDateValue, // 77 Datevalue
ocGetTimeValue, // 78 Timevalue
ocNoName, // 79 Cellpointer
ocSum, // 80 Sum()
ocAverage, // 81 Avg()
ocCount, // 82 Cnt()
ocMin, // 83 Min()
ocMax, // 84 Max()
ocVLookup, // 85 Vlookup()
ocNPV, // 86 Npv()
ocVar, // 87 Var()
ocStDev, // 88 Std()
ocIRR, // 89 Irr()
ocHLookup, // 90 Hlookup()
ocDBSum, // 91 XlfDsum
ocDBAverage, // 92 XlfDaverage
ocDBCount, // 93 XlfDcount
ocDBMin, // 94 XlfDmin
ocDBMax, // 95 XlfDmax
ocDBVar, // 96 XlfDvar
ocDBStdDev, // 97 XlfDstdev
ocIndex, // 98 Index()
ocColumns, // 99 Cols()
ocRows, // 100 Rows()
ocRept, // 101 Repeat()
ocUpper, // 102 Upper()
ocLower, // 103 Lower()
ocLeft, // 104 Left()
ocRight, // 105 Right()
ocReplace, // 106 Replace()
ocPropper, // 107 Proper()
ocNoName, // 108 Cell()
ocTrim, // 109 Trim()
ocClean, // 110 Clean()
ocNoName, // 111 F() (Excel: T()?)
ocNoName, // 112 W()
ocExact, // 113 Exact()
ocNoName, // 114 Call()
ocIndirect, // 115 @@()
ocZins, // 116 Rate()
ocNoName, // 117 Term()
ocNoName, // 118 Cterm()
ocLIA, // 119 Sln()
ocDIA, // 120 Syd(), Soy()
ocGDA, // 121 Ddb()
ocNoName, // 122 Splfunc
ocNoName, // 123 Sheets
ocNoName, // 124 Info
ocSumProduct, // 125 Sumproduct
ocNoName, // 126 Isrange
ocDBGet, // 127 Dget
ocNoName, // 128 Dquery
ocNoName, // 129 Coord
ocNoName, // 130 Reserved (internal)
ocGetActDate, // 131 Today
ocNoName, // 132 Vdb
ocDBVarP, // 133 Dvars
ocDBStdDevP, // 134 Dstds
ocVarP, // 135 Vars
ocStDevP, // 136 Stds
ocGetDiffDate360, // 137 D360
ocNoName, // 138 Reserved (internal)
ocNoName, // 139 Isapp
ocNoName, // 140 Isaaf
ocGetDayOfWeek, // 141 Weekday
ocGetDiffDate, // 142 Datedif
ocRank, // 143 Rank
ocNoName, // 144 Numberstring
ocNoName, // 145 Datestring
ocNoName, // 146 Decimal
ocNoName, // 147 Hex
ocNoName, // 148 Db
ocNoName, // 149 Pmti
ocNoName, // 150 Spi
ocNoName, // 151 Fullp
ocNoName, // 152 Halfp
ocNoName, // 153 Pureavg
ocCount2, // 154 Purecount
ocNoName, // 155 Puremax
ocNoName, // 156 Puremin
ocNoName, // 157 Purestd
ocNoName, // 158 Purevar
ocNoName, // 159 Purestds
ocNoName, // 160 Purevars
ocNoName, // 161 Pmt2
ocNoName, // 162 Pv2
ocNoName, // 163 Fv2
ocNoName, // 164 Term2
ocNoName, // 165 --- <-------- neu! - Anzahl ? -
ocGetDiffDate360, // 166 D360 (US-Version, ersatzweise wie ander D360-Funktion)
ocNoName, // 167
ocNoName, // 168
ocNoName, // 169
ocNoName, // 170
ocNoName, // 171
ocNoName, // 172
ocNoName, // 173
ocNoName, // 174
ocNoName, // 175
ocNoName, // 176
ocNoName, // 177
ocNoName, // 178
ocNoName, // 179
ocNoName, // 180
ocNoName, // 181
ocNoName, // 182
ocNoName, // 183
ocNoName, // 184
ocNoName, // 185
ocNoName, // 186
ocNoName, // 187
ocNoName, // 188
ocNoName, // 189
ocNoName, // 190
ocNoName, // 191
ocNoName, // 192
ocNoName, // 193
ocNoName, // 194
ocNoName, // 195
ocNoName, // 196
ocNoName, // 197
ocNoName, // 198
ocNoName, // 199
ocNoName, // 200
ocNoName, // 201
ocNoName, // 202
ocNoName, // 203
ocNoName, // 204
ocNoName, // 205
ocNoName, // 206 ?
ocNoName, // 207
ocNoName, // 208
ocNoName, // 209
ocNoName, // 210
ocNoName, // 211
ocNoName, // 212
ocNoName, // 213
ocNoName, // 214
ocNoName, // 215
ocNoName, // 216
ocNoName, // 217
ocNoName, // 218
ocNoName, // 219
ocNoName, // 220
ocNoName, // 221
ocNoName, // 222
ocNoName, // 223
ocNoName, // 224
ocNoName, // 225
ocNoName, // 226
ocNoName, // 227
ocNoName, // 228
ocNoName, // 229
ocNoName, // 230
ocNoName, // 231
ocNoName, // 232
ocNoName, // 233
ocNoName, // 234
ocNoName, // 235
ocNoName, // 236
ocNoName, // 237
ocNoName, // 238
ocNoName, // 239
ocNoName, // 240
ocNoName, // 241
ocNoName, // 242
ocNoName, // 243
ocNoName, // 244
ocNoName, // 245
ocNoName, // 246
ocNoName, // 247
ocNoName, // 248
ocNoName, // 249
ocNoName, // 250
ocNoName, // 251
ocNoName, // 252
ocNoName, // 253
ocNoName, // 254
ocNoName // 255 ?
};
return pToken[ nIndex ];
}
const sal_Char* GetAddInName( const sal_uInt8 n )
{
static const sal_Char* pNames[ 256 ] =
{
NULL, // 0 8-Byte-IEEE-Float
NULL, // 1 Variable
NULL, // 2 Bereich
NULL, // 3 return
NULL, // 4 Klammer
NULL, // 5 2-Byte-Integer
NULL, // 6 ASCII-String
NULL, // 7 Named range reference
NULL, // 8 Absolut named range
NULL, // 9 Err range reference
NULL, // 10 Err cell reference
NULL, // 11 Err constant
NULL, // 12
NULL, // 13
NULL, // 14 Negation
NULL, // 15 Addition
NULL, // 16 Subtraktion
NULL, // 17 Multiplikation
NULL, // 18 Division
NULL, // 19 Potenzierung
NULL, // 20 Gleichheit
NULL, // 21 Ungleich
NULL, // 22 Kleiner-gleich
NULL, // 23 Groesser-gleich
NULL, // 24 Kleiner
NULL, // 25 Groesser
NULL, // 26 And (logisch)
NULL, // 27 Or (logisch)
NULL, // 28 Not (logisch)
NULL, // 29 unaeres Plus
NULL, // 30 Concatenation
NULL, // 31 Not applicable
NULL, // 32 Error
NULL, // 33 Betrag ABS()
NULL, // 34 Ganzzahl INT()
NULL, // 35 Quadratwurzel
NULL, // 36 Zehnerlogarithmus
NULL, // 37 Natuerlicher Logarithmus
NULL, // 38 PI
NULL, // 39 Sinus
NULL, // 40 Cosinus
NULL, // 41 Tangens
NULL, // 42 Arcus-Tangens 2 (4.Quadrant)
NULL, // 43 Arcus-Tangens (2.Quadrant)
NULL, // 44 Arcus-Sinus
NULL, // 45 Arcus-Cosinus
NULL, // 46 Exponentialfunktion
NULL, // 47 Modulo
NULL, // 48 Auswahl
NULL, // 49 Is not applicable?
NULL, // 50 Is Error?
NULL, // 51 FALSE
NULL, // 52 TRUE
NULL, // 53 Zufallszahl
NULL, // 54 Datum
NULL, // 55 Heute
NULL, // 56 Payment
NULL, // 57 Present Value
NULL, // 58 Future Value
NULL, // 59 If ... then ... else ...
NULL, // 60 Tag des Monats
NULL, // 61 Monat
NULL, // 62 Jahr
NULL, // 63 Runden
NULL, // 64 Zeit
NULL, // 65 Stunde
NULL, // 66 Minute
NULL, // 67 Sekunde
NULL, // 68 Ist Zahl?
NULL, // 69 Ist Text?
NULL, // 70 Len()
NULL, // 71 Val()
NULL, // 72 String() ocFixed ersatzweise + Spezialfall
NULL, // 73 Mid()
NULL, // 74 Char()
NULL, // 75 Ascii()
NULL, // 76 Find()
NULL, // 77 Datevalue
NULL, // 78 Timevalue
"ZELLZEIGER", // 79 Cellpointer
NULL, // 80 Sum()
NULL, // 81 Avg()
NULL, // 82 Cnt()
NULL, // 83 Min()
NULL, // 84 Max()
NULL, // 85 Vlookup()
NULL, // 86 Npv()
NULL, // 87 Var()
NULL, // 88 Std()
NULL, // 89 Irr()
NULL, // 90 Hlookup()
NULL, // 91 XlfDsum
NULL, // 92 XlfDaverage
NULL, // 93 XlfDcount
NULL, // 94 XlfDmin
NULL, // 95 XlfDmax
NULL, // 96 XlfDvar
NULL, // 97 XlfDstdev
NULL, // 98 Index()
NULL, // 99 Cols()
NULL, // 100 Rows()
NULL, // 101 Repeat()
NULL, // 102 Upper()
NULL, // 103 Lower()
NULL, // 104 Left()
NULL, // 105 Right()
NULL, // 106 Replace()
NULL, // 107 Proper()
"ZELLE", // 108 Cell()
NULL, // 109 Trim()
NULL, // 110 Clean()
"F", // 111 F() (Excel: T()?)
"W", // 112 W()
NULL, // 113 Exact()
NULL, // 114 Call()
NULL, // 115 @@()
NULL, // 116 Rate()
"ANN", // 117 Term()
NULL, // 118 Cterm()
NULL, // 119 Sln()
NULL, // 120 Syd(), Soy()
NULL, // 121 Ddb()
"SplFunc", // 122 Splfunc
"BLAETTER", // 123 Sheets
"INFO", // 124 Info
NULL, // 125 Sumproduct
"ISTBEREICH", // 126 Isrange
NULL, // 127 Dget
"DABFRAGE", // 128 Dquery
"KOORD", // 129 Coord
NULL, // 130 Reserved (internal)
NULL, // 131 Today
NULL, // 132 Vdb
NULL, // 133 Dvars
NULL, // 134 Dstds
NULL, // 135 Vars
NULL, // 136 Stds
NULL, // 137 D360
NULL, // 138 Reserved (internal)
NULL, // 139 Isapp
"ISTDEFZUS", // 140 Isaaf
NULL, // 141 Weekday
NULL, // 142 Datedif
NULL, // 143 Rank
NULL, // 144 Numberstring
"DATUMFOLGE", // 145 Datestring
"DEZIMAL", // 146 Decimal
"HEX", // 147 Hex
NULL, // 148 Db
NULL, // 149 Pmti
NULL, // 150 Spi
NULL, // 151 Fullp
NULL, // 152 Halfp
"PURMITTELWERT", // 153 Pureavg
"PURANZAHL", // 154 Purecount
"PURMAX", // 155 Puremax
"PURMIN", // 156 Puremin
"PURSTDABW", // 157 Purestd
"PURVAR", // 158 Purevar
"PURSTDABWP", // 159 Purestds
"PURVARP", // 160 Purevars
NULL, // 161 Pmt2
NULL, // 162 Pv2
NULL, // 163 Fv2
NULL, // 164 Term2
NULL, // 165 --- <-------- neu! - Anzahl ? -
NULL, // 166 D360 (US-Version, ersatzweise wie ander D360-Funktion)
NULL, // 167
NULL, // 168
NULL, // 169
NULL, // 170
NULL, // 171
NULL, // 172
NULL, // 173
NULL, // 174
NULL, // 175
NULL, // 176
NULL, // 177
NULL, // 178
NULL, // 179
NULL, // 180
NULL, // 181
NULL, // 182
NULL, // 183
NULL, // 184
NULL, // 185
NULL, // 186
NULL, // 187
NULL, // 188
NULL, // 189
NULL, // 190
NULL, // 191
NULL, // 192
NULL, // 193
NULL, // 194
NULL, // 195
NULL, // 196
NULL, // 197
NULL, // 198
NULL, // 199
NULL, // 200
NULL, // 201
NULL, // 202
NULL, // 203
NULL, // 204
NULL, // 205
NULL, // 206 ?
NULL, // 207
NULL, // 208
NULL, // 209
NULL, // 210
NULL, // 211
NULL, // 212
NULL, // 213
NULL, // 214
NULL, // 215
NULL, // 216
NULL, // 217
NULL, // 218
NULL, // 219
NULL, // 220
NULL, // 221
NULL, // 222
NULL, // 223
NULL, // 224
NULL, // 225
NULL, // 226
NULL, // 227
NULL, // 228
NULL, // 229
NULL, // 230
NULL, // 231
NULL, // 232
NULL, // 233
NULL, // 234
NULL, // 235
NULL, // 236
NULL, // 237
NULL, // 238
NULL, // 239
NULL, // 240
NULL, // 241
NULL, // 242
NULL, // 243
NULL, // 244
NULL, // 245
NULL, // 246
NULL, // 247
NULL, // 248
NULL, // 249
NULL, // 250
NULL, // 251
NULL, // 252
NULL, // 253
NULL, // 254
NULL // 255 ?
};
return pNames[ n ];
}
static DefTokenId lcl_KnownAddIn( const ByteString& sTest )
{
DefTokenId eId = ocNoName;
if( sTest == "FACT" )
eId = ocFact;
else if(sTest== "ISEMPTY")
eId=ocIsEmpty;
else if(sTest== "DEGTORAD")
eId=ocRad;
else if(sTest== "RADTODEG")
eId=ocDeg;
else if(sTest== "SIGN")
eId=ocPlusMinus;
else if(sTest== "ACOSH")
eId=ocArcCosHyp;
else if(sTest== "ACOTH")
eId=ocArcCotHyp;
else if(sTest== "ASINH")
eId=ocArcSinHyp;
else if(sTest== "ATANH")
eId=ocArcTanHyp;
else if(sTest== "COSH")
eId=ocCosHyp;
else if(sTest== "COTH")
eId=ocCotHyp;
else if(sTest== "SINH")
eId=ocSinHyp;
else if(sTest== "TANH")
eId=ocTanHyp;
else if(sTest== "EVEN")
eId=ocIsEven;
else if(sTest== "ODD")
eId=ocIsOdd;
else if(sTest== "ACOT")
eId=ocArcCot;
else if(sTest== "COT")
eId=ocCot;
else if(sTest== "ACOT")
eId=ocArcCot;
else if(sTest== "TRUNC")
eId=ocTrunc;
else if(sTest== "GEOMEAN")
eId=ocGeoMean;
else if(sTest== "HARMEAN")
eId=ocHarMean;
else if(sTest== "CORREL")
eId=ocCorrel;
else if(sTest== "MEDIAN")
eId=ocMedian;
else if(sTest== "COV")
eId=ocCovar;
else if(sTest== "SKEWNESS")
eId=ocSchiefe;
else if(sTest== "CHITEST")
eId=ocChiTest;
else if(sTest== "FTEST")
eId=ocFTest;
else if(sTest== "AVEDEV")
eId=ocAveDev;
else if(sTest== "PRODUCT")
eId=ocProduct;
else if(sTest== "PERMUT")
eId=ocVariationen;
else if(sTest== "GAMMALN")
eId=ocGammaLn;
else if(sTest== "POISSON")
eId=ocPoissonDist;
else if(sTest== "NORMAL")
eId=ocNormDist;
else if(sTest== "CRITBINOMIAL")
eId=ocKritBinom;
return eId;
}