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