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 
34 static const char* GetAddInName( const sal_uInt8 nIndex );
35 
36 static DefTokenId lcl_KnownAddIn(std::string_view rTest);
37 
38 void 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  const OString s("@<<@123>>");
54 
55  t = pExtString;
56 
57  sal_Int32 n = t.indexOf(s);
58  if( n != -1 )
59  t = t.copy(n + s.getLength());
60 
61  t = comphelper::string::stripEnd(t, '(');
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 
247 void 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 
320 void 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 
363 void LotusToSc::Reset( const ScAddress& rEingPos )
364 {
365  LotusConverterBase::Reset( rEingPos );
366 
367  TokenId nEins = aPool.Store( 1.0 );
368 
369  aPool << ocClose << ocAdd << nEins;
370  nAddToken = aPool.Store();
371 
372  aPool << ocClose << ocSub << nEins;
373  nSubToken = aPool.Store();
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 
388 typedef FUNC_TYPE ( FuncType1 ) ( sal_uInt8 );
390 
391 void 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 
401  LotusRangeList& rRangeList = m_rContext.maRangeNames;
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
645  ScfTools::ReadLongDouble(aIn, fValue);
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 
1740 const 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 
2005 static 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: */
ocChoose
ocDBCount
ocStDevP
SCCOL Col() const
Definition: refdata.cxx:247
ocVarPA
OString stripEnd(std::string_view rIn, char c)
static void ReadLongDouble(SvStream &rStrm, double &fResult)
Reads a 10-byte-long-double and converts it to double.
Definition: ftools.cxx:41
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:247
void DecToken(TokenId &rParam)
Definition: lotform.cxx:351
void SetRelTab(SCTAB nVal)
Definition: refdata.cxx:99
ocOpen
sal_Int64 n
DefTokenId( FuncType2)(sal_uInt8)
Definition: lotform.cxx:389
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:104
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:1740
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:129
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:481
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:38
ocSub
ScSheetLimits & GetSheetLimits() const
Definition: document.hxx:873
ScSingleRefData Ref1
Definition: refdata.hxx:124
ocSecantHyp
ocPoissonDist
ocNotAvail
ScSingleRefData Ref2
Definition: refdata.hxx:125
void IncToken(TokenId &rParam)
Definition: lotform.cxx:345
ocMaxA
ocBad
ocLog10
FUNC_TYPE( FuncType1)(sal_uInt8)
Definition: lotform.cxx:388
ocMax
bool IsRowRel() const
Definition: refdata.hxx:67
ocGetDate
ocInt
ocDBStdDevP
ocSin
ocRows
static DefTokenId lcl_KnownAddIn(std::string_view rTest)
Definition: lotform.cxx:2005
ocChar
ocVLookup
ocCritBinom
ocRate
ocGetDateValue
ocLess
ocIsEmpty
XPropertyListType t
ocFalse
void ReadSRD(const ScDocument &rDoc, ScSingleRefData &rSRD, sal_uInt8 nFlags)
Definition: lotform.cxx:320
ocSumIf
ocGetHour
static FUNC_TYPE IndexToTypeWK123(sal_uInt8)
Definition: lotform.cxx:1211
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:391
TokenPool aPool
Definition: formel.hxx:78
ocDBCount2
ocOdd
ocIndirect
ocOr
bool bWK3
Definition: lotform.hxx:74
ocCotHyp
ocTrue
ocFact
std::unique_ptr< char[]> aBuffer
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:682
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:378
SCROW Row() const
Definition: refdata.cxx:240
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:466
ocDiv
ocAveDev
Complex reference (a range) into the sheet.
Definition: refdata.hxx:122
bool good() const
static DefTokenId IndexToToken(sal_uInt8)
Definition: lotform.cxx:946
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:357
ocDBStdDev
ocClose
void ReadCRD(const ScDocument &rDoc, ScComplexRefData &rCRD, sal_uInt8 nFlags)
Definition: lotform.hxx:100
static DefTokenId IndexToTokenWK123(sal_uInt8)
Definition: lotform.cxx:1475
ocLen
ocMinA
sal_Int16 SCTAB
Definition: types.hxx:22
sal_Int16 nValue
ocStDev
ocGreaterEqual
ocGetDiffDate
ocArcTan2
ocSum
ocExact
ocArcSinHyp
ocGetDayOfWeek
ocProper