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