xref: /trunk/main/sc/source/filter/lotus/lotform.cxx (revision cf6516809c57e1bb0a940545cca99cdad54d4ce2)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_scfilt.hxx"
26 
27 
28 
29 //------------------------------------------------------------------------
30 
31 #include "decl.h"
32 #include "lotform.hxx"
33 #include "compiler.hxx"
34 #include "lotrange.hxx"
35 #include "namebuff.hxx"
36 #include "root.hxx"
37 #include "ftools.hxx"
38 #include "tool.h"
39 
40 #include <math.h>
41 
42 extern WKTYP                eTyp;
43 
44 static const sal_Char*      GetAddInName( const sal_uInt8 nIndex );
45 
46 static DefTokenId           lcl_KnownAddIn( const ByteString& sTest );
47 
48 //extern double decipher_Number123( sal_uInt32 nValue );
49 
50 
DoFunc(DefTokenId eOc,sal_uInt8 nAnz,const sal_Char * pExtString)51 void LotusToSc::DoFunc( DefTokenId eOc, sal_uInt8 nAnz, const sal_Char* pExtString )
52 {
53     TokenId                     eParam[ 256 ];
54     sal_Int32                       nLauf;
55     TokenId                     nMerk0, nMerk1;
56 
57     sal_Bool                        bAddIn = sal_False;
58     sal_Bool                        bNeg = sal_False;
59 
60     DBG_ASSERT( nAnz < 128, "-LotusToSc::DoFunc(): Neee! -so viel kann ich nicht!" );
61 
62     if( eOc == ocNoName )
63     {
64         ByteString              t;
65         if( pExtString )
66         {
67             const ByteString    s( "@<<@123>>" );
68 
69             t = pExtString;
70 
71             xub_StrLen          n = t.Search( s );
72             if( n != STRING_NOTFOUND )
73                 t.Erase( 0, n + s.Len() );
74 
75             t.EraseTrailingChars( '(' );
76 
77             eOc = lcl_KnownAddIn( t );
78 
79             if( eOc == ocNoName )
80                 t.Insert( "L123_", 0 );
81         }
82         else
83             t = "#UNKNOWN FUNC NAME#";
84 
85         if( eOc == ocNoName )
86         {
87             bAddIn = sal_True;
88             nMerk0 = aPool.Store( eOc, String( t, eSrcChar ) );
89 
90             aPool << nMerk0;
91         }
92     }
93 
94     for( nLauf = 0 ; nLauf < nAnz ; nLauf++ )
95         aStack >> eParam[ nLauf ];
96 
97     // Spezialfaelle...
98     switch( eOc )
99     {
100         case ocIndex:
101             DBG_ASSERT( nAnz > 2, "+LotusToSc::DoFunc(): ocIndex braucht mind. 2 Parameter!" );
102             nMerk0 = eParam[ 0 ];
103             eParam[ 0 ] = eParam[ 1 ];
104             eParam[ 1 ] = nMerk0;
105             IncToken( eParam[ 0 ] );
106             IncToken( eParam[ 1 ] );
107             break;
108         case ocIRR:
109         {
110             DBG_ASSERT( nAnz == 2, "+LotusToSc::DoFunc(): ocIRR hat nur 2 Parameter!" );
111             nMerk0 = eParam[ 0 ];
112             eParam[ 0 ] = eParam[ 1 ];
113             eParam[ 1 ] = nMerk0;
114         }
115             break;
116         case ocGetYear:
117         {
118             nMerk0 = aPool.Store( 1900.0 );
119             aPool << ocOpen;
120         }
121             break;
122         case ocChose:
123         {// 1. Parameter ++
124             if (nAnz >= 1)
125                 IncToken( eParam[ nAnz - 1 ] );
126         }
127             break;
128         case ocFind:
129         case ocHLookup:
130         case ocVLookup:
131         {// letzten Parameter ++
132             IncToken( eParam[ 0 ] );
133         }
134             break;
135         case ocMid:
136         case ocReplace:
137         {// 2. Parameter ++
138             if (nAnz >= 2)
139                 IncToken( eParam[ nAnz - 2 ] );
140         }
141             break;
142         case ocZins:
143         {
144             // neue Anzahl = 4!
145             DBG_ASSERT( nAnz == 3,
146                 "*LotusToSc::DoFunc(): ZINS() hat 3 Parameter!" );
147             nAnz = 4;
148             eParam[ 3 ] = eParam[ 0 ];  // 3. -> 1.
149             eParam[ 0 ] = eParam[ 2 ];  // 1. -> 4.
150             NegToken( eParam[ 1 ] );    // 2. -> -2. (+ 2. -> 3.)
151             eParam[ 2 ] = n0Token;      //    -> 2. als Default
152         }
153             break;
154         default:;
155     }
156     // ................
157 
158 
159     if( !bAddIn )
160         aPool << eOc;
161 
162     aPool << ocOpen;
163 
164     if( nAnz > 0 )
165     {
166         sal_Int16 nNull = -1;   // gibt einen auszulassenden Parameter an
167             // ACHTUNG: 0 ist der letzte Parameter, nAnz-1 der erste
168 
169         sal_Int16 nLast = nAnz - 1;
170 
171         if( eOc == ocRMZ )
172         {   // Extrawurst ocRMZ letzter Parameter negiert!
173             // zusaetzlich: 1. -> 3., 3. -> 2., 2. -> 1.
174             DBG_ASSERT( nAnz == 3,
175                 "+LotusToSc::DoFunc(): ocRMZ hat genau 3 Parameter!" );
176             aPool << eParam[ 1 ] << ocSep << eParam[ 0 ] << ocSep
177                 << ocNegSub << eParam[ 2 ];
178         }
179         else
180         {   // Normalfall
181             // [Parameter{;Parameter}]
182             aPool << eParam[ nLast ];
183 
184             for( nLauf = nLast - 1 ; nLauf >= 0 ; nLauf-- )
185             {
186                 if( nLauf != nNull )
187                     aPool << ocSep << eParam[ nLauf ];
188             }
189         }
190     }
191 
192 
193     // Spezialfaelle...
194     if( eOc == ocGetYear )
195     {
196         aPool << ocClose << ocSub << nMerk0;
197     }
198     else if( eOc == ocFixed )
199     {
200         aPool << ocSep << ocTrue << ocOpen << ocClose;
201     }
202     else if( eOc == ocFind )
203     {
204         nMerk1 = aPool.Store();
205         DecToken( nMerk1 );
206         aPool << nMerk1;
207     }
208 
209     aPool << ocClose;
210 
211     // ................
212 
213     aPool >> aStack;
214 
215     if( bNeg )
216     {
217         aPool << ocOpen << ocSub << aStack << ocClose;
218         aPool >> aStack;
219     }
220 }
221 
222 
LotusRelToScRel(sal_uInt16 nCol,sal_uInt16 nRow,ScSingleRefData & rSRD)223 void LotusToSc::LotusRelToScRel( sal_uInt16 nCol, sal_uInt16 nRow, ScSingleRefData& rSRD )
224 {
225     // Col-Bemachung
226     if( nCol & 0x8000 )
227     {
228         rSRD.SetColRel( sal_True );
229         if( nCol & 0x0080 )
230             nCol |= 0xFF00;
231         else
232             nCol &= 0x00FF;
233         // #i36252# first cast unsigned 16-bit to signed 16-bit, and then to SCsCOL
234         rSRD.nRelCol = static_cast< SCsCOL >( static_cast< sal_Int16 >( nCol ) );
235     }
236     else
237     {
238         rSRD.SetColRel( sal_False );
239         rSRD.nCol = static_cast< SCsCOL >( nCol & 0x00FF );
240     }
241 
242     // Row-Bemachung
243     if( nRow & 0x8000 )
244     {
245         rSRD.SetRowRel( sal_True );
246         // vorzeichenrichtige Erweiterung
247         switch( eTyp )
248         {
249             // 5432 1098 7654 3210
250             // 8421 8421 8421 8421
251             //       xxx xxxx xxxx
252             case eWK_1:
253                 if( nRow & 0x0400 )
254                     nRow |= 0xF800;
255                 else
256                     nRow &= 0x07FF;
257                 break;
258             // 8421 8421 8421 8421
259             //    x xxxx xxxx xxxx
260             case eWK_2:
261                 if( nRow & 0x1000 )
262                     nRow |= 0xE000;
263                 else
264                     nRow &= 0x1FFF;
265                 break;
266             default:
267                 DBG_ERROR( "*LotusToSc::LotusRelToScRel(): etwas vergessen...?" );
268         }
269     }
270     else
271     {
272         rSRD.SetRowRel( sal_False );
273         switch( eTyp )
274         {
275             // 5432 1098 7654 3210
276             // 8421 8421 8421 8421
277             //       xxx xxxx xxxx
278             case eWK_1:
279                 nRow &= 0x07FF;
280                 break;
281             // 8421 8421 8421 8421
282             //   xx xxxx xxxx xxxx
283             case eWK_2:
284                 nRow &= 0x3FFF;
285                 break;
286             default:
287                 DBG_ERROR( "*LotusToSc::LotusRelToScRel(): etwas vergessen...?" );
288         }
289     }
290 
291     if( rSRD.IsRowRel() )
292         // #i36252# first cast unsigned 16-bit to signed 16-bit, and then to SCsROW
293         rSRD.nRelRow = static_cast< SCsROW >( static_cast< sal_Int16 >( nRow ) );
294     else
295         rSRD.nRow = static_cast< SCsROW >( nRow );
296 
297     if( rSRD.IsRowRel() || rSRD.IsColRel() )
298         rSRD.CalcAbsIfRel( aEingPos );
299 }
300 
301 
ReadSRD(ScSingleRefData & rSRD,sal_uInt8 nRelBit)302 void LotusToSc::ReadSRD( ScSingleRefData& rSRD, sal_uInt8 nRelBit )
303 {
304     sal_uInt8           nTab, nCol;
305     sal_uInt16          nRow;
306 
307     Read( nRow );
308     Read( nTab );
309     Read( nCol );
310 
311     sal_Bool b3D = ( static_cast< SCTAB >( nTab ) != aEingPos.Tab() );
312 
313     rSRD.SetColRel( ( nRelBit & 0x01 ) != 0 );
314     rSRD.nCol = static_cast< SCsCOL >( nCol );
315 
316     rSRD.SetRowRel( ( nRelBit & 0x02 ) != 0 );
317     rSRD.nRow = static_cast< SCsROW >( nRow );
318 
319     rSRD.SetTabRel( ( ( nRelBit & 0x04) != 0 ) || !b3D );
320     rSRD.nTab = static_cast< SCsTAB >( nTab );
321 
322     rSRD.SetFlag3D( b3D );
323 
324     rSRD.CalcRelFromAbs( aEingPos );
325 }
326 
327 
IncToken(TokenId & rParam)328 void LotusToSc::IncToken( TokenId &rParam )
329 {
330     aPool << ocOpen << rParam << nAddToken;
331     rParam = aPool.Store();
332 }
333 
334 
DecToken(TokenId & rParam)335 void LotusToSc::DecToken( TokenId &rParam )
336 {
337     aPool << ocOpen << rParam << nSubToken;
338     rParam = aPool.Store();
339 }
340 
341 
NegToken(TokenId & rParam)342 void LotusToSc::NegToken( TokenId &rParam )
343 {
344     aPool << ocNegSub << ocOpen << rParam << ocClose;
345     rParam = aPool.Store();
346 }
347 
348 
Reset(const ScAddress & rEingPos)349 void LotusToSc::Reset( const ScAddress& rEingPos )
350 {
351     LotusConverterBase::Reset( rEingPos );
352 
353     TokenId nEins = aPool.Store( 1.0 );
354 
355     aPool << ocClose << ocAdd << nEins;
356     nAddToken = aPool.Store();
357 
358     aPool << ocClose << ocSub << nEins;
359     nSubToken = aPool.Store();
360 
361     n0Token = aPool.Store( 0.0 );
362 }
363 
364 
LotusToSc(SvStream & rStream,CharSet e,sal_Bool b)365 LotusToSc::LotusToSc( SvStream &rStream, CharSet e, sal_Bool b ) :
366     LotusConverterBase( rStream, 128 )
367 {
368     eSrcChar = e;
369     bWK3 = sal_False;
370     bWK123 = b;
371 }
372 
373 
374 typedef FUNC_TYPE ( FuncType1 ) ( sal_uInt8 );
375 typedef DefTokenId ( FuncType2 ) ( sal_uInt8 );
376 
377 
Convert(const ScTokenArray * & rpErg,sal_Int32 & rRest,const FORMULA_TYPE)378 ConvErr LotusToSc::Convert( const ScTokenArray*& rpErg, sal_Int32& rRest,
379     const FORMULA_TYPE /*eFT*/ )
380 {
381     sal_uInt8               nOc;
382     sal_uInt8               nAnz;
383     sal_uInt8               nRelBits;
384     sal_uInt16              nStrLen;
385     sal_uInt16              nRngIndex;
386     FUNC_TYPE           eType = FT_NOP;
387     TokenId             nMerk0;
388     DefTokenId          eOc;
389     const sal_Char*     pExtName = 0;
390     RangeNameBufferWK3& rRangeNameBufferWK3 = *pLotusRoot->pRngNmBffWK3;
391 
392     ScComplexRefData        aCRD;
393     aCRD.InitFlags();
394     ScSingleRefData&        rR = aCRD.Ref1;
395 
396     LR_ID               nId;
397     TokenId             nNewId;
398 
399     LotusRangeList&     rRangeList = *pLotusRoot->pRangeNames;
400 
401     FuncType1*          pIndexToType;
402     FuncType2*          pIndexToToken;
403 
404     if( bWK3 )
405     {   // for > WK3
406         pIndexToType = IndexToTypeWK123;
407         pIndexToToken = IndexToTokenWK123;
408     }
409     else if( bWK123 )
410     {
411         pIndexToType = IndexToTypeWK123;
412         pIndexToToken = IndexToTokenWK123;
413     }
414     else
415     {
416         pIndexToType = IndexToType;
417         pIndexToToken = IndexToToken;
418 
419         rR.SetTabRel( sal_True );
420         rR.nTab = aEingPos.Tab();
421         rR.nRelTab = 0;
422         rR.SetFlag3D( sal_False );
423     }
424 
425     aCRD.Ref2 = rR;
426 
427     nBytesLeft = rRest;
428 
429     while( eType )      // != FT_Return (==0)
430     {
431         Read( nOc );
432 
433         if( nBytesLeft < 0 )
434         {
435             rpErg = aPool[ aStack.Get() ];
436             return ConvErrCount;
437         }
438 
439         eType = ( pIndexToType )( nOc );
440         eOc = ( pIndexToToken)( nOc );
441         if( eOc == ocNoName )
442             pExtName = GetAddInName( nOc );
443 
444         switch( eType )
445         {
446             case FT_Return:
447                 if( bWK3 || bWK123 )
448                     nBytesLeft = 0; // wird ab WK3 nicht benutzt
449 
450                 rRest = nBytesLeft;
451                 break;
452             case FT_NotImpl:
453             case FT_FuncFix0:   DoFunc( eOc, 0, pExtName ); break;
454             case FT_FuncFix1:   DoFunc( eOc, 1, pExtName ); break;
455             case FT_FuncFix2:   DoFunc( eOc, 2, pExtName ); break;
456             case FT_FuncFix3:   DoFunc( eOc, 3, pExtName ); break;
457             case FT_FuncFix4:   DoFunc( eOc, 4, pExtName ); break;
458                 case FT_FuncVar:
459                 Read( nAnz );
460                 DoFunc( eOc, nAnz, pExtName );
461                 break;
462             case FT_Neg:
463                 aPool << ocOpen << ocNegSub << aStack << ocClose;
464                 aPool >> aStack;
465                 break;
466             case FT_Op:
467                 aStack >> nMerk0;
468                 aPool << aStack << eOc << nMerk0;
469                 aPool >> aStack;
470                 break;
471             case FT_ConstFloat:
472             {
473                 double  fDouble;
474                 Read( fDouble );
475                 aStack << aPool.Store( fDouble );
476             }
477                 break;
478             case FT_Variable:
479             {
480                 sal_uInt16  nCol, nRow;
481                 Read( nCol );
482                 Read( nRow );
483 
484                 LotusRelToScRel( nCol, nRow, rR );
485 
486                 if( bWK3 )
487                     nNewId = aPool.Store( rR );
488                 else
489                 {
490                     nId = rRangeList.GetIndex( rR.nCol, rR.nRow );
491 
492                     if( nId == ID_FAIL )
493                         // kein Range dazu
494                         nNewId = aPool.Store( rR );
495                     else
496                         nNewId = aPool.Store( ( sal_uInt16 ) nId );
497                 }
498 
499                 aStack << nNewId;
500             }
501                 break;
502             case FT_Range:
503             {
504                 sal_uInt16  nColS, nRowS, nColE, nRowE;
505                 Read( nColS );
506                 Read( nRowS );
507                 Read( nColE );
508                 Read( nRowE );
509 
510                 LotusRelToScRel( nColS, nRowS, rR );
511                 LotusRelToScRel( nColE, nRowE, aCRD.Ref2 );
512 
513                 if( bWK3 )
514                     nNewId = aPool.Store( aCRD );
515                 else
516                 {
517                     nId = rRangeList.GetIndex(
518                         rR.nCol, rR.nRow, aCRD.Ref2.nCol, aCRD.Ref2.nRow );
519 
520                     if( nId == ID_FAIL )
521                         // kein Range dazu
522                         nNewId = aPool.Store( aCRD );
523                     else
524                         nNewId = aPool.Store( ( sal_uInt16 ) nId );
525                 }
526 
527                 aStack << nNewId;
528             }
529                 break;
530             case FT_Braces:
531                 aPool << ocOpen << aStack << ocClose;
532                 aPool >> aStack;
533                 break;
534             case FT_ConstInt:
535             {
536                 sal_Int16   nVal;
537                 Read( nVal );
538                 aStack << aPool.Store( ( double ) nVal );
539             }
540                 break;
541             case FT_ConstString:
542             {
543                 String  aTmp( ScfTools::ReadCString( aIn, nBytesLeft, eSrcChar ) );
544 
545                 aStack << aPool.Store( aTmp );
546             }
547                 break;
548             case FT_NOP:
549                 break;
550             // ------------------------------------------ fuer > WK3 -
551             case FT_Cref:
552                 Read( nRelBits );
553                 ReadSRD( rR, nRelBits );
554                 aStack << aPool.Store( rR );
555                 break;
556             case FT_Rref:
557                 Read( nRelBits );
558                 ReadCRD( aCRD, nRelBits );
559                 aStack << aPool.Store( aCRD );
560                 break;
561             case FT_Nrref:
562             {
563                 String      aTmp( ScfTools::ReadCString( aIn, nBytesLeft, eSrcChar ) );
564                 if( rRangeNameBufferWK3.FindRel( aTmp, nRngIndex ) )
565                     aStack << aPool.Store( nRngIndex );
566                 else
567             {
568                     String  aText( RTL_CONSTASCII_USTRINGPARAM( "NRREF " ) );
569                     aText += aTmp;
570                     aStack << aPool.Store( aText );
571             }
572             }
573                 break;
574             case FT_Absnref:
575             {
576                 String      aTmp( ScfTools::ReadCString( aIn, nBytesLeft, eSrcChar ) );
577                 if( rRangeNameBufferWK3.FindAbs( aTmp, nRngIndex ) )
578                     aStack << aPool.Store( nRngIndex );
579                 else
580                 {
581                     String  aText( RTL_CONSTASCII_USTRINGPARAM( "ABSNREF " ) );
582                     aText += aTmp;
583                     aStack << aPool.Store( aText );
584                 }
585             }
586                 break;
587             case FT_Erref:
588                 Ignore( 4 );
589                 aPool << ocBad;
590                 aPool >> aStack;
591                 break;
592             case FT_Ecref:
593                 Ignore( 5 );
594                 aPool << ocBad;
595                 aPool >> aStack;
596                 break;
597             case FT_Econstant:
598                 Ignore( 10 );
599                 aPool << ocBad;
600                 aPool >> aStack;
601                 break;
602             case FT_Splfunc:
603             {
604                 Read( nAnz );
605                 Read( nStrLen );
606 
607                 if( nStrLen )
608                 {
609                     sal_Char*   p = new (::std::nothrow) sal_Char[ nStrLen + 1 ];
610                     if (p)
611                     {
612                         aIn.Read( p, nStrLen );
613                         p[ nStrLen ] = 0x00;
614 
615                         DoFunc( ocNoName, nAnz, p );
616 
617                         delete[] p;
618                     }
619                     else
620                         DoFunc( ocNoName, nAnz, NULL );
621                 }
622                 else
623                     DoFunc( ocNoName, nAnz, NULL );
624             }
625                 break;
626             case FT_Const10Float:
627                     if ( bWK123 )
628                     {
629                             double fValue;
630                             Read( fValue );
631                             aStack << aPool.Store( fValue );
632                     }
633                     else aStack << aPool.Store( ScfTools::ReadLongDouble( aIn ) );
634                     break;
635             case FT_Snum:
636                     if ( bWK123 )
637                 {
638                          sal_uInt32   nValue;
639 
640                          Read( nValue );
641                      double  fValue = Snum32ToDouble( nValue );
642                      aStack << aPool.Store( fValue );
643                 }
644                 else
645                 {
646                         sal_Int16 nVal;
647                         Read( nVal );
648                         aStack << aPool.Store( SnumToDouble( nVal ) );
649                 }
650                 break;
651                 default:
652                 DBG_ERROR( "*LotusToSc::Convert(): unbekannter enum!" );
653         }
654     }
655 
656     rpErg = aPool[ aStack.Get() ];
657 
658     DBG_ASSERT( nBytesLeft >= 0, "*LotusToSc::Convert(): zuviel verarbeitet!");
659     DBG_ASSERT( nBytesLeft <= 0, "*LotusToSc::Convert(): wat is mit'm Rest?" );
660 
661     if( rRest )
662         aIn.SeekRel( nBytesLeft );  // eventuellen Rest/Ueberlauf korrigieren
663 
664     rRest = 0;
665 
666     return ConvOK;
667 }
668 
669 
IndexToType(sal_uInt8 nIndex)670 FUNC_TYPE LotusToSc::IndexToType( sal_uInt8 nIndex )
671 {
672     static const FUNC_TYPE pType[ 256 ] =
673     {                       // Code Bezeichnung
674         FT_ConstFloat,      //    0 8-Byte-IEEE-Float
675         FT_Variable,        //    1 Variable
676         FT_Range,           //    2 Bereich
677         FT_Return,          //    3 return
678         FT_Braces,          //    4 Klammer
679         FT_ConstInt,        //    5 2-Byte-Integer
680         FT_ConstString,     //    6 ASCII-String
681         FT_NOP,             //    7 NOP
682         FT_Neg,             //    8 Negation
683         FT_Op,              //    9 Addition
684         FT_Op,              //   10 Subtraktion
685         FT_Op,              //   11 Multiplikation
686         FT_Op,              //   12 Division
687         FT_Op,              //   13 Potenzierung
688         FT_Op,              //   14 Gleichheit
689         FT_Op,              //   15 Ungleich
690         FT_Op,              //   16 Kleiner-gleich
691         FT_Op,              //   17 Groesser-gleich
692         FT_Op,              //   18 Kleiner
693         FT_Op,              //   19 Groesser
694         FT_Op,              //   20 And (logisch)
695         FT_Op,              //   21 Or (logisch)
696         FT_FuncFix1,        //   22 Not (logisch)
697         FT_NOP,             //   23 unaeres Plus
698         FT_NotImpl,         //   24
699         FT_NotImpl,         //   25
700         FT_NotImpl,         //   26
701         FT_NotImpl,         //   27
702         FT_NotImpl,         //   28
703         FT_NotImpl,         //   29
704         FT_NotImpl,         //   30
705         FT_FuncFix0,        //   31 Not applicable
706         FT_FuncFix0,        //   32 Error
707         FT_FuncFix1,        //   33 Betrag ABS()
708         FT_FuncFix1,        //   34 Ganzzahl INT()
709         FT_FuncFix1,        //   35 Quadratwurzel
710         FT_FuncFix1,        //   36 Zehnerlogarithmus
711         FT_FuncFix1,        //   37 Natuerlicher Logarithmus
712         FT_FuncFix0,        //   38 PI
713         FT_FuncFix1,        //   39 Sinus
714         FT_FuncFix1,        //   40 Cosinus
715         FT_FuncFix1,        //   41 Tangens
716         FT_FuncFix2,        //   42 Arcus-Tangens 2 (4.Quadrant)   <----- richtig? -
717         FT_FuncFix1,        //   43 Arcus-Tangens (2.Quadrant)
718         FT_FuncFix1,        //   44 Arcus-Sinus
719         FT_FuncFix1,        //   45 Arcus-Cosinus
720         FT_FuncFix1,        //   46 Exponentialfunktion
721         FT_FuncFix2,        //   47 Modulo
722         FT_FuncVar,         //   48 Auswahl
723         FT_FuncFix1,        //   49 Is not applicable?
724         FT_FuncFix1,        //   50 Is Error?
725         FT_FuncFix0,        //   51 FALSE
726         FT_FuncFix0,        //   52 TRUE
727         FT_FuncFix0,        //   53 Zufallszahl
728         FT_FuncFix3,        //   54 Datum
729         FT_FuncFix0,        //   55 Heute
730         FT_FuncFix3,        //   56 Payment
731         FT_FuncFix3,        //   57 Present Value
732         FT_FuncFix3,        //   58 Future Value
733         FT_FuncFix3,        //   59 If ... then ... else ...
734         FT_FuncFix1,        //   60 Tag des Monats
735         FT_FuncFix1,        //   61 Monat
736         FT_FuncFix1,        //   62 Jahr
737         FT_FuncFix2,        //   63 Runden
738         FT_FuncFix3,        //   64 Zeit
739         FT_FuncFix1,        //   65 Stunde
740         FT_FuncFix1,        //   66 Minute
741         FT_FuncFix1,        //   67 Sekunde
742         FT_FuncFix1,        //   68 Ist Zahl?
743         FT_FuncFix1,        //   69 Ist Text?
744         FT_FuncFix1,        //   70 Len()
745         FT_FuncFix1,        //   71 Val()
746         FT_FuncFix2,        //   72 String()
747         FT_FuncFix3,        //   73 Mid()
748         FT_FuncFix1,        //   74 Char()
749         FT_FuncFix1,        //   75 Ascii()
750         FT_FuncFix3,        //   76 Find()
751         FT_FuncFix1,        //   77 Datevalue
752         FT_FuncFix1,        //   78 Timevalue
753         FT_FuncFix1,        //   79 Cellpointer
754         FT_FuncVar,         //   80 Sum()
755         FT_FuncVar,         //   81 Avg()
756         FT_FuncVar,         //   82 Cnt()
757         FT_FuncVar,         //   83 Min()
758         FT_FuncVar,         //   84 Max()
759         FT_FuncFix3,        //   85 Vlookup()
760         FT_FuncFix2,        //   86 Npv()
761         FT_FuncVar,         //   87 Var()
762         FT_FuncVar,         //   88 Std()
763         FT_FuncFix2,        //   89 Irr()
764         FT_FuncFix3,        //   90 Hlookup()
765         FT_FuncFix3,        //   91 ?
766         FT_FuncFix3,        //   92 ?
767         FT_FuncFix3,        //   93 ?
768         FT_FuncFix3,        //   94 ?
769         FT_FuncFix3,        //   95 ?
770         FT_FuncFix3,        //   96 ?
771         FT_FuncFix3,        //   97 ?
772         FT_FuncFix3,        //   98 Index()                         <- richtig? -
773         FT_FuncFix1,        //   99 Cols()
774         FT_FuncFix1,        //  100 Rows()
775         FT_FuncFix2,        //  101 Repeat()
776         FT_FuncFix1,        //  102 Upper()
777         FT_FuncFix1,        //  103 Lower()
778         FT_FuncFix2,        //  104 Left()
779         FT_FuncFix2,        //  105 Right()
780         FT_FuncFix4,        //  106 Replace()
781         FT_FuncFix1,        //  107 Proper()
782         FT_FuncFix2,        //  108 Cell()
783         FT_FuncFix1,        //  109 Trim()
784         FT_FuncFix1,        //  110 Clean()
785         FT_FuncFix1,        //  111 F()
786         FT_FuncFix1,        //  112 Wert() (oder W()?)
787         FT_FuncFix2,        //  113 Exact()
788         FT_NotImpl,         //  114 Call()
789         FT_FuncFix1,        //  115 @@()
790         FT_FuncFix3,        //  116 Rate()
791         FT_FuncFix1,        //  117 Term()
792         FT_FuncFix1,        //  118 Cterm()
793         FT_FuncFix3,        //  119 Sln()
794         FT_FuncFix4,        //  120 Syd(), Soy()
795         FT_FuncFix4,        //  121 Ddb()
796         FT_NotImpl,         //  122
797         FT_NotImpl,         //  123
798         FT_NotImpl,         //  124
799         FT_NotImpl,         //  125
800         FT_NotImpl,         //  126
801         FT_NotImpl,         //  127
802         FT_NotImpl,         //  128
803         FT_NotImpl,         //  129
804         FT_NotImpl,         //  130
805         FT_NotImpl,         //  131
806         FT_NotImpl,         //  132
807         FT_NotImpl,         //  133
808         FT_NotImpl,         //  134
809         FT_NotImpl,         //  135
810         FT_NotImpl,         //  136
811         FT_NotImpl,         //  137
812         FT_NotImpl,         //  138
813         FT_NotImpl,         //  139
814         FT_NotImpl,         //  140
815         FT_NotImpl,         //  141
816         FT_NotImpl,         //  142
817         FT_NotImpl,         //  143
818         FT_NotImpl,         //  144
819         FT_NotImpl,         //  145
820         FT_NotImpl,         //  146
821         FT_NotImpl,         //  147
822         FT_NotImpl,         //  148
823         FT_NotImpl,         //  149
824         FT_NotImpl,         //  150
825         FT_NotImpl,         //  151
826         FT_NotImpl,         //  152
827         FT_NotImpl,         //  153
828         FT_NotImpl,         //  154
829         FT_NotImpl,         //  155
830         FT_FuncVar,         //  156 ?
831         FT_NotImpl,         //  157
832         FT_NotImpl,         //  158
833         FT_NotImpl,         //  159
834         FT_NotImpl,         //  160
835         FT_NotImpl,         //  161
836         FT_NotImpl,         //  162
837         FT_NotImpl,         //  163
838         FT_NotImpl,         //  164
839         FT_NotImpl,         //  165
840         FT_NotImpl,         //  166
841         FT_NotImpl,         //  167
842         FT_NotImpl,         //  168
843         FT_NotImpl,         //  169
844         FT_NotImpl,         //  170
845         FT_NotImpl,         //  171
846         FT_NotImpl,         //  172
847         FT_NotImpl,         //  173
848         FT_NotImpl,         //  174
849         FT_NotImpl,         //  175
850         FT_NotImpl,         //  176
851         FT_NotImpl,         //  177
852         FT_NotImpl,         //  178
853         FT_NotImpl,         //  179
854         FT_NotImpl,         //  180
855         FT_NotImpl,         //  181
856         FT_NotImpl,         //  182
857         FT_NotImpl,         //  183
858         FT_NotImpl,         //  184
859         FT_NotImpl,         //  185
860         FT_NotImpl,         //  186
861         FT_NotImpl,         //  187
862         FT_NotImpl,         //  188
863         FT_NotImpl,         //  189
864         FT_NotImpl,         //  190
865         FT_NotImpl,         //  191
866         FT_NotImpl,         //  192
867         FT_NotImpl,         //  193
868         FT_NotImpl,         //  194
869         FT_NotImpl,         //  195
870         FT_NotImpl,         //  196
871         FT_NotImpl,         //  197
872         FT_NotImpl,         //  198
873         FT_NotImpl,         //  199
874         FT_NotImpl,         //  200
875         FT_NotImpl,         //  201
876         FT_NotImpl,         //  202
877         FT_NotImpl,         //  203
878         FT_NotImpl,         //  204
879         FT_NotImpl,         //  205
880         FT_FuncVar,         //  206 ?
881         FT_NotImpl,         //  207
882         FT_NotImpl,         //  208
883         FT_NotImpl,         //  209
884         FT_NotImpl,         //  210
885         FT_NotImpl,         //  211
886         FT_NotImpl,         //  212
887         FT_NotImpl,         //  213
888         FT_NotImpl,         //  214
889         FT_NotImpl,         //  215
890         FT_NotImpl,         //  216
891         FT_NotImpl,         //  217
892         FT_NotImpl,         //  218
893         FT_NotImpl,         //  219
894         FT_NotImpl,         //  220
895         FT_NotImpl,         //  221
896         FT_NotImpl,         //  222
897         FT_NotImpl,         //  223
898         FT_NotImpl,         //  224
899         FT_NotImpl,         //  225
900         FT_NotImpl,         //  226
901         FT_NotImpl,         //  227
902         FT_NotImpl,         //  228
903         FT_NotImpl,         //  229
904         FT_NotImpl,         //  230
905         FT_NotImpl,         //  231
906         FT_NotImpl,         //  232
907         FT_NotImpl,         //  233
908         FT_NotImpl,         //  234
909         FT_NotImpl,         //  235
910         FT_NotImpl,         //  236
911         FT_NotImpl,         //  237
912         FT_NotImpl,         //  238
913         FT_NotImpl,         //  239
914         FT_NotImpl,         //  240
915         FT_NotImpl,         //  241
916         FT_NotImpl,         //  242
917         FT_NotImpl,         //  243
918         FT_NotImpl,         //  244
919         FT_NotImpl,         //  245
920         FT_NotImpl,         //  246
921         FT_NotImpl,         //  247
922         FT_NotImpl,         //  248
923         FT_NotImpl,         //  249
924         FT_NotImpl,         //  250
925         FT_NotImpl,         //  251
926         FT_NotImpl,         //  252
927         FT_NotImpl,         //  253
928         FT_NotImpl,         //  254
929         FT_FuncVar,         //  255 ?
930     };
931     return pType[ nIndex ];
932 }
933 
934 
IndexToToken(sal_uInt8 nIndex)935 DefTokenId LotusToSc::IndexToToken( sal_uInt8 nIndex )
936 {
937     static const DefTokenId pToken[ 256 ] =
938     {                       // Code Bezeichnung
939         ocPush,             //    0 8-Byte-IEEE-Float
940         ocPush,             //    1 Variable
941         ocPush,             //    2 Bereich
942         ocPush,             //    3 return
943         ocPush,             //    4 Klammer
944         ocPush,             //    5 2-Byte-Integer
945         ocPush,             //    6 ASCII-String
946         ocPush,             //    7 NOP
947         ocNegSub,           //    8 Negation
948         ocAdd,              //    9 Addition
949         ocSub,              //   10 Subtraktion
950         ocMul,              //   11 Multiplikation
951         ocDiv,              //   12 Division
952         ocPow,              //   13 Potenzierung
953         ocEqual,            //   14 Gleichheit
954         ocNotEqual,         //   15 Ungleich
955         ocLessEqual,        //   16 Kleiner-gleich
956         ocGreaterEqual,     //   17 Groesser-gleich
957         ocLess,             //   18 Kleiner
958         ocGreater,          //   19 Groesser
959         ocAnd,              //   20 And (logisch)
960         ocOr,               //   21 Or (logisch)
961         ocNot,              //   22 Not (logisch)
962         ocPush,             //   23 unaeres Plus
963         ocNoName,           //   24
964         ocNoName,           //   25
965         ocNoName,           //   26
966         ocNoName,           //   27
967         ocNoName,           //   28
968         ocNoName,           //   29
969         ocNoName,           //   30
970         ocNotAvail,         //   31 Not available
971         ocNoName,           //   32 Error
972         ocAbs,              //   33 Betrag ABS()
973         ocInt,              //   34 Ganzzahl INT()
974         ocSqrt,             //   35 Quadratwurzel
975         ocLog10,            //   36 Zehnerlogarithmus
976         ocLn,               //   37 Natuerlicher Logarithmus
977         ocPi,               //   38 PI
978         ocSin,              //   39 Sinus
979         ocCos,              //   40 Cosinus
980         ocTan,              //   41 Tangens
981         ocArcTan2,          //   42 Arcus-Tangens 2 (4.Quadrant)
982         ocArcTan,           //   43 Arcus-Tangens (2.Quadrant)
983         ocArcSin,           //   44 Arcus-Sinus
984         ocArcCos,           //   45 Arcus-Cosinus
985         ocExp,              //   46 Exponentialfunktion
986         ocMod,              //   47 Modulo
987         ocChose,            //   48 Auswahl
988         ocIsNA,             //   49 Is not available?
989         ocIsError,          //   50 Is Error?
990         ocFalse,            //   51 FALSE
991         ocTrue,             //   52 TRUE
992         ocRandom,           //   53 Zufallszahl
993         ocGetDate,          //   54 Datum
994         ocGetActDate,       //   55 Heute
995         ocRMZ,              //   56 Payment
996         ocBW,               //   57 Present Value
997         ocZW,               //   58 Future Value
998         ocIf,               //   59 If ... then ... else ...
999         ocGetDay,           //   60 Tag des Monats
1000         ocGetMonth,         //   61 Monat
1001         ocGetYear,          //   62 Jahr
1002         ocRound,            //   63 Runden
1003         ocGetTime,          //   64 Zeit
1004         ocGetHour,          //   65 Stunde
1005         ocGetMin,           //   66 Minute
1006         ocGetSec,           //   67 Sekunde
1007         ocIsValue,          //   68 Ist Zahl?
1008         ocIsString,         //   69 Ist Text?
1009         ocLen,              //   70 Len()
1010         ocValue,            //   71 Val()
1011         ocFixed,            //   72 String()    ocFixed ersatzweise + Spezialfall
1012         ocMid,              //   73 Mid()
1013         ocChar,             //   74 Char()
1014         ocCode,             //   75 Ascii()
1015         ocFind,             //   76 Find()
1016         ocGetDateValue,     //   77 Datevalue
1017         ocGetTimeValue,     //   78 Timevalue
1018         ocNoName,           //   79 Cellpointer
1019         ocSum,              //   80 Sum()
1020         ocAverage,          //   81 Avg()
1021         ocCount,            //   82 Cnt()
1022         ocMin,              //   83 Min()
1023         ocMax,              //   84 Max()
1024         ocVLookup,          //   85 Vlookup()
1025         ocNPV,              //   86 Npv()
1026         ocVar,              //   87 Var()
1027         ocNormDist,         //   88 Std()
1028         ocIRR,              //   89 Irr()
1029         ocHLookup,          //   90 Hlookup()
1030         ocDBSum,            //   91 XlfDsum
1031         ocDBAverage,        //   92 XlfDaverage
1032         ocDBCount,          //   93 XlfDcount
1033         ocDBMin,            //   94 XlfDmin
1034         ocDBMax,            //   95 XlfDmax
1035         ocDBVar,            //   96 XlfDvar
1036         ocDBStdDev,         //   97 XlfDstdev
1037         ocIndex,            //   98 Index()
1038         ocColumns,          //   99 Cols()
1039         ocRows,             //  100 Rows()
1040         ocRept,             //  101 Repeat()
1041         ocUpper,            //  102 Upper()
1042         ocLower,            //  103 Lower()
1043         ocLeft,             //  104 Left()
1044         ocRight,            //  105 Right()
1045         ocReplace,          //  106 Replace()
1046         ocPropper,          //  107 Proper()
1047         ocNoName,           //  108 Cell()
1048         ocTrim,             //  109 Trim()
1049         ocClean,            //  110 Clean()
1050         ocFalse,            //  111 F()
1051         ocTrue,             //  112 W()
1052         ocExact,            //  113 Exact()
1053         ocNoName,           //  114 Call()
1054         ocIndirect,         //  115 @@()
1055         ocZins,             //  116 Rate()
1056         ocNoName,           //  117 Term()
1057         ocNoName,           //  118 Cterm()
1058         ocLIA,              //  119 Sln()
1059         ocDIA,              //  120 Syd(), Soy()
1060         ocGDA,              //  121 Ddb()
1061         ocNoName,           //  122
1062         ocNoName,           //  123
1063         ocNoName,           //  124
1064         ocNoName,           //  125
1065         ocNoName,           //  126
1066         ocNoName,           //  127
1067         ocNoName,           //  128
1068         ocNoName,           //  129
1069         ocNoName,           //  130
1070         ocNoName,           //  131
1071         ocNoName,           //  132
1072         ocNoName,           //  133
1073         ocNoName,           //  134
1074         ocNoName,           //  135
1075         ocNoName,           //  136
1076         ocNoName,           //  137
1077         ocNoName,           //  138
1078         ocNoName,           //  139
1079         ocNoName,           //  140
1080         ocNoName,           //  141
1081         ocNoName,           //  142
1082         ocNoName,           //  143
1083         ocNoName,           //  144
1084         ocNoName,           //  145
1085         ocNoName,           //  146
1086         ocNoName,           //  147
1087         ocNoName,           //  148
1088         ocNoName,           //  149
1089         ocNoName,           //  150
1090         ocNoName,           //  151
1091         ocNoName,           //  152
1092         ocNoName,           //  153
1093         ocNoName,           //  154
1094         ocNoName,           //  155
1095         ocNoName,           //  156 ?
1096         ocNoName,           //  157
1097         ocNoName,           //  158
1098         ocNoName,           //  159
1099         ocNoName,           //  160
1100         ocNoName,           //  161
1101         ocNoName,           //  162
1102         ocNoName,           //  163
1103         ocNoName,           //  164
1104         ocNoName,           //  165
1105         ocNoName,           //  166
1106         ocNoName,           //  167
1107         ocNoName,           //  168
1108         ocNoName,           //  169
1109         ocNoName,           //  170
1110         ocNoName,           //  171
1111         ocNoName,           //  172
1112         ocNoName,           //  173
1113         ocNoName,           //  174
1114         ocNoName,           //  175
1115         ocNoName,           //  176
1116         ocNoName,           //  177
1117         ocNoName,           //  178
1118         ocNoName,           //  179
1119         ocNoName,           //  180
1120         ocNoName,           //  181
1121         ocNoName,           //  182
1122         ocNoName,           //  183
1123         ocNoName,           //  184
1124         ocNoName,           //  185
1125         ocNoName,           //  186
1126         ocNoName,           //  187
1127         ocNoName,           //  188
1128         ocNoName,           //  189
1129         ocNoName,           //  190
1130         ocNoName,           //  191
1131         ocNoName,           //  192
1132         ocNoName,           //  193
1133         ocNoName,           //  194
1134         ocNoName,           //  195
1135         ocNoName,           //  196
1136         ocNoName,           //  197
1137         ocNoName,           //  198
1138         ocNoName,           //  199
1139         ocNoName,           //  200
1140         ocNoName,           //  201
1141         ocNoName,           //  202
1142         ocNoName,           //  203
1143         ocNoName,           //  204
1144         ocNoName,           //  205
1145         ocNoName,           //  206 ?
1146         ocNoName,           //  207
1147         ocNoName,           //  208
1148         ocNoName,           //  209
1149         ocNoName,           //  210
1150         ocNoName,           //  211
1151         ocNoName,           //  212
1152         ocNoName,           //  213
1153         ocNoName,           //  214
1154         ocNoName,           //  215
1155         ocNoName,           //  216
1156         ocNoName,           //  217
1157         ocNoName,           //  218
1158         ocNoName,           //  219
1159         ocNoName,           //  220
1160         ocNoName,           //  221
1161         ocNoName,           //  222
1162         ocNoName,           //  223
1163         ocNoName,           //  224
1164         ocNoName,           //  225
1165         ocNoName,           //  226
1166         ocNoName,           //  227
1167         ocNoName,           //  228
1168         ocNoName,           //  229
1169         ocNoName,           //  230
1170         ocNoName,           //  231
1171         ocNoName,           //  232
1172         ocNoName,           //  233
1173         ocNoName,           //  234
1174         ocNoName,           //  235
1175         ocNoName,           //  236
1176         ocNoName,           //  237
1177         ocNoName,           //  238
1178         ocNoName,           //  239
1179         ocNoName,           //  240
1180         ocNoName,           //  241
1181         ocNoName,           //  242
1182         ocNoName,           //  243
1183         ocNoName,           //  244
1184         ocNoName,           //  245
1185         ocNoName,           //  246
1186         ocNoName,           //  247
1187         ocNoName,           //  248
1188         ocNoName,           //  249
1189         ocNoName,           //  250
1190         ocNoName,           //  251
1191         ocNoName,           //  252
1192         ocNoName,           //  253
1193         ocNoName,           //  254
1194         ocNoName            //  255 ?
1195     };
1196 
1197     return pToken[ nIndex ];
1198 }
1199 
1200 
IndexToTypeWK123(sal_uInt8 nIndex)1201 FUNC_TYPE LotusToSc::IndexToTypeWK123( sal_uInt8 nIndex )
1202 {
1203     static const FUNC_TYPE pType[ 256 ] =
1204     {                       // Code Bezeichnung
1205         FT_Const10Float,    //    0 8-Byte-IEEE-Long-Number
1206         FT_Cref,            //    1 Cell Reference
1207         FT_Rref,            //    2 Area Reference
1208         FT_Return,          //    3 return
1209         FT_Braces,          //    4 Klammer
1210         FT_Snum,            //    5 Short-Number
1211         FT_ConstString,     //    6 ASCII-String
1212         FT_Nrref,           //    7 Named range reference
1213         FT_Absnref,         //    8 Absolut named range
1214         FT_Erref,           //    9 Err range reference
1215         FT_Ecref,           //   10 Err cell reference
1216         FT_Econstant,       //   11 Err constant
1217         FT_NotImpl,         //   12
1218         FT_NotImpl,         //   13
1219         FT_Neg,             //   14 Negation
1220         FT_Op,              //   15 Addition
1221         FT_Op,              //   16 Subtraktion
1222         FT_Op,              //   17 Multiplikation
1223         FT_Op,              //   18 Division
1224         FT_Op,              //   19 Potenzierung
1225         FT_Op,              //   20 Gleichheit
1226         FT_Op,              //   21 Ungleich
1227         FT_Op,              //   22 Kleiner-gleich
1228         FT_Op,              //   23 Groesser-gleich
1229         FT_Op,              //   24 Kleiner
1230         FT_Op,              //   25 Groesser
1231         FT_Op,              //   26 And (logisch)
1232         FT_Op,              //   27 Or (logisch)
1233         FT_FuncFix1,        //   28 Not (logisch)
1234         FT_NOP,             //   29 unaeres Plus
1235         FT_Op,              //   30 Concatenation
1236         FT_FuncFix0,        //   31 Not applicable
1237         FT_FuncFix0,        //   32 Error
1238         FT_FuncFix1,        //   33 Betrag ABS()
1239         FT_FuncFix1,        //   34 Ganzzahl INT()
1240         FT_FuncFix1,        //   35 Quadratwurzel
1241         FT_FuncFix1,        //   36 Zehnerlogarithmus
1242         FT_FuncFix1,        //   37 Natuerlicher Logarithmus
1243         FT_FuncFix0,        //   38 PI
1244         FT_FuncFix1,        //   39 Sinus
1245         FT_FuncFix1,        //   40 Cosinus
1246         FT_FuncFix1,        //   41 Tangens
1247         FT_FuncFix2,        //   42 Arcus-Tangens 2 (4.Quadrant)
1248         FT_FuncFix1,        //   43 Arcus-Tangens (2.Quadrant)
1249         FT_FuncFix1,        //   44 Arcus-Sinus
1250         FT_FuncFix1,        //   45 Arcus-Cosinus
1251         FT_FuncFix1,        //   46 Exponentialfunktion
1252         FT_FuncFix2,        //   47 Modulo
1253         FT_FuncVar,         //   48 Auswahl
1254         FT_FuncFix1,        //   49 Is not applicable?
1255         FT_FuncFix1,        //   50 Is Error?
1256         FT_FuncFix0,        //   51 FALSE
1257         FT_FuncFix0,        //   52 TRUE
1258         FT_FuncFix0,        //   53 Zufallszahl
1259         FT_FuncFix3,        //   54 Datum
1260         FT_FuncFix0,        //   55 Heute
1261         FT_FuncFix3,        //   56 Payment
1262         FT_FuncFix3,        //   57 Present Value
1263         FT_FuncFix3,        //   58 Future Value
1264         FT_FuncFix3,        //   59 If ... then ... else ...
1265         FT_FuncFix1,        //   60 Tag des Monats
1266         FT_FuncFix1,        //   61 Monat
1267         FT_FuncFix1,        //   62 Jahr
1268         FT_FuncFix2,        //   63 Runden
1269         FT_FuncFix3,        //   64 Zeit
1270         FT_FuncFix1,        //   65 Stunde
1271         FT_FuncFix1,        //   66 Minute
1272         FT_FuncFix1,        //   67 Sekunde
1273         FT_FuncFix1,        //   68 Ist Zahl?
1274         FT_FuncFix1,        //   69 Ist Text?
1275         FT_FuncFix1,        //   70 Len()
1276         FT_FuncFix1,        //   71 Val()
1277         FT_FuncFix2,        //   72 String()
1278         FT_FuncFix3,        //   73 Mid()
1279         FT_FuncFix1,        //   74 Char()
1280         FT_FuncFix1,        //   75 Ascii()
1281         FT_FuncFix3,        //   76 Find()
1282         FT_FuncFix1,        //   77 Datevalue
1283         FT_FuncFix1,        //   78 Timevalue
1284         FT_FuncFix1,        //   79 Cellpointer
1285         FT_FuncVar,         //   80 Sum()
1286         FT_FuncVar,         //   81 Avg()
1287         FT_FuncVar,         //   82 Cnt()
1288         FT_FuncVar,         //   83 Min()
1289         FT_FuncVar,         //   84 Max()
1290         FT_FuncFix3,        //   85 Vlookup()
1291         FT_FuncFix2,        //   86 Npv()
1292         FT_FuncVar,         //   87 Var()
1293         FT_FuncVar,         //   88 Std()
1294         FT_FuncFix2,        //   89 Irr()
1295         FT_FuncFix3,        //   90 Hlookup()
1296         FT_FuncVar,         //   91 Dsum                 <-------- neu! -
1297         FT_FuncVar,         //   92 Davg                 <-------- neu! -
1298         FT_FuncVar,         //   93 Dcnt                 <-------- neu! -
1299         FT_FuncVar,         //   94 Dmin                 <-------- neu! -
1300         FT_FuncVar,         //   95 Dmax                 <-------- neu! -
1301         FT_FuncVar,         //   96 Dvar                 <-------- neu! -
1302         FT_FuncVar,         //   97 Dstd                 <-------- neu! -
1303         FT_FuncVar,         //   98 Index()              <-------- change! -
1304         FT_FuncFix1,        //   99 Cols()               <-------- neu! -
1305         FT_FuncFix1,        //  100 Rows()               <-------- neu! -
1306         FT_FuncFix2,        //  101 Repeat()             <-------- neu! -
1307         FT_FuncFix1,        //  102 Upper()              <-------- neu! -
1308         FT_FuncFix1,        //  103 Lower()              <-------- neu! -
1309         FT_FuncFix2,        //  104 Left()               <-------- neu! -
1310         FT_FuncFix2,        //  105 Right()              <-------- neu! -
1311         FT_FuncFix4,        //  106 Replace()            <-------- neu! -
1312         FT_FuncFix1,        //  107 Proper()             <-------- neu! -
1313         FT_FuncFix2,        //  108 Cell()               <-------- neu! -
1314         FT_FuncFix1,        //  109 Trim()               <-------- neu! -
1315         FT_FuncFix1,        //  110 Clean()              <-------- neu! -
1316         FT_FuncFix1,        //  111 S()                  <--------- change in Bez. -
1317         FT_FuncFix1,        //  112 N()                  <--------- change in Bez. -
1318         FT_FuncFix2,        //  113 Exact()              <-------- neu! -
1319         FT_NotImpl,         //  114 App                  <--------- change in Bez. -
1320         FT_FuncFix1,        //  115 @@()                 <-------- neu! -
1321         FT_FuncFix3,        //  116 Rate()               <-------- neu! -
1322         FT_FuncFix3,        //  117 Term()               <--------- change in Anz.
1323         FT_FuncFix3,        //  118 Cterm()              <--------- change in Anz.
1324         FT_FuncFix3,        //  119 Sln()                <-------- neu! -
1325         FT_FuncFix4,        //  120 Syd()                <-------- neu! -
1326         FT_FuncFix4,        //  121 Ddb()                <-------- neu! -
1327         FT_Splfunc,         //  122 Splfunc              <-------- neu! -
1328         FT_FuncFix1,        //  123 Sheets               <-------- neu! -
1329         FT_FuncFix1,        //  124 Info                 <-------- neu! -
1330         FT_FuncVar,         //  125 Sumproduct           <-------- neu! -
1331         FT_FuncFix1,        //  126 Isrange              <-------- neu! -
1332         FT_FuncVar,         //  127 Dget                 <-------- neu! -
1333         FT_FuncVar,         //  128 Dquery               <-------- neu! -
1334         FT_FuncFix4,        //  129 Coord                <-------- neu! -
1335         FT_NOP,             //  130 Reserved (internal)  <-------- neu! -
1336         FT_FuncFix0,        //  131 Today                <-------- neu! -
1337         FT_FuncVar,         //  132 Vdb                  <-------- neu! -
1338         FT_FuncVar,         //  133 Dvars                <-------- neu! -
1339         FT_FuncVar,         //  134 Dstds                <-------- neu! -
1340         FT_FuncVar,         //  135 Vars                 <-------- neu! -
1341         FT_FuncVar,         //  136 Stds                 <-------- neu! -
1342         FT_FuncFix2,        //  137 D360                 <-------- neu! -
1343         FT_NOP,             //  138 Reserved (internal)  <-------- neu! -
1344         FT_FuncFix0,        //  139 Isapp                <-------- neu! - Anzahl ? -
1345         FT_FuncVar,         //  140 Isaaf                <-------- neu! - Anzahl ? -
1346         FT_FuncFix1,        //  141 Weekday              <-------- neu! -
1347         FT_FuncFix3,        //  142 Datedif              <-------- neu! -
1348         FT_FuncVar,         //  143 Rank                 <-------- neu! -
1349         FT_FuncFix2,        //  144 Numberstring         <-------- neu! -
1350         FT_FuncFix1,        //  145 Datestring           <-------- neu! -
1351         FT_FuncFix1,        //  146 Decimal              <-------- neu! -
1352         FT_FuncFix1,        //  147 Hex                  <-------- neu! -
1353         FT_FuncFix4,        //  148 Db                   <-------- neu! -
1354         FT_FuncFix4,        //  149 Pmti                 <-------- neu! -
1355         FT_FuncFix4,        //  150 Spi                  <-------- neu! -
1356         FT_FuncFix1,        //  151 Fullp                <-------- neu! -
1357         FT_FuncFix1,        //  152 Halfp                <-------- neu! -
1358         FT_FuncVar,         //  153 Pureavg              <-------- neu! -
1359         FT_FuncVar,         //  154 Purecount            <-------- neu! -
1360         FT_FuncVar,         //  155 Puremax              <-------- neu! -
1361         FT_FuncVar,         //  156 Puremin              <-------- neu! -
1362         FT_FuncVar,         //  157 Purestd              <-------- neu! -
1363         FT_FuncVar,         //  158 Purevar              <-------- neu! -
1364         FT_FuncVar,         //  159 Purestds             <-------- neu! -
1365         FT_FuncVar,         //  160 Purevars             <-------- neu! -
1366         FT_FuncFix3,        //  161 Pmt2                 <-------- neu! -
1367         FT_FuncFix3,        //  162 Pv2                  <-------- neu! -
1368         FT_FuncFix3,        //  163 Fv2                  <-------- neu! -
1369         FT_FuncFix3,        //  164 Term2                <-------- neu! -
1370         FT_NotImpl,         //  165 ---                  <-------- neu! - Anzahl ? -
1371         FT_FuncFix2,        //  166 D360 (US-Version)
1372         FT_NotImpl,         //  167
1373         FT_NotImpl,         //  168
1374         FT_NotImpl,         //  169
1375         FT_NotImpl,         //  170
1376         FT_NotImpl,         //  171
1377         FT_NotImpl,         //  172
1378         FT_NotImpl,         //  173
1379         FT_NotImpl,         //  174
1380         FT_NotImpl,         //  175
1381         FT_NotImpl,         //  176
1382         FT_NotImpl,         //  177
1383         FT_NotImpl,         //  178
1384         FT_NotImpl,         //  179
1385         FT_NotImpl,         //  180
1386         FT_NotImpl,         //  181
1387         FT_NotImpl,         //  182
1388         FT_NotImpl,         //  183
1389         FT_NotImpl,         //  184
1390         FT_NotImpl,         //  185
1391         FT_FuncVar,         //  186 Solver               <-------- neu! -
1392         FT_NotImpl,         //  187
1393         FT_NotImpl,         //  188
1394         FT_NotImpl,         //  189
1395         FT_NotImpl,         //  190
1396         FT_NotImpl,         //  191
1397         FT_NotImpl,         //  192
1398         FT_NotImpl,         //  193
1399         FT_NotImpl,         //  194
1400         FT_NotImpl,         //  195
1401         FT_NotImpl,         //  196
1402         FT_NotImpl,         //  197
1403         FT_NotImpl,         //  198
1404         FT_NotImpl,         //  199
1405         FT_NotImpl,         //  200
1406         FT_NotImpl,         //  201
1407         FT_NotImpl,         //  202
1408         FT_NotImpl,         //  203
1409         FT_NotImpl,         //  204
1410         FT_NotImpl,         //  205
1411         FT_NotImpl,         //  206
1412         FT_NotImpl,         //  207
1413         FT_NotImpl,         //  208
1414         FT_NotImpl,         //  209
1415         FT_NotImpl,         //  210
1416         FT_NotImpl,         //  211
1417         FT_NotImpl,         //  212
1418         FT_NotImpl,         //  213
1419         FT_NotImpl,         //  214
1420         FT_NotImpl,         //  215
1421         FT_NotImpl,         //  216
1422         FT_NotImpl,         //  217
1423         FT_NotImpl,         //  218
1424         FT_NotImpl,         //  219
1425         FT_NotImpl,         //  220
1426         FT_NotImpl,         //  221
1427         FT_NotImpl,         //  222
1428         FT_NotImpl,         //  223
1429         FT_NotImpl,         //  224
1430         FT_NotImpl,         //  225
1431         FT_NotImpl,         //  226
1432         FT_NotImpl,         //  227
1433         FT_NotImpl,         //  228
1434         FT_NotImpl,         //  229
1435         FT_NotImpl,         //  230
1436         FT_NotImpl,         //  231
1437         FT_NotImpl,         //  232
1438         FT_NotImpl,         //  233
1439         FT_NotImpl,         //  234
1440         FT_NotImpl,         //  235
1441         FT_NotImpl,         //  236
1442         FT_NotImpl,         //  237
1443         FT_NotImpl,         //  238
1444         FT_NotImpl,         //  239
1445         FT_NotImpl,         //  240
1446         FT_NotImpl,         //  241
1447         FT_NotImpl,         //  242
1448         FT_NotImpl,         //  243
1449         FT_NotImpl,         //  244
1450         FT_NotImpl,         //  245
1451         FT_NotImpl,         //  246
1452         FT_NotImpl,         //  247
1453         FT_NotImpl,         //  248
1454         FT_NotImpl,         //  249
1455         FT_NotImpl,         //  250
1456         FT_NotImpl,         //  251
1457         FT_NotImpl,         //  252
1458         FT_NotImpl,         //  253
1459         FT_NotImpl,         //  254
1460         FT_NotImpl,         //  255
1461     };
1462     return pType[ nIndex ];
1463 }
1464 
1465 
IndexToTokenWK123(sal_uInt8 nIndex)1466 DefTokenId LotusToSc::IndexToTokenWK123( sal_uInt8 nIndex )
1467 {
1468     static const DefTokenId pToken[ 256 ] =
1469     {                       // Code Bezeichnung
1470         ocPush,             //    0 8-Byte-IEEE-Long-Numbers
1471         ocPush,             //    1 Variable
1472         ocPush,             //    2 Bereich
1473         ocPush,             //    3 return
1474         ocPush,             //    4 Klammer
1475         ocPush,             //    5 Numbers
1476         ocPush,             //    6 ASCII-String
1477         ocPush,             //    7 Named range reference
1478         ocPush,             //    8 Absolut named range
1479         ocPush,             //    9 Err range reference
1480         ocPush,             //   10 Err cell reference
1481         ocPush,             //   11 Err constant
1482         ocPush,             //   12
1483         ocPush,             //   13
1484         ocNegSub,           //   14 Negation
1485         ocAdd,              //   15 Addition
1486         ocSub,              //   16 Subtraktion
1487         ocMul,              //   17 Multiplikation
1488         ocDiv,              //   18 Division
1489         ocPow,              //   19 Potenzierung
1490         ocEqual,            //   20 Gleichheit
1491         ocNotEqual,         //   21 Ungleich
1492         ocLessEqual,        //   22 Kleiner-gleich
1493         ocGreaterEqual,     //   23 Groesser-gleich
1494         ocLess,             //   24 Kleiner
1495         ocGreater,          //   25 Groesser
1496         ocAnd,              //   26 And (logisch)
1497         ocOr,               //   27 Or (logisch)
1498         ocNot,              //   28 Not (logisch)
1499         ocPush,             //   29 unaeres Plus
1500         ocAmpersand,        //   30 Concatenation
1501         ocNotAvail,         //   31 Not available
1502         ocNoName,           //   32 Error
1503         ocAbs,              //   33 Betrag ABS()
1504         ocInt,              //   34 Ganzzahl INT()
1505         ocSqrt,             //   35 Quadratwurzel
1506         ocLog10,            //   36 Zehnerlogarithmus
1507         ocLn,               //   37 Natuerlicher Logarithmus
1508         ocPi,               //   38 PI
1509         ocSin,              //   39 Sinus
1510         ocCos,              //   40 Cosinus
1511         ocTan,              //   41 Tangens
1512         ocArcTan2,          //   42 Arcus-Tangens 2 (4.Quadrant)
1513         ocArcTan,           //   43 Arcus-Tangens (2.Quadrant)
1514         ocArcSin,           //   44 Arcus-Sinus
1515         ocArcCos,           //   45 Arcus-Cosinus
1516         ocExp,              //   46 Exponentialfunktion
1517         ocMod,              //   47 Modulo
1518         ocChose,            //   48 Auswahl
1519         ocIsNA,             //   49 Is not available?
1520         ocIsError,          //   50 Is Error?
1521         ocFalse,            //   51 FALSE
1522         ocTrue,             //   52 TRUE
1523         ocRandom,           //   53 Zufallszahl
1524         ocGetDate,          //   54 Datum
1525         ocGetActDate,       //   55 Heute
1526         ocRMZ,              //   56 Payment
1527         ocBW,               //   57 Present Value
1528         ocZW,               //   58 Future Value
1529         ocIf,               //   59 If ... then ... else ...
1530         ocGetDay,           //   60 Tag des Monats
1531         ocGetMonth,         //   61 Monat
1532         ocGetYear,          //   62 Jahr
1533         ocRound,            //   63 Runden
1534         ocGetTime,          //   64 Zeit
1535         ocGetHour,          //   65 Stunde
1536         ocGetMin,           //   66 Minute
1537         ocGetSec,           //   67 Sekunde
1538         ocIsValue,          //   68 Ist Zahl?
1539         ocIsString,         //   69 Ist Text?
1540         ocLen,              //   70 Len()
1541         ocValue,            //   71 Val()
1542         ocFixed,            //   72 String()    ocFixed ersatzweise + Spezialfall
1543         ocMid,              //   73 Mid()
1544         ocChar,             //   74 Char()
1545         ocCode,             //   75 Ascii()
1546         ocFind,             //   76 Find()
1547         ocGetDateValue,     //   77 Datevalue
1548         ocGetTimeValue,     //   78 Timevalue
1549         ocNoName,           //   79 Cellpointer
1550         ocSum,              //   80 Sum()
1551         ocAverage,          //   81 Avg()
1552         ocCount,            //   82 Cnt()
1553         ocMin,              //   83 Min()
1554         ocMax,              //   84 Max()
1555         ocVLookup,          //   85 Vlookup()
1556         ocNPV,              //   86 Npv()
1557         ocVar,              //   87 Var()
1558         ocStDev,            //   88 Std()
1559         ocIRR,              //   89 Irr()
1560         ocHLookup,          //   90 Hlookup()
1561         ocDBSum,            //   91 XlfDsum
1562         ocDBAverage,        //   92 XlfDaverage
1563         ocDBCount,          //   93 XlfDcount
1564         ocDBMin,            //   94 XlfDmin
1565         ocDBMax,            //   95 XlfDmax
1566         ocDBVar,            //   96 XlfDvar
1567         ocDBStdDev,         //   97 XlfDstdev
1568         ocIndex,            //   98 Index()
1569         ocColumns,          //   99 Cols()
1570         ocRows,             //  100 Rows()
1571         ocRept,             //  101 Repeat()
1572         ocUpper,            //  102 Upper()
1573         ocLower,            //  103 Lower()
1574         ocLeft,             //  104 Left()
1575         ocRight,            //  105 Right()
1576         ocReplace,          //  106 Replace()
1577         ocPropper,          //  107 Proper()
1578         ocNoName,           //  108 Cell()
1579         ocTrim,             //  109 Trim()
1580         ocClean,            //  110 Clean()
1581         ocNoName,           //  111 F()     (Excel: T()?)
1582         ocNoName,           //  112 W()
1583         ocExact,            //  113 Exact()
1584         ocNoName,           //  114 Call()
1585         ocIndirect,         //  115 @@()
1586         ocZins,             //  116 Rate()
1587         ocNoName,           //  117 Term()
1588         ocNoName,           //  118 Cterm()
1589         ocLIA,              //  119 Sln()
1590         ocDIA,              //  120 Syd(), Soy()
1591         ocGDA,              //  121 Ddb()
1592         ocNoName,           //  122 Splfunc
1593         ocNoName,           //  123 Sheets
1594         ocNoName,           //  124 Info
1595         ocSumProduct,       //  125 Sumproduct
1596         ocNoName,           //  126 Isrange
1597         ocDBGet,            //  127 Dget
1598         ocNoName,           //  128 Dquery
1599         ocNoName,           //  129 Coord
1600         ocNoName,           //  130 Reserved (internal)
1601         ocGetActDate,       //  131 Today
1602         ocNoName,           //  132 Vdb
1603         ocDBVarP,           //  133 Dvars
1604         ocDBStdDevP,        //  134 Dstds
1605         ocVarP,             //  135 Vars
1606         ocStDevP,           //  136 Stds
1607         ocGetDiffDate360,   //  137 D360
1608         ocNoName,           //  138 Reserved (internal)
1609         ocNoName,           //  139 Isapp
1610         ocNoName,           //  140 Isaaf
1611         ocGetDayOfWeek,     //  141 Weekday
1612         ocGetDiffDate,      //  142 Datedif
1613         ocRank,             //  143 Rank
1614         ocNoName,           //  144 Numberstring
1615         ocNoName,           //  145 Datestring
1616         ocNoName,           //  146 Decimal
1617         ocNoName,           //  147 Hex
1618         ocNoName,           //  148 Db
1619         ocNoName,           //  149 Pmti
1620         ocNoName,           //  150 Spi
1621         ocNoName,           //  151 Fullp
1622         ocNoName,           //  152 Halfp
1623         ocNoName,           //  153 Pureavg
1624         ocCount2,           //  154 Purecount
1625         ocNoName,           //  155 Puremax
1626         ocNoName,           //  156 Puremin
1627         ocNoName,           //  157 Purestd
1628         ocNoName,           //  158 Purevar
1629         ocNoName,           //  159 Purestds
1630         ocNoName,           //  160 Purevars
1631         ocNoName,           //  161 Pmt2
1632         ocNoName,           //  162 Pv2
1633         ocNoName,           //  163 Fv2
1634         ocNoName,           //  164 Term2
1635         ocNoName,           //  165 ---                  <-------- neu! - Anzahl ? -
1636         ocGetDiffDate360,   //  166 D360 (US-Version, ersatzweise wie ander D360-Funktion)
1637         ocNoName,           //  167
1638         ocNoName,           //  168
1639         ocNoName,           //  169
1640         ocNoName,           //  170
1641         ocNoName,           //  171
1642         ocNoName,           //  172
1643         ocNoName,           //  173
1644         ocNoName,           //  174
1645         ocNoName,           //  175
1646         ocNoName,           //  176
1647         ocNoName,           //  177
1648         ocNoName,           //  178
1649         ocNoName,           //  179
1650         ocNoName,           //  180
1651         ocNoName,           //  181
1652         ocNoName,           //  182
1653         ocNoName,           //  183
1654         ocNoName,           //  184
1655         ocNoName,           //  185
1656         ocNoName,           //  186
1657         ocNoName,           //  187
1658         ocNoName,           //  188
1659         ocNoName,           //  189
1660         ocNoName,           //  190
1661         ocNoName,           //  191
1662         ocNoName,           //  192
1663         ocNoName,           //  193
1664         ocNoName,           //  194
1665         ocNoName,           //  195
1666         ocNoName,           //  196
1667         ocNoName,           //  197
1668         ocNoName,           //  198
1669         ocNoName,           //  199
1670         ocNoName,           //  200
1671         ocNoName,           //  201
1672         ocNoName,           //  202
1673         ocNoName,           //  203
1674         ocNoName,           //  204
1675         ocNoName,           //  205
1676         ocNoName,           //  206 ?
1677         ocNoName,           //  207
1678         ocNoName,           //  208
1679         ocNoName,           //  209
1680         ocNoName,           //  210
1681         ocNoName,           //  211
1682         ocNoName,           //  212
1683         ocNoName,           //  213
1684         ocNoName,           //  214
1685         ocNoName,           //  215
1686         ocNoName,           //  216
1687         ocNoName,           //  217
1688         ocNoName,           //  218
1689         ocNoName,           //  219
1690         ocNoName,           //  220
1691         ocNoName,           //  221
1692         ocNoName,           //  222
1693         ocNoName,           //  223
1694         ocNoName,           //  224
1695         ocNoName,           //  225
1696         ocNoName,           //  226
1697         ocNoName,           //  227
1698         ocNoName,           //  228
1699         ocNoName,           //  229
1700         ocNoName,           //  230
1701         ocNoName,           //  231
1702         ocNoName,           //  232
1703         ocNoName,           //  233
1704         ocNoName,           //  234
1705         ocNoName,           //  235
1706         ocNoName,           //  236
1707         ocNoName,           //  237
1708         ocNoName,           //  238
1709         ocNoName,           //  239
1710         ocNoName,           //  240
1711         ocNoName,           //  241
1712         ocNoName,           //  242
1713         ocNoName,           //  243
1714         ocNoName,           //  244
1715         ocNoName,           //  245
1716         ocNoName,           //  246
1717         ocNoName,           //  247
1718         ocNoName,           //  248
1719         ocNoName,           //  249
1720         ocNoName,           //  250
1721         ocNoName,           //  251
1722         ocNoName,           //  252
1723         ocNoName,           //  253
1724         ocNoName,           //  254
1725         ocNoName            //  255 ?
1726     };
1727 
1728     return pToken[ nIndex ];
1729 }
1730 
1731 
1732 
1733 
GetAddInName(const sal_uInt8 n)1734 const sal_Char* GetAddInName( const sal_uInt8 n )
1735 {
1736     static const sal_Char*  pNames[ 256 ] =
1737     {
1738         NULL,                       //    0 8-Byte-IEEE-Float
1739         NULL,                       //    1 Variable
1740         NULL,                       //    2 Bereich
1741         NULL,                       //    3 return
1742         NULL,                       //    4 Klammer
1743         NULL,                       //    5 2-Byte-Integer
1744         NULL,                       //    6 ASCII-String
1745         NULL,                       //    7 Named range reference
1746         NULL,                       //    8 Absolut named range
1747         NULL,                       //    9 Err range reference
1748         NULL,                       //   10 Err cell reference
1749         NULL,                       //   11 Err constant
1750         NULL,                       //   12
1751         NULL,                       //   13
1752         NULL,                       //   14 Negation
1753         NULL,                       //   15 Addition
1754         NULL,                       //   16 Subtraktion
1755         NULL,                       //   17 Multiplikation
1756         NULL,                       //   18 Division
1757         NULL,                       //   19 Potenzierung
1758         NULL,                       //   20 Gleichheit
1759         NULL,                       //   21 Ungleich
1760         NULL,                       //   22 Kleiner-gleich
1761         NULL,                       //   23 Groesser-gleich
1762         NULL,                       //   24 Kleiner
1763         NULL,                       //   25 Groesser
1764         NULL,                       //   26 And (logisch)
1765         NULL,                       //   27 Or (logisch)
1766         NULL,                       //   28 Not (logisch)
1767         NULL,                       //   29 unaeres Plus
1768         NULL,                       //   30 Concatenation
1769         NULL,                       //   31 Not applicable
1770         NULL,                       //   32 Error
1771         NULL,                       //   33 Betrag ABS()
1772         NULL,                       //   34 Ganzzahl INT()
1773         NULL,                       //   35 Quadratwurzel
1774         NULL,                       //   36 Zehnerlogarithmus
1775         NULL,                       //   37 Natuerlicher Logarithmus
1776         NULL,                       //   38 PI
1777         NULL,                       //   39 Sinus
1778         NULL,                       //   40 Cosinus
1779         NULL,                       //   41 Tangens
1780         NULL,                       //   42 Arcus-Tangens 2 (4.Quadrant)
1781         NULL,                       //   43 Arcus-Tangens (2.Quadrant)
1782         NULL,                       //   44 Arcus-Sinus
1783         NULL,                       //   45 Arcus-Cosinus
1784         NULL,                       //   46 Exponentialfunktion
1785         NULL,                       //   47 Modulo
1786         NULL,                       //   48 Auswahl
1787         NULL,                       //   49 Is not applicable?
1788         NULL,                       //   50 Is Error?
1789         NULL,                       //   51 FALSE
1790         NULL,                       //   52 TRUE
1791         NULL,                       //   53 Zufallszahl
1792         NULL,                       //   54 Datum
1793         NULL,                       //   55 Heute
1794         NULL,                       //   56 Payment
1795         NULL,                       //   57 Present Value
1796         NULL,                       //   58 Future Value
1797         NULL,                       //   59 If ... then ... else ...
1798         NULL,                       //   60 Tag des Monats
1799         NULL,                       //   61 Monat
1800         NULL,                       //   62 Jahr
1801         NULL,                       //   63 Runden
1802         NULL,                       //   64 Zeit
1803         NULL,                       //   65 Stunde
1804         NULL,                       //   66 Minute
1805         NULL,                       //   67 Sekunde
1806         NULL,                       //   68 Ist Zahl?
1807         NULL,                       //   69 Ist Text?
1808         NULL,                       //   70 Len()
1809         NULL,                       //   71 Val()
1810         NULL,                       //   72 String()    ocFixed ersatzweise + Spezialfall
1811         NULL,                       //   73 Mid()
1812         NULL,                       //   74 Char()
1813         NULL,                       //   75 Ascii()
1814         NULL,                       //   76 Find()
1815         NULL,                       //   77 Datevalue
1816         NULL,                       //   78 Timevalue
1817         "ZELLZEIGER",               //   79 Cellpointer
1818         NULL,                       //   80 Sum()
1819         NULL,                       //   81 Avg()
1820         NULL,                       //   82 Cnt()
1821         NULL,                       //   83 Min()
1822         NULL,                       //   84 Max()
1823         NULL,                       //   85 Vlookup()
1824         NULL,                       //   86 Npv()
1825         NULL,                       //   87 Var()
1826         NULL,                       //   88 Std()
1827         NULL,                       //   89 Irr()
1828         NULL,                       //   90 Hlookup()
1829         NULL,                       //   91 XlfDsum
1830         NULL,                       //   92 XlfDaverage
1831         NULL,                       //   93 XlfDcount
1832         NULL,                       //   94 XlfDmin
1833         NULL,                       //   95 XlfDmax
1834         NULL,                       //   96 XlfDvar
1835         NULL,                       //   97 XlfDstdev
1836         NULL,                       //   98 Index()
1837         NULL,                       //   99 Cols()
1838         NULL,                       //  100 Rows()
1839         NULL,                       //  101 Repeat()
1840         NULL,                       //  102 Upper()
1841         NULL,                       //  103 Lower()
1842         NULL,                       //  104 Left()
1843         NULL,                       //  105 Right()
1844         NULL,                       //  106 Replace()
1845         NULL,                       //  107 Proper()
1846         "ZELLE",                    //  108 Cell()
1847         NULL,                       //  109 Trim()
1848         NULL,                       //  110 Clean()
1849         "F",                        //  111 F()     (Excel: T()?)
1850         "W",                        //  112 W()
1851         NULL,                       //  113 Exact()
1852         NULL,                       //  114 Call()
1853         NULL,                       //  115 @@()
1854         NULL,                       //  116 Rate()
1855         "ANN",                      //  117 Term()
1856         NULL,                       //  118 Cterm()
1857         NULL,                       //  119 Sln()
1858         NULL,                       //  120 Syd(), Soy()
1859         NULL,                       //  121 Ddb()
1860         "SplFunc",                  //  122 Splfunc
1861         "BLAETTER",                 //  123 Sheets
1862         "INFO",                     //  124 Info
1863         NULL,                       //  125 Sumproduct
1864         "ISTBEREICH",               //  126 Isrange
1865         NULL,                       //  127 Dget
1866         "DABFRAGE",                 //  128 Dquery
1867         "KOORD",                    //  129 Coord
1868         NULL,                       //  130 Reserved (internal)
1869         NULL,                       //  131 Today
1870         NULL,                       //  132 Vdb
1871         NULL,                       //  133 Dvars
1872         NULL,                       //  134 Dstds
1873         NULL,                       //  135 Vars
1874         NULL,                       //  136 Stds
1875         NULL,                       //  137 D360
1876         NULL,                       //  138 Reserved (internal)
1877         NULL,                       //  139 Isapp
1878         "ISTDEFZUS",                //  140 Isaaf
1879         NULL,                       //  141 Weekday
1880         NULL,                       //  142 Datedif
1881         NULL,                       //  143 Rank
1882         NULL,                       //  144 Numberstring
1883         "DATUMFOLGE",               //  145 Datestring
1884         "DEZIMAL",                  //  146 Decimal
1885         "HEX",                      //  147 Hex
1886         NULL,                       //  148 Db
1887         NULL,                       //  149 Pmti
1888         NULL,                       //  150 Spi
1889         NULL,                       //  151 Fullp
1890         NULL,                       //  152 Halfp
1891         "PURMITTELWERT",            //  153 Pureavg
1892         "PURANZAHL",                //  154 Purecount
1893         "PURMAX",                   //  155 Puremax
1894         "PURMIN",                   //  156 Puremin
1895         "PURSTDABW",                //  157 Purestd
1896         "PURVAR",                   //  158 Purevar
1897         "PURSTDABWP",               //  159 Purestds
1898         "PURVARP",                  //  160 Purevars
1899         NULL,                       //  161 Pmt2
1900         NULL,                       //  162 Pv2
1901         NULL,                       //  163 Fv2
1902         NULL,                       //  164 Term2
1903         NULL,                       //  165 ---                  <-------- neu! - Anzahl ? -
1904         NULL,                       //  166 D360 (US-Version, ersatzweise wie ander D360-Funktion)
1905         NULL,                       //  167
1906         NULL,                       //  168
1907         NULL,                       //  169
1908         NULL,                       //  170
1909         NULL,                       //  171
1910         NULL,                       //  172
1911         NULL,                       //  173
1912         NULL,                       //  174
1913         NULL,                       //  175
1914         NULL,                       //  176
1915         NULL,                       //  177
1916         NULL,                       //  178
1917         NULL,                       //  179
1918         NULL,                       //  180
1919         NULL,                       //  181
1920         NULL,                       //  182
1921         NULL,                       //  183
1922         NULL,                       //  184
1923         NULL,                       //  185
1924         NULL,                       //  186
1925         NULL,                       //  187
1926         NULL,                       //  188
1927         NULL,                       //  189
1928         NULL,                       //  190
1929         NULL,                       //  191
1930         NULL,                       //  192
1931         NULL,                       //  193
1932         NULL,                       //  194
1933         NULL,                       //  195
1934         NULL,                       //  196
1935         NULL,                       //  197
1936         NULL,                       //  198
1937         NULL,                       //  199
1938         NULL,                       //  200
1939         NULL,                       //  201
1940         NULL,                       //  202
1941         NULL,                       //  203
1942         NULL,                       //  204
1943         NULL,                       //  205
1944         NULL,                       //  206 ?
1945         NULL,                       //  207
1946         NULL,                       //  208
1947         NULL,                       //  209
1948         NULL,                       //  210
1949         NULL,                       //  211
1950         NULL,                       //  212
1951         NULL,                       //  213
1952         NULL,                       //  214
1953         NULL,                       //  215
1954         NULL,                       //  216
1955         NULL,                       //  217
1956         NULL,                       //  218
1957         NULL,                       //  219
1958         NULL,                       //  220
1959         NULL,                       //  221
1960         NULL,                       //  222
1961         NULL,                       //  223
1962         NULL,                       //  224
1963         NULL,                       //  225
1964         NULL,                       //  226
1965         NULL,                       //  227
1966         NULL,                       //  228
1967         NULL,                       //  229
1968         NULL,                       //  230
1969         NULL,                       //  231
1970         NULL,                       //  232
1971         NULL,                       //  233
1972         NULL,                       //  234
1973         NULL,                       //  235
1974         NULL,                       //  236
1975         NULL,                       //  237
1976         NULL,                       //  238
1977         NULL,                       //  239
1978         NULL,                       //  240
1979         NULL,                       //  241
1980         NULL,                       //  242
1981         NULL,                       //  243
1982         NULL,                       //  244
1983         NULL,                       //  245
1984         NULL,                       //  246
1985         NULL,                       //  247
1986         NULL,                       //  248
1987         NULL,                       //  249
1988         NULL,                       //  250
1989         NULL,                       //  251
1990         NULL,                       //  252
1991         NULL,                       //  253
1992         NULL,                       //  254
1993         NULL                        //  255 ?
1994     };
1995 
1996     return pNames[ n ];
1997 }
1998 
1999 
lcl_KnownAddIn(const ByteString & sTest)2000 static DefTokenId lcl_KnownAddIn( const ByteString& sTest )
2001 {
2002     DefTokenId  eId = ocNoName;
2003 
2004     if( sTest == "FACT" )
2005             eId = ocFact;
2006     else if(sTest== "ISEMPTY")
2007             eId=ocIsEmpty;
2008     else if(sTest== "DEGTORAD")
2009             eId=ocRad;
2010     else if(sTest== "RADTODEG")
2011             eId=ocDeg;
2012     else if(sTest== "SIGN")
2013             eId=ocPlusMinus;
2014     else if(sTest== "ACOSH")
2015             eId=ocArcCosHyp;
2016     else if(sTest== "ACOTH")
2017             eId=ocArcCotHyp;
2018     else if(sTest== "ASINH")
2019             eId=ocArcSinHyp;
2020     else if(sTest== "ATANH")
2021             eId=ocArcTanHyp;
2022     else if(sTest== "COSH")
2023             eId=ocCosHyp;
2024     else if(sTest== "COTH")
2025             eId=ocCotHyp;
2026     else if(sTest== "SINH")
2027             eId=ocSinHyp;
2028     else if(sTest== "TANH")
2029             eId=ocTanHyp;
2030     else if(sTest== "EVEN")
2031             eId=ocIsEven;
2032     else if(sTest== "ODD")
2033             eId=ocIsOdd;
2034     else if(sTest== "ACOT")
2035             eId=ocArcCot;
2036     else if(sTest== "COT")
2037             eId=ocCot;
2038     else if(sTest== "ACOT")
2039             eId=ocArcCot;
2040     else if(sTest== "TRUNC")
2041             eId=ocTrunc;
2042     else if(sTest== "GEOMEAN")
2043             eId=ocGeoMean;
2044     else if(sTest== "HARMEAN")
2045             eId=ocHarMean;
2046     else if(sTest== "CORREL")
2047             eId=ocCorrel;
2048     else if(sTest== "MEDIAN")
2049             eId=ocMedian;
2050     else if(sTest== "COV")
2051             eId=ocCovar;
2052     else if(sTest== "SKEWNESS")
2053             eId=ocSchiefe;
2054     else if(sTest== "CHITEST")
2055             eId=ocChiTest;
2056     else if(sTest== "FTEST")
2057             eId=ocFTest;
2058     else if(sTest== "AVEDEV")
2059             eId=ocAveDev;
2060     else if(sTest== "PRODUCT")
2061             eId=ocProduct;
2062     else if(sTest== "PERMUT")
2063             eId=ocVariationen;
2064     else if(sTest== "GAMMALN")
2065             eId=ocGammaLn;
2066     else if(sTest== "POISSON")
2067             eId=ocPoissonDist;
2068     else if(sTest== "NORMAL")
2069             eId=ocNormDist;
2070     else if(sTest== "CRITBINOMIAL")
2071             eId=ocKritBinom;
2072     return eId;
2073 
2074 
2075 }
2076