[Libreoffice-commits] core.git: rsc/inc rsc/source sc/inc sc/source

Caolán McNamara caolanm at redhat.com
Fri Feb 17 14:00:31 UTC 2017


 rsc/inc/rscall.h                 |    1 
 rsc/inc/rscarray.hxx             |    2 
 rsc/inc/rscclass.hxx             |    8 
 rsc/inc/rscconst.hxx             |    2 
 rsc/inc/rsccont.hxx              |   14 
 rsc/inc/rscflag.hxx              |    2 
 rsc/inc/rscmgr.hxx               |    4 
 rsc/inc/rscrange.hxx             |    6 
 rsc/inc/rscstr.hxx               |    2 
 rsc/inc/rsctop.hxx               |    4 
 rsc/source/parser/rscdb.cxx      |    4 
 rsc/source/parser/rscicpx.cxx    |    9 
 rsc/source/res/rscall.cxx        |    1 
 rsc/source/res/rscarray.cxx      |    6 
 rsc/source/res/rscclass.cxx      |   32 
 rsc/source/res/rscconst.cxx      |    2 
 rsc/source/res/rsccont.cxx       |   38 
 rsc/source/res/rscflag.cxx       |    2 
 rsc/source/res/rscmgr.cxx        |   14 
 rsc/source/res/rscrange.cxx      |    6 
 rsc/source/res/rscstr.cxx        |    4 
 rsc/source/res/rsctop.cxx        |   10 
 sc/inc/funcdesc.hxx              |    2 
 sc/source/core/data/funcdesc.cxx |  481 +
 sc/source/ui/src/scfuncs.src     |16038 +++++++++------------------------------
 25 files changed, 4387 insertions(+), 12307 deletions(-)

New commits:
commit b127134103e0fcf8b415f53eebed0b5180d782e3
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Thu Feb 16 17:01:20 2017 +0000

    move formula description extra data out of .src
    
    and remove reading/writing of defunct ExtraData from rsc
    
    Change-Id: I5be6e11c5921eb809143487a456d1e4ee203e68c
    Reviewed-on: https://gerrit.libreoffice.org/34345
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/rsc/inc/rscall.h b/rsc/inc/rscall.h
index 53cedd6..3a04308 100644
--- a/rsc/inc/rscall.h
+++ b/rsc/inc/rscall.h
@@ -41,7 +41,6 @@ extern OString* pStdPar2;
 extern sal_uInt32       nRefDeep;
 extern sal_uInt32       nRsc_DELTALANG;
 extern sal_uInt32       nRsc_DELTASYSTEM;
-extern sal_uInt32       nRsc_EXTRADATA;
 extern AtomContainer*   pHS;
 
 /******************* D e f i n e s ***************************************/
diff --git a/rsc/inc/rscarray.hxx b/rsc/inc/rscarray.hxx
index b3bf672..32d1386 100644
--- a/rsc/inc/rscarray.hxx
+++ b/rsc/inc/rscarray.hxx
@@ -88,7 +88,7 @@ public:
     void            WriteSrc( const RSCINST & rInst, FILE * fOutput,
                               RscTypCont * pTC, sal_uInt32 nTab, const char * ) override;
     ERRTYPE         WriteRc( const RSCINST & rInst, RscWriteRc & aMem,
-                             RscTypCont * pTC, sal_uInt32, bool bExtra ) override;
+                             RscTypCont * pTC, sal_uInt32 ) override;
 };
 
 class RscLangArray : public RscArray
diff --git a/rsc/inc/rscclass.hxx b/rsc/inc/rscclass.hxx
index 193e372..59b3980 100644
--- a/rsc/inc/rscclass.hxx
+++ b/rsc/inc/rscclass.hxx
@@ -87,9 +87,9 @@ public:
     void            WriteSrc( const RSCINST & rInst, FILE * fOutput,
                               RscTypCont * pTC, sal_uInt32 nTab, const char * ) override;
     ERRTYPE         WriteInstRc( const RSCINST & rInst, RscWriteRc & aMem,
-                                 RscTypCont * pTC, sal_uInt32, bool bExtra );
+                                 RscTypCont * pTC, sal_uInt32 );
     ERRTYPE         WriteRc( const RSCINST & rInst, RscWriteRc & aMem,
-                             RscTypCont * pTC, sal_uInt32, bool bExtra ) override;
+                             RscTypCont * pTC, sal_uInt32 ) override;
 };
 
 class RscSysDepend : public RscClass
@@ -97,9 +97,9 @@ class RscSysDepend : public RscClass
 public:
                     RscSysDepend( Atom nId, RESOURCE_TYPE nTypId, RscTop * pSuper );
     ERRTYPE         WriteSysDependRc( const RSCINST &, RscWriteRc & aMem,
-                                      RscTypCont * pTC, sal_uInt32, bool bExtra );
+                                      RscTypCont * pTC, sal_uInt32 );
     ERRTYPE         WriteRc( const RSCINST &, RscWriteRc & aMem,
-                             RscTypCont * pTC, sal_uInt32, bool bExtra ) override;
+                             RscTypCont * pTC, sal_uInt32 ) override;
 };
 
 class RscTupel : public RscClass
diff --git a/rsc/inc/rscconst.hxx b/rsc/inc/rscconst.hxx
index 8519f9a..1b65f60 100644
--- a/rsc/inc/rscconst.hxx
+++ b/rsc/inc/rscconst.hxx
@@ -77,7 +77,7 @@ public:
     void            WriteSrc( const RSCINST &rInst, FILE * fOutput,
                               RscTypCont * pTC, sal_uInt32 nTab, const char * ) override;
     ERRTYPE         WriteRc( const RSCINST & rInst, RscWriteRc & aMem,
-                             RscTypCont * pTC, sal_uInt32, bool bExtra ) override;
+                             RscTypCont * pTC, sal_uInt32 ) override;
 };
 
 class RscNameTable;
diff --git a/rsc/inc/rsccont.hxx b/rsc/inc/rsccont.hxx
index e480ea6d..89d3b77 100644
--- a/rsc/inc/rsccont.hxx
+++ b/rsc/inc/rsccont.hxx
@@ -52,7 +52,7 @@ protected:
     void            ContWriteSrc( const RSCINST & rInst, FILE * fOutput,
                                   RscTypCont * pTC, sal_uInt32 nTab, const char * );
     ERRTYPE         ContWriteRc( const RSCINST & rInst, RscWriteRc & aMem,
-                                 RscTypCont * pTC, sal_uInt32, bool bExtra );
+                                 RscTypCont * pTC, sal_uInt32 );
 public:
                     RscBaseCont( Atom nId, RESOURCE_TYPE nTypId,
                                  bool bNoId );
@@ -99,7 +99,7 @@ public:
     void            WriteSrc( const RSCINST & rInst, FILE * fOutput,
                               RscTypCont * pTC, sal_uInt32 nTab, const char * ) override;
     ERRTYPE         WriteRc( const RSCINST & rInst, RscWriteRc & aMem,
-                             RscTypCont * pTC, sal_uInt32 , bool bExtra) override;
+                             RscTypCont * pTC, sal_uInt32 ) override;
 };
 
 class RscContWriteSrc : public RscBaseCont
@@ -115,15 +115,7 @@ class RscCont : public RscContWriteSrc
 public:
                     RscCont( Atom nId, RESOURCE_TYPE nTypId );
     ERRTYPE         WriteRc( const RSCINST & rInst, RscWriteRc & aMem,
-                             RscTypCont * pTC, sal_uInt32, bool bExtra ) override;
-};
-
-class RscContExtraData : public RscContWriteSrc
-{
-public:
-                    RscContExtraData( Atom nId, RESOURCE_TYPE nTypId );
-    ERRTYPE         WriteRc( const RSCINST & rInst, RscWriteRc & aMem,
-                             RscTypCont * pTC, sal_uInt32, bool bExtra ) override;
+                             RscTypCont * pTC, sal_uInt32 ) override;
 };
 
 #endif // INCLUDED_RSC_INC_RSCCONT_HXX
diff --git a/rsc/inc/rscflag.hxx b/rsc/inc/rscflag.hxx
index dd3b986..de006bf 100644
--- a/rsc/inc/rscflag.hxx
+++ b/rsc/inc/rscflag.hxx
@@ -58,7 +58,7 @@ public:
     void            WriteSrc( const RSCINST & rInst, FILE * fOutput,
                               RscTypCont * pTC, sal_uInt32 nTab, const char * ) override;
     ERRTYPE         WriteRc( const RSCINST & rInst, RscWriteRc & aMem,
-                             RscTypCont * pTC, sal_uInt32, bool bExtra ) override;
+                             RscTypCont * pTC, sal_uInt32 ) override;
 };
 
 /******************* R s c C l i e n t ***********************************/
diff --git a/rsc/inc/rscmgr.hxx b/rsc/inc/rscmgr.hxx
index 347512a..ad1ca97 100644
--- a/rsc/inc/rscmgr.hxx
+++ b/rsc/inc/rscmgr.hxx
@@ -54,9 +54,9 @@ public:
                               RscTypCont * pTC, sal_uInt32 nTab, const char * ) override;
     ERRTYPE         WriteRcHeader( const RSCINST & rInst, RscWriteRc & aMem,
                                    RscTypCont * pTC, const RscId & rId,
-                                   sal_uInt32, bool bExtra ) override;
+                                   sal_uInt32 ) override;
     ERRTYPE         WriteRc( const RSCINST & rInst, RscWriteRc & aMem,
-                             RscTypCont * pTC, sal_uInt32, bool bExtra ) override;
+                             RscTypCont * pTC, sal_uInt32 ) override;
     bool            IsConsistent( const RSCINST & rInst ) override;
     ERRTYPE         GetRef( const RSCINST & rInst, RscId * ) override;
     ERRTYPE         SetRef( const RSCINST & rInst, const RscId & rRefId ) override;
diff --git a/rsc/inc/rscrange.hxx b/rsc/inc/rscrange.hxx
index 00573f9..bed213f 100644
--- a/rsc/inc/rscrange.hxx
+++ b/rsc/inc/rscrange.hxx
@@ -58,7 +58,7 @@ public:
     void            WriteSrc( const RSCINST &, FILE * fOutput,
                               RscTypCont * pTC, sal_uInt32 nTab, const char * ) override;
     ERRTYPE         WriteRc( const RSCINST &, RscWriteRc & aMem,
-                             RscTypCont * pTC, sal_uInt32, bool bExtra ) override;
+                             RscTypCont * pTC, sal_uInt32 ) override;
 };
 
 class RscLongRange : public RscTop
@@ -95,7 +95,7 @@ public:
     void            WriteSrc( const RSCINST &, FILE * fOutput,
                               RscTypCont * pTC, sal_uInt32 nTab, const char * ) override;
     ERRTYPE         WriteRc( const RSCINST &, RscWriteRc & aMem,
-                             RscTypCont * pTC, sal_uInt32, bool bExtra ) override;
+                             RscTypCont * pTC, sal_uInt32 ) override;
 
 };
 
@@ -143,7 +143,7 @@ public:
     void            WriteSrc( const RSCINST &, FILE * fOutput,
                               RscTypCont * pTC, sal_uInt32 nTab, const char * ) override;
     ERRTYPE         WriteRc( const RSCINST &, RscWriteRc & aMem,
-                             RscTypCont * pTC, sal_uInt32, bool bExtra ) override;
+                             RscTypCont * pTC, sal_uInt32 ) override;
     bool            IsConsistent( const RSCINST & rInst ) override;
 };
 
diff --git a/rsc/inc/rscstr.hxx b/rsc/inc/rscstr.hxx
index 77010ac..322eedb 100644
--- a/rsc/inc/rscstr.hxx
+++ b/rsc/inc/rscstr.hxx
@@ -59,7 +59,7 @@ public:
     void            WriteSrc( const RSCINST &, FILE * fOutput,
                               RscTypCont * pTC, sal_uInt32 nTab, const char * ) override;
     ERRTYPE         WriteRc( const RSCINST &, RscWriteRc & aMem,
-                             RscTypCont * pTC, sal_uInt32, bool bExtra ) override;
+                             RscTypCont * pTC, sal_uInt32 ) override;
 };
 
 #endif // INCLUDED_RSC_INC_RSCSTR_HXX
diff --git a/rsc/inc/rsctop.hxx b/rsc/inc/rsctop.hxx
index 8d3f52f..2c7a98d 100644
--- a/rsc/inc/rsctop.hxx
+++ b/rsc/inc/rsctop.hxx
@@ -204,9 +204,9 @@ public:
                               RscTypCont * pTC, sal_uInt32 nTab,const char * );
     virtual ERRTYPE WriteRcHeader( const RSCINST & rInst, RscWriteRc & aMem,
                                    RscTypCont * pTC, const RscId & aId,
-                                    sal_uInt32 nDeep, bool bExtra );
+                                    sal_uInt32 nDeep );
     virtual ERRTYPE WriteRc( const RSCINST & rInst, RscWriteRc & aMem,
-                             RscTypCont * pTC, sal_uInt32 nDeep, bool bExtra );
+                             RscTypCont * pTC, sal_uInt32 nDeep );
 };
 
 #endif // INCLUDED_RSC_INC_RSCTOP_HXX
diff --git a/rsc/source/parser/rscdb.cxx b/rsc/source/parser/rscdb.cxx
index 9aa1193..36fd2de 100644
--- a/rsc/source/parser/rscdb.cxx
+++ b/rsc/source/parser/rscdb.cxx
@@ -275,7 +275,7 @@ IMPL_LINK( RscEnumerateObj, CallBackWriteRc, const NameNode&, rNode, void )
 
     aError = pClass->WriteRcHeader( RSCINST( pClass, rObjNode.GetRscObj() ),
                                      aMem, pTypCont,
-                                     rObjNode.GetRscId(), 0, true );
+                                     rObjNode.GetRscId(), 0 );
     if( aError.IsError() || aError.IsWarning() )
         pTypCont->pEH->Error( aError, pClass, rObjNode.GetRscId() );
 
@@ -393,7 +393,7 @@ ERRTYPE RscTypCont::WriteRc( WriteRcContext& rContext )
 
     // version control
     RscWriteRc aMem( nByteOrder );
-    aVersion.pClass->WriteRcHeader( aVersion, aMem, this, RscId( RSCVERSION_ID ), 0, true );
+    aVersion.pClass->WriteRcHeader( aVersion, aMem, this, RscId( RSCVERSION_ID ), 0 );
     aEnumRef.aEnumObj.WriteRcFile( aMem, rContext.fOutput );
 
     return aError;
diff --git a/rsc/source/parser/rscicpx.cxx b/rsc/source/parser/rscicpx.cxx
index fde078d..69651c7 100644
--- a/rsc/source/parser/rscicpx.cxx
+++ b/rsc/source/parser/rscicpx.cxx
@@ -47,15 +47,6 @@ RscTop * RscTypCont::InitClassMgr()
     pClassMgr->SetCallPar( *pStdPar1, *pStdPar2, *pStdParType );
 
     // initialize variables
-    {
-        RscContWriteSrc *   pCont;
-
-        // initialize variables
-        aBaseLst.push_back( pCont = new RscContExtraData( pHS->getID( "ContExtradata" ), RSC_NOTYPE ) );
-        pCont->SetTypeClass( &aShort, &aString );
-        nRsc_EXTRADATA = nId = aNmTb.Put( "ExtraData", VARNAME );
-        pClassMgr->SetVariable( nId, pCont );
-    };
     nId = aNmTb.Put( "Comment", VARNAME );
     pClassMgr->SetVariable( nId, &aString, nullptr, RSCVAR::NoRc );
 
diff --git a/rsc/source/res/rscall.cxx b/rsc/source/res/rscall.cxx
index 744a42e..84829c7 100644
--- a/rsc/source/res/rscall.cxx
+++ b/rsc/source/res/rscall.cxx
@@ -26,7 +26,6 @@
 
 Atom    nRsc_DELTALANG = InvalidAtom;
 Atom    nRsc_DELTASYSTEM = InvalidAtom;
-Atom    nRsc_EXTRADATA = InvalidAtom;
 
 void InitRscCompiler()
 {
diff --git a/rsc/source/res/rscarray.cxx b/rsc/source/res/rscarray.cxx
index 817a8c1..de0e8fe 100644
--- a/rsc/source/res/rscarray.cxx
+++ b/rsc/source/res/rscarray.cxx
@@ -387,7 +387,7 @@ void RscArray::WriteSrc( const RSCINST & rInst, FILE * fOutput,
 }
 
 ERRTYPE RscArray::WriteRc( const RSCINST & rInst, RscWriteRc & rMem,
-                           RscTypCont * pTC, sal_uInt32 nDeep, bool bExtra )
+                           RscTypCont * pTC, sal_uInt32 nDeep )
 {
     ERRTYPE aError;
     RscArrayInst * pClassData;
@@ -415,9 +415,9 @@ ERRTYPE RscArray::WriteRc( const RSCINST & rInst, RscWriteRc & rMem,
 
     if( pNode )
         aError = pNode->aInst.pClass->WriteRc( pNode->aInst, rMem, pTC,
-                                                nDeep, bExtra );
+                                                nDeep );
     else
-        aError = RscTop::WriteRc( rInst, rMem, pTC, nDeep, bExtra );
+        aError = RscTop::WriteRc( rInst, rMem, pTC, nDeep );
 
     return aError;
 }
diff --git a/rsc/source/res/rscclass.cxx b/rsc/source/res/rscclass.cxx
index 12fb795..1bbac23 100644
--- a/rsc/source/res/rscclass.cxx
+++ b/rsc/source/res/rscclass.cxx
@@ -567,8 +567,7 @@ void RscClass::WriteSrc( const RSCINST & rInst,
 ERRTYPE RscClass::WriteInstRc( const RSCINST & rInst,
                                RscWriteRc & rMem,
                                RscTypCont * pTC,
-                               sal_uInt32 nDeep,
-                               bool bExtra)
+                               sal_uInt32 nDeep )
 {
     sal_uInt32 i = 0;
     ERRTYPE aError;
@@ -595,11 +594,9 @@ ERRTYPE RscClass::WriteInstRc( const RSCINST & rInst,
                 if( !IsDflt( rInst.pData, i ) )
                 {
                     aTmpI = GetInstData( rInst.pData, i, true );
-                    // set only for variable extradata with bExtra not false
                     aError = aTmpI.pClass->
-                        WriteRcHeader( aTmpI, rMem, pTC,
-                                       RscId(), nDeep,
-                                       (nRsc_EXTRADATA == pVarTypeList[ i ].nVarName) && bExtra );
+                        WriteRcHeader(aTmpI, rMem, pTC,
+                                      RscId(), nDeep);
                     sal_uInt32 nMask = rMem.GetLong( nMaskOff );
                     nMask |= pVarTypeList[ i ].nMask;
                     rMem.PutAt( nMaskOff, nMask );
@@ -615,11 +612,9 @@ ERRTYPE RscClass::WriteInstRc( const RSCINST & rInst,
                 else
                     aTmpI = GetInstData( rInst.pData, i, true );
 
-                // set only for variable extradata with bExtra not false
                 aError = aTmpI.pClass->
                             WriteRcHeader( aTmpI, rMem, pTC,
-                                        RscId(), nDeep,
-                                        (nRsc_EXTRADATA == pVarTypeList[ i ].nVarName) && bExtra );
+                                        RscId(), nDeep );
             }
         }
     }
@@ -630,14 +625,13 @@ ERRTYPE RscClass::WriteInstRc( const RSCINST & rInst,
 ERRTYPE RscClass::WriteRc( const RSCINST & rInst,
                            RscWriteRc & rMem,
                            RscTypCont * pTC,
-                           sal_uInt32 nDeep,
-                           bool bExtra)
+                           sal_uInt32 nDeep )
 {
     ERRTYPE aError;
 
-    aError = RscTop::WriteRc( rInst, rMem, pTC, nDeep, bExtra );
+    aError = RscTop::WriteRc(rInst, rMem, pTC, nDeep);
     if( aError.IsOk() )
-        aError = WriteInstRc( rInst, rMem, pTC, nDeep, bExtra );
+        aError = WriteInstRc(rInst, rMem, pTC, nDeep);
 
     return aError;
 }
@@ -648,7 +642,7 @@ RscSysDepend::RscSysDepend( Atom nId, RESOURCE_TYPE nTypeId, RscTop * pSuper )
 }
 
 ERRTYPE RscSysDepend::WriteSysDependRc( const RSCINST & rInst, RscWriteRc & rMem,
-                                        RscTypCont * pTC, sal_uInt32 nDeep, bool bExtra )
+                                        RscTypCont * pTC, sal_uInt32 nDeep )
 {
     ERRTYPE     aError;
     RSCINST     aFileName;
@@ -659,7 +653,7 @@ ERRTYPE RscSysDepend::WriteSysDependRc( const RSCINST & rInst, RscWriteRc & rMem
     {
         RscWriteRc aTmpMem;
         aError = aFileName.pClass->WriteRcHeader( aFileName, aTmpMem, pTC,
-                                                  RscId(), nDeep, bExtra );
+                                                  RscId(), nDeep );
         // Obsolete - need changes in VCL
         rMem.Put( sal_uInt32(0) );
 
@@ -672,7 +666,7 @@ ERRTYPE RscSysDepend::WriteSysDependRc( const RSCINST & rInst, RscWriteRc & rMem
         }
         rMem.Put( nId );
         aError = aFileName.pClass->WriteRcHeader( aFileName, rMem, pTC,
-                                                  RscId(), nDeep, bExtra );
+                                                  RscId(), nDeep );
     }
     else
         aError = ERR_ERROR;
@@ -681,14 +675,14 @@ ERRTYPE RscSysDepend::WriteSysDependRc( const RSCINST & rInst, RscWriteRc & rMem
 }
 
 ERRTYPE RscSysDepend::WriteRc( const RSCINST & rInst, RscWriteRc & rMem,
-                               RscTypCont * pTC, sal_uInt32 nDeep, bool bExtra )
+                               RscTypCont * pTC, sal_uInt32 nDeep )
 {
-    ERRTYPE     aError = RscClass::WriteRc( rInst, rMem, pTC, nDeep, bExtra );
+    ERRTYPE     aError = RscClass::WriteRc( rInst, rMem, pTC, nDeep );
 
     if( this == rInst.pClass )
     {
         // only when it is own class
-        aError = WriteSysDependRc( rInst, rMem, pTC, nDeep, bExtra );
+        aError = WriteSysDependRc( rInst, rMem, pTC, nDeep );
     }
     return aError;
 }
diff --git a/rsc/source/res/rscconst.cxx b/rsc/source/res/rscconst.cxx
index 32aa189..845cb23 100644
--- a/rsc/source/res/rscconst.cxx
+++ b/rsc/source/res/rscconst.cxx
@@ -181,7 +181,7 @@ void RscEnum::WriteSrc( const RSCINST & rInst, FILE * fOutput,
 }
 
 ERRTYPE RscEnum::WriteRc( const RSCINST & rInst, RscWriteRc & aMem,
-                          RscTypCont *, sal_uInt32, bool )
+                          RscTypCont *, sal_uInt32 )
 {
     aMem.Put( (sal_Int32)pVarArray[ reinterpret_cast<RscEnumInst *>(rInst.pData)->nValue ].lValue );
     return ERR_OK;
diff --git a/rsc/source/res/rsccont.cxx b/rsc/source/res/rsccont.cxx
index 6c389e7..fbc36d4 100644
--- a/rsc/source/res/rsccont.cxx
+++ b/rsc/source/res/rsccont.cxx
@@ -677,13 +677,13 @@ void RscBaseCont::ContWriteSrc( const RSCINST & rInst, FILE * fOutput,
 }
 
 ERRTYPE RscBaseCont::ContWriteRc( const RSCINST & rInst, RscWriteRc & rMem,
-                                  RscTypCont * pTC, sal_uInt32 nDeep, bool bExtra )
+                                  RscTypCont * pTC, sal_uInt32 nDeep )
 {
     RscBaseContInst * pClassData;
     ERRTYPE       aError;
 
-    if( bExtra || bNoId )
-    { // only write sub resources when bExtra == true
+    if( bNoId )
+    {
         pClassData = reinterpret_cast<RscBaseContInst *>(rInst.pData + nOffInstData);
 
         for (sal_uInt32 i = 0; i < pClassData->nEntries && aError.IsOk(); i++ )
@@ -692,7 +692,7 @@ ERRTYPE RscBaseCont::ContWriteRc( const RSCINST & rInst, RscWriteRc & rMem,
                          WriteRcHeader( pClassData->pEntries[ i ].aInst,
                                         rMem, pTC,
                                         pClassData->pEntries[ i ].aName,
-                                        nDeep, bExtra );
+                                        nDeep );
         }
     }
 
@@ -708,13 +708,13 @@ void RscBaseCont::WriteSrc( const RSCINST & rInst, FILE * fOutput,
 }
 
 ERRTYPE RscBaseCont::WriteRc( const RSCINST & rInst, RscWriteRc & rMem,
-                              RscTypCont * pTC, sal_uInt32 nDeep, bool bExtra )
+                              RscTypCont * pTC, sal_uInt32 nDeep )
 {
     ERRTYPE       aError;
 
-    aError = RscTop::WriteRc( rInst, rMem, pTC, nDeep, bExtra );
+    aError = RscTop::WriteRc( rInst, rMem, pTC, nDeep );
     if( aError.IsOk() )
-        aError = ContWriteRc( rInst, rMem, pTC, nDeep, bExtra );
+        aError = ContWriteRc( rInst, rMem, pTC, nDeep );
 
     return aError;
 }
@@ -752,37 +752,19 @@ RscCont::RscCont( Atom nId, RESOURCE_TYPE nTypeId )
 }
 
 ERRTYPE RscCont::WriteRc( const RSCINST & rInst, RscWriteRc & rMem,
-                                 RscTypCont * pTC, sal_uInt32 nDeep, bool bExtra )
+                                 RscTypCont * pTC, sal_uInt32 nDeep )
 {
     RscBaseContInst * pClassData;
     ERRTYPE aError;
 
-    aError = RscTop::WriteRc( rInst, rMem, pTC, nDeep, bExtra );
+    aError = RscTop::WriteRc( rInst, rMem, pTC, nDeep );
 
     pClassData = reinterpret_cast<RscBaseContInst *>(rInst.pData + nOffInstData);
 
     rMem.Put( pClassData->nEntries );
 
     if( aError.IsOk() )
-        aError = ContWriteRc( rInst, rMem, pTC, nDeep, bExtra );
-
-    return aError;
-}
-
-RscContExtraData::RscContExtraData( Atom nId, RESOURCE_TYPE nTypeId )
-    : RscContWriteSrc( nId, nTypeId )
-{
-}
-
-ERRTYPE RscContExtraData::WriteRc( const RSCINST & rInst, RscWriteRc & rMem,
-                                   RscTypCont * pTC, sal_uInt32 nDeep, bool bExtra )
-{
-    ERRTYPE aError;
-
-    if( bExtra )
-        aError = RscContWriteSrc::WriteRc( rInst, rMem, pTC, nDeep, bExtra );
-    else
-        aError = RscTop::WriteRc( rInst, rMem, pTC, nDeep, bExtra );
+        aError = ContWriteRc( rInst, rMem, pTC, nDeep );
 
     return aError;
 }
diff --git a/rsc/source/res/rscflag.cxx b/rsc/source/res/rscflag.cxx
index d1d8afd..6321317 100644
--- a/rsc/source/res/rscflag.cxx
+++ b/rsc/source/res/rscflag.cxx
@@ -270,7 +270,7 @@ void RscFlag::WriteSrc( const RSCINST & rInst, FILE * fOutput,
 }
 
 ERRTYPE RscFlag::WriteRc( const RSCINST & rInst, RscWriteRc & aMem,
-                          RscTypCont *, sal_uInt32, bool )
+                          RscTypCont *, sal_uInt32 )
 {
     sal_Int32   lVal = 0;
     sal_uInt32  i = 0, Flag = 0, nIndex = 0;
diff --git a/rsc/source/res/rscmgr.cxx b/rsc/source/res/rscmgr.cxx
index c123a93..39f0b65 100644
--- a/rsc/source/res/rscmgr.cxx
+++ b/rsc/source/res/rscmgr.cxx
@@ -158,7 +158,7 @@ void RscMgr::WriteSrc( const RSCINST &, FILE *, RscTypCont *, sal_uInt32,
 
 ERRTYPE RscMgr::WriteRcHeader( const RSCINST & rInst, RscWriteRc & rMem,
                                RscTypCont * pTC, const RscId &rId,
-                               sal_uInt32 nDeep, bool bExtra )
+                               sal_uInt32 nDeep )
 {
     RscMgrInst *    pClassData;
     ERRTYPE         aError;
@@ -196,13 +196,13 @@ ERRTYPE RscMgr::WriteRcHeader( const RSCINST & rInst, RscWriteRc & rMem,
             if( pTmpRefClass == rInst.pClass )
             {
                 aError = aRefI.pClass->WriteRcHeader( aRefI, rMem, pTC,
-                                                       rId, nDeep, bExtra );
+                                                       rId, nDeep );
             }
             else
             {
                 RSCINST aRefInst = rInst.pClass->Create( nullptr, aRefI );
                 aError = aRefI.pClass->WriteRcHeader( aRefInst, rMem, pTC,
-                                                       rId, nDeep, bExtra );
+                                                       rId, nDeep );
                 pTmpRefClass->Destroy( aRefInst );
             }
         }
@@ -213,15 +213,15 @@ ERRTYPE RscMgr::WriteRcHeader( const RSCINST & rInst, RscWriteRc & rMem,
 
             nOldSize = rMem.IncSize( 16 /*sizeof( RSHEADER_TYPE )*/ );
 
-            aError = rInst.pClass->WriteRc( rInst, rMem, pTC, nDeep, bExtra );
+            aError = rInst.pClass->WriteRc( rInst, rMem, pTC, nDeep );
             if( aError.IsOk() )
-                aError = WriteInstRc( rInst, rMem, pTC, nDeep, bExtra );
+                aError = WriteInstRc( rInst, rMem, pTC, nDeep );
             nLocalSize = rMem.Size();
 
             if( aError.IsOk() )
             {
                 // RscClass is skipped
-                aError = RscTop::WriteRc( rInst, rMem, pTC, nDeep, bExtra );
+                aError = RscTop::WriteRc( rInst, rMem, pTC, nDeep );
             }
 
             /*
@@ -245,7 +245,7 @@ ERRTYPE RscMgr::WriteRcHeader( const RSCINST & rInst, RscWriteRc & rMem,
 }
 
 ERRTYPE RscMgr::WriteRc( const RSCINST &, RscWriteRc &,
-                         RscTypCont *, sal_uInt32, bool )
+                         RscTypCont *, sal_uInt32 )
 
 {
     return ERR_OK;
diff --git a/rsc/source/res/rscrange.cxx b/rsc/source/res/rscrange.cxx
index 403e7bc..c252c62 100644
--- a/rsc/source/res/rscrange.cxx
+++ b/rsc/source/res/rscrange.cxx
@@ -117,7 +117,7 @@ void RscRange::WriteSrc( const RSCINST & rInst, FILE * fOutput,
 }
 
 ERRTYPE RscRange::WriteRc( const RSCINST & rInst, RscWriteRc & aMem,
-                           RscTypCont *, sal_uInt32, bool )
+                           RscTypCont *, sal_uInt32 )
 {
     if( nMin >= 0 )
     {
@@ -231,7 +231,7 @@ void RscLongRange::WriteSrc( const RSCINST & rInst, FILE * fOutput,
 }
 
 ERRTYPE RscLongRange::WriteRc( const RSCINST & rInst, RscWriteRc & aMem,
-                               RscTypCont *, sal_uInt32, bool )
+                               RscTypCont *, sal_uInt32 )
 {
     sal_Int32 lVal;
 
@@ -372,7 +372,7 @@ void RscIdRange::WriteSrc( const RSCINST & rInst, FILE * fOutput,
 }
 
 ERRTYPE RscIdRange::WriteRc( const RSCINST & rInst, RscWriteRc & aMem,
-                             RscTypCont *, sal_uInt32, bool )
+                             RscTypCont *, sal_uInt32 )
 {
     sal_Int32 lVal = reinterpret_cast<RscId*>(rInst.pData)->GetNumber();
 
diff --git a/rsc/source/res/rscstr.cxx b/rsc/source/res/rscstr.cxx
index dc54561..9021308 100644
--- a/rsc/source/res/rscstr.cxx
+++ b/rsc/source/res/rscstr.cxx
@@ -226,7 +226,7 @@ void RscString::WriteSrc( const RSCINST & rInst, FILE * fOutput,
 }
 
 ERRTYPE RscString::WriteRc( const RSCINST & rInst, RscWriteRc & rMem,
-                            RscTypCont * pTC, sal_uInt32 nDeep, bool bExtra )
+                            RscTypCont * pTC, sal_uInt32 nDeep )
 {
     ERRTYPE aError;
     ObjNode *       pObjNode = nullptr;
@@ -277,7 +277,7 @@ ERRTYPE RscString::WriteRc( const RSCINST & rInst, RscWriteRc & rMem,
             RSCINST     aRefI;
 
             aRefI = RSCINST( pRefClass, pObjNode->GetRscObj() );
-            aError = aRefI.pClass->WriteRc( aRefI, rMem, pTC, nDeep, bExtra );
+            aError = aRefI.pClass->WriteRc( aRefI, rMem, pTC, nDeep );
         }
         else
         {
diff --git a/rsc/source/res/rsctop.cxx b/rsc/source/res/rsctop.cxx
index 3d48b8e..3d44779 100644
--- a/rsc/source/res/rsctop.cxx
+++ b/rsc/source/res/rsctop.cxx
@@ -396,19 +396,19 @@ void RscTop::WriteSrc( const RSCINST & rInst, FILE * fOutput,
 
 ERRTYPE RscTop::WriteRcHeader( const RSCINST & rInst, RscWriteRc & rMem,
                                RscTypCont * pTC, const RscId & rId,
-                               sal_uInt32 nDeep, bool bExtra )
+                               sal_uInt32 nDeep )
 {
     if( pSuperClass )
-        return pSuperClass->WriteRcHeader( rInst, rMem, pTC, rId, nDeep, bExtra );
+        return pSuperClass->WriteRcHeader( rInst, rMem, pTC, rId, nDeep );
     else
-        return rInst.pClass->WriteRc( rInst, rMem, pTC, nDeep, bExtra );
+        return rInst.pClass->WriteRc( rInst, rMem, pTC, nDeep );
 }
 
 ERRTYPE RscTop::WriteRc( const RSCINST & rInst, RscWriteRc & rMem,
-                         RscTypCont * pTC, sal_uInt32 nDeep, bool bExtra )
+                         RscTypCont * pTC, sal_uInt32 nDeep )
 {
     if( pSuperClass )
-        return pSuperClass->WriteRc( rInst, rMem, pTC, nDeep, bExtra );
+        return pSuperClass->WriteRc( rInst, rMem, pTC, nDeep );
     else
         return ERR_OK;
 }
diff --git a/sc/inc/funcdesc.hxx b/sc/inc/funcdesc.hxx
index bea5687..632ccf0 100644
--- a/sc/inc/funcdesc.hxx
+++ b/sc/inc/funcdesc.hxx
@@ -220,7 +220,7 @@ public:
     sal_uInt16            nCategory;              /**< Function category */
     sal_uInt16            nArgCount;              /**< All parameter count, suppressed and unsuppressed */
     sal_uInt16            nVarArgsStart;          /**< Start of variable arguments, for numbering */
-    OString          sHelpId;                /**< HelpId of function */
+    OString               sHelpId;                /**< HelpId of function */
     bool                  bIncomplete         :1; /**< Incomplete argument info (set for add-in info from configuration) */
     bool                  bHasSuppressedArgs  :1; /**< Whether there is any suppressed parameter. */
     bool                  mbHidden            :1; /**< Whether function is hidden */
diff --git a/sc/source/core/data/funcdesc.cxx b/sc/source/core/data/funcdesc.cxx
index 9c50709..ce67785 100644
--- a/sc/source/core/data/funcdesc.cxx
+++ b/sc/source/core/data/funcdesc.cxx
@@ -37,13 +37,20 @@
 #include <memory>
 #include <numeric>
 
-class ScFuncRes : public Resource
+struct ScFuncDescCore
 {
-public:
-    ScFuncRes( ResId&, ScFuncDesc*, bool & rbSuppressed );
+    sal_uInt16 nOpCode;
+    sal_uInt16 nFunctionFlags;
+    sal_uInt16 nCategory;
+    const char* pHelpId;
+    sal_uInt16 nArgs;
+    sal_uInt8 aOptionalArgs[7];
+};
 
-private:
-    sal_uInt16 GetNum();
+class ScFuncRes
+{
+public:
+    ScFuncRes(ResId&, const ScFuncDescCore &rEntry, ScFuncDesc*, bool & rbSuppressed);
 };
 
 // class ScFuncDesc:
@@ -379,10 +386,427 @@ bool ScFuncDesc::compareByName(const ScFuncDesc* a, const ScFuncDesc* b)
 }
 
 // class ScFunctionList:
-
 ScFunctionList::ScFunctionList()
     : nMaxFuncNameLen(0)
 {
+    /*
+     * 16-bit value:
+     *
+     * Bit 1: boolean flag whether function is suppressed. Usually 0. This
+     * may be used to add UI string resources before UI freeze if
+     * implementation isn't ready yet without displaying them in the
+     * function wizard, most recent used list and other UI elements. Also
+     * not available via API then.
+     *
+     * Bit 2: boolean flag whether function is hidden in the Function
+     * Wizard unless used in an expression.
+     *
+     *
+     * Function group (text, math, ...), one of ID_FUNCTION_GRP_...
+     *
+     * Help ID, HID_FUNC_...
+     *
+     * Number of parameters. VAR_ARGS if variable number, or
+     * VAR_ARGS+number if number of fixed parameters and variable
+     * arguments following. Or PAIRED_VAR_ARGS if variable number of
+     * paired parameters, or PAIRED_VAR_ARGS+number if number of fixed
+     * parameters and variable paired arguments following.
+     *
+     * For every parameter:
+     *
+     *     Boolean flag whether the parameter is optional.
+     */
+    ScFuncDescCore aDescs[] =
+    {
+        { SC_OPCODE_DB_COUNT, 0, ID_FUNCTION_GRP_DATABASE, HID_FUNC_DBANZAHL, 3, { 0, 0, 0 } },
+        { SC_OPCODE_DB_COUNT_2, 0, ID_FUNCTION_GRP_DATABASE, HID_FUNC_DBANZAHL2, 3, { 0, 0, 0 } },
+        { SC_OPCODE_DB_AVERAGE, 0, ID_FUNCTION_GRP_DATABASE, HID_FUNC_DBMITTELWERT, 3, { 0, 0, 0 } },
+        { SC_OPCODE_DB_GET, 0, ID_FUNCTION_GRP_DATABASE, HID_FUNC_DBAUSZUG, 3, { 0, 0, 0 } },
+        { SC_OPCODE_DB_MAX, 0, ID_FUNCTION_GRP_DATABASE, HID_FUNC_DBMAX, 3, { 0, 0, 0 } },
+        { SC_OPCODE_DB_MIN, 0, ID_FUNCTION_GRP_DATABASE, HID_FUNC_DBMIN, 3, { 0, 0, 0 } },
+        { SC_OPCODE_DB_PRODUCT, 0, ID_FUNCTION_GRP_DATABASE, HID_FUNC_DBPRODUKT, 3, { 0, 0, 0 } },
+        { SC_OPCODE_DB_STD_DEV, 0, ID_FUNCTION_GRP_DATABASE, HID_FUNC_DBSTDABW, 3, { 0, 0, 0 } },
+        { SC_OPCODE_DB_STD_DEV_P, 0, ID_FUNCTION_GRP_DATABASE, HID_FUNC_DBSTDABWN, 3, { 0, 0, 0 } },
+        { SC_OPCODE_DB_SUM, 0, ID_FUNCTION_GRP_DATABASE, HID_FUNC_DBSUMME, 3, { 0, 0, 0 } },
+        { SC_OPCODE_DB_VAR, 0, ID_FUNCTION_GRP_DATABASE, HID_FUNC_DBVARIANZ, 3, { 0, 0, 0 } },
+        { SC_OPCODE_DB_VAR_P, 0, ID_FUNCTION_GRP_DATABASE, HID_FUNC_DBVARIANZEN, 3, { 0, 0, 0 } },
+        { SC_OPCODE_GET_DATE, 0, ID_FUNCTION_GRP_DATETIME, HID_FUNC_DATUM, 3, { 0, 0, 0 } },
+        { SC_OPCODE_GET_DATE_VALUE, 0, ID_FUNCTION_GRP_DATETIME, HID_FUNC_DATWERT, 1, { 0 } },
+        { SC_OPCODE_GET_DAY, 0, ID_FUNCTION_GRP_DATETIME, HID_FUNC_TAG, 1, { 0 } },
+        { SC_OPCODE_GET_DIFF_DATE_360, 0, ID_FUNCTION_GRP_DATETIME, HID_FUNC_TAGE360, 3, { 0, 0, 1 } },
+        { SC_OPCODE_NETWORKDAYS, 0, ID_FUNCTION_GRP_DATETIME, HID_FUNC_NETWORKDAYS, 4, { 0, 0, 1, 1 } },
+        { SC_OPCODE_NETWORKDAYS_MS, 0, ID_FUNCTION_GRP_DATETIME, HID_FUNC_NETWORKDAYS_MS, 4, { 0, 0, 1, 1 } },
+        { SC_OPCODE_WORKDAY_MS, 0, ID_FUNCTION_GRP_DATETIME, HID_FUNC_WORKDAY_MS, 4, { 0, 0, 1, 1 } },
+        { SC_OPCODE_GET_HOUR, 0, ID_FUNCTION_GRP_DATETIME, HID_FUNC_STUNDE, 1, { 0 } },
+        { SC_OPCODE_GET_MIN, 0, ID_FUNCTION_GRP_DATETIME, HID_FUNC_MINUTE, 1, { 0 } },
+        { SC_OPCODE_GET_MONTH, 0, ID_FUNCTION_GRP_DATETIME, HID_FUNC_MONAT, 1, { 0 } },
+        { SC_OPCODE_GET_ACT_TIME, 0, ID_FUNCTION_GRP_DATETIME, HID_FUNC_JETZT, 0, { } },
+        { SC_OPCODE_GET_SEC, 0, ID_FUNCTION_GRP_DATETIME, HID_FUNC_SEKUNDE, 1, { 0 } },
+        { SC_OPCODE_GET_TIME, 0, ID_FUNCTION_GRP_DATETIME, HID_FUNC_ZEIT, 3, { 0, 0, 0 } },
+        { SC_OPCODE_GET_TIME_VALUE, 0, ID_FUNCTION_GRP_DATETIME, HID_FUNC_ZEITWERT, 1, { 0 } },
+        { SC_OPCODE_GET_ACT_DATE, 0, ID_FUNCTION_GRP_DATETIME, HID_FUNC_HEUTE, 0, { } },
+        { SC_OPCODE_GET_DAY_OF_WEEK, 0, ID_FUNCTION_GRP_DATETIME, HID_FUNC_WOCHENTAG, 2, { 0, 1 } },
+        { SC_OPCODE_GET_YEAR, 0, ID_FUNCTION_GRP_DATETIME, HID_FUNC_JAHR, 1, { 0 } },
+        { SC_OPCODE_GET_DIFF_DATE, 0, ID_FUNCTION_GRP_DATETIME, HID_FUNC_TAGE, 2, { 0, 0 } },
+        { SC_OPCODE_GET_DATEDIF, 0, ID_FUNCTION_GRP_DATETIME, HID_FUNC_DATEDIF, 3, { 0, 0, 0 } },
+        { SC_OPCODE_WEEK, 0, ID_FUNCTION_GRP_DATETIME, HID_FUNC_KALENDERWOCHE, 2, { 0, 1 } },
+        { SC_OPCODE_ISOWEEKNUM, 0, ID_FUNCTION_GRP_DATETIME, HID_FUNC_ISOWEEKNUM, 1, { 0 } },
+        { SC_OPCODE_WEEKNUM_OOO, 2, ID_FUNCTION_GRP_DATETIME, HID_FUNC_WEEKNUM_OOO, 2, { 0, 0 } },
+        { SC_OPCODE_EASTERSUNDAY, 0, ID_FUNCTION_GRP_DATETIME, HID_FUNC_OSTERSONNTAG, 1, { 0 } },
+        { SC_OPCODE_PV, 0, ID_FUNCTION_GRP_FINANZ, HID_FUNC_BW, 5, { 0, 0, 0, 1, 1 } },
+        { SC_OPCODE_FV, 0, ID_FUNCTION_GRP_FINANZ, HID_FUNC_ZW, 5, { 0, 0, 0, 1, 1 } },
+        { SC_OPCODE_NPER, 0, ID_FUNCTION_GRP_FINANZ, HID_FUNC_ZZR, 5, { 0, 0, 0, 1, 1 } },
+        { SC_OPCODE_PMT, 0, ID_FUNCTION_GRP_FINANZ, HID_FUNC_RMZ, 5, { 0, 0, 0, 1, 1 } },
+        { SC_OPCODE_RATE, 0, ID_FUNCTION_GRP_FINANZ, HID_FUNC_ZINS, 6, { 0, 0, 0, 1, 1, 1 } },
+        { SC_OPCODE_IPMT, 0, ID_FUNCTION_GRP_FINANZ, HID_FUNC_ZINSZ, 6, { 0, 0, 0, 0, 1, 1 } },
+        { SC_OPCODE_PPMT, 0, ID_FUNCTION_GRP_FINANZ, HID_FUNC_KAPZ, 6, { 0, 0, 0, 0, 1, 1 } },
+        { SC_OPCODE_CUM_PRINC, 0, ID_FUNCTION_GRP_FINANZ, HID_FUNC_KUMKAPITAL, 6, { 0, 0, 0, 0, 0, 0 } },
+        { SC_OPCODE_CUM_IPMT, 0, ID_FUNCTION_GRP_FINANZ, HID_FUNC_KUMZINSZ, 6, { 0, 0, 0, 0, 0, 0 } },
+        { SC_OPCODE_SYD, 0, ID_FUNCTION_GRP_FINANZ, HID_FUNC_DIA, 4, { 0, 0, 0, 0 } },
+        { SC_OPCODE_SLN, 0, ID_FUNCTION_GRP_FINANZ, HID_FUNC_LIA, 3, { 0, 0, 0 } },
+        { SC_OPCODE_DDB, 0, ID_FUNCTION_GRP_FINANZ, HID_FUNC_GDA, 5, { 0, 0, 0, 0, 1 } },
+        { SC_OPCODE_DB, 0, ID_FUNCTION_GRP_FINANZ, HID_FUNC_GDA2, 5, { 0, 0, 0, 0, 1 } },
+        { SC_OPCODE_VBD , 0, ID_FUNCTION_GRP_FINANZ, HID_FUNC_VDB, 7, { 0, 0, 0, 0, 0, 1, 1 } },
+        { SC_OPCODE_EFFECT, 0, ID_FUNCTION_GRP_FINANZ, HID_FUNC_EFFEKTIV, 2, { 0, 0 } },
+        { SC_OPCODE_NOMINAL, 0, ID_FUNCTION_GRP_FINANZ, HID_FUNC_NOMINAL, 2, { 0, 0 } },
+        { SC_OPCODE_NPV, 0, ID_FUNCTION_GRP_FINANZ, HID_FUNC_NBW, VAR_ARGS+1, { 0, 0 } },
+        { SC_OPCODE_IRR, 0, ID_FUNCTION_GRP_FINANZ, HID_FUNC_IKV, 2, { 0, 1 } },
+        { SC_OPCODE_MIRR, 0, ID_FUNCTION_GRP_FINANZ, HID_FUNC_QIKV, 3, { 0, 0, 0 } },
+        { SC_OPCODE_ISPMT, 0, ID_FUNCTION_GRP_FINANZ, HID_FUNC_ISPMT, 4, { 0, 0, 0, 0 } },
+        { SC_OPCODE_PDURATION, 0, ID_FUNCTION_GRP_FINANZ, HID_FUNC_LAUFZEIT, 3, { 0, 0, 0 } },
+        { SC_OPCODE_RRI, 0, ID_FUNCTION_GRP_FINANZ, HID_FUNC_ZGZ, 3, { 0, 0, 0 } },
+        { SC_OPCODE_IS_REF, 0, ID_FUNCTION_GRP_INFO, HID_FUNC_ISTBEZUG, 1, { 0 } },
+        { SC_OPCODE_IS_ERR, 0, ID_FUNCTION_GRP_INFO, HID_FUNC_ISTFEHL, 1, { 0 } },
+        { SC_OPCODE_IS_ERROR, 0, ID_FUNCTION_GRP_INFO, HID_FUNC_ISTFEHLER, 1, { 0 } },
+        { SC_OPCODE_IS_EMPTY, 0, ID_FUNCTION_GRP_INFO, HID_FUNC_ISTLEER, 1, { 0 } },
+        { SC_OPCODE_IS_LOGICAL, 0, ID_FUNCTION_GRP_INFO, HID_FUNC_ISTLOG, 1, { 0 } },
+        { SC_OPCODE_IS_NV, 0, ID_FUNCTION_GRP_INFO, HID_FUNC_ISTNV, 1, { 0 } },
+        { SC_OPCODE_IS_NON_STRING, 0, ID_FUNCTION_GRP_INFO, HID_FUNC_ISTKTEXT, 1, { 0 } },
+        { SC_OPCODE_IS_STRING, 0, ID_FUNCTION_GRP_INFO, HID_FUNC_ISTTEXT, 1, { 0 } },
+        { SC_OPCODE_IS_VALUE, 0, ID_FUNCTION_GRP_INFO, HID_FUNC_ISTZAHL, 1, { 0 } },
+        { SC_OPCODE_IS_FORMULA, 0, ID_FUNCTION_GRP_INFO, HID_FUNC_ISTFORMEL, 1, { 0 } },
+        { SC_OPCODE_FORMULA, 0, ID_FUNCTION_GRP_INFO, HID_FUNC_FORMEL, 1, { 0 } },
+        { SC_OPCODE_N, 0, ID_FUNCTION_GRP_INFO, HID_FUNC_N, 1, { 0 } },
+        { SC_OPCODE_NO_VALUE, 0, ID_FUNCTION_GRP_INFO, HID_FUNC_NV, 0, { } },
+        { SC_OPCODE_TYPE, 0, ID_FUNCTION_GRP_INFO, HID_FUNC_TYP, 1, { 0 } },
+        { SC_OPCODE_CELL, 0, ID_FUNCTION_GRP_INFO, HID_FUNC_ZELLE, 2, { 0, 1 } },
+        { SC_OPCODE_CURRENT, 0, ID_FUNCTION_GRP_INFO, HID_FUNC_AKTUELL, 0, { } },
+        { SC_OPCODE_FALSE, 0, ID_FUNCTION_GRP_LOGIC, HID_FUNC_FALSCH, 0, { } },
+        { SC_OPCODE_NOT, 0, ID_FUNCTION_GRP_LOGIC, HID_FUNC_NICHT, 1, { 0 } },
+        { SC_OPCODE_TRUE, 0, ID_FUNCTION_GRP_LOGIC, HID_FUNC_WAHR, 0, { } },
+        { SC_OPCODE_IF, 0, ID_FUNCTION_GRP_LOGIC, HID_FUNC_WENN, 3, { 0, 1, 1 } },
+        { SC_OPCODE_IF_ERROR, 0, ID_FUNCTION_GRP_LOGIC, HID_FUNC_IFERROR, 2, { 0, 0 } },
+        { SC_OPCODE_IF_NA, 0, ID_FUNCTION_GRP_LOGIC, HID_FUNC_IFNA, 2, { 0, 0 } },
+        { SC_OPCODE_OR, 0, ID_FUNCTION_GRP_LOGIC, HID_FUNC_ODER, VAR_ARGS, { 0 } },
+        { SC_OPCODE_XOR, 0, ID_FUNCTION_GRP_LOGIC, HID_FUNC_XOR, VAR_ARGS, { 0 } },
+        { SC_OPCODE_AND, 0, ID_FUNCTION_GRP_LOGIC, HID_FUNC_UND, VAR_ARGS, { 0 } },
+        { SC_OPCODE_ABS, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_ABS, 1, { 0 } },
+        { SC_OPCODE_POWER, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_POTENZ, 2, { 0, 0 } },
+        { SC_OPCODE_COUNT_EMPTY_CELLS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_ANZAHLLEEREZELLEN, 1, { 0 } },
+        { SC_OPCODE_PI, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_PI, 0, { } },
+        { SC_OPCODE_SUM, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_SUMME, VAR_ARGS, { 0 } },
+        { SC_OPCODE_SUM_SQ, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_QUADRATESUMME, VAR_ARGS, { 0 } },
+        { SC_OPCODE_PRODUCT, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_PRODUKT, VAR_ARGS, { 0 } },
+        { SC_OPCODE_SUM_IF, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_SUMMEWENN, 3, { 0, 0, 1 } },
+        { SC_OPCODE_AVERAGE_IF, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_AVERAGEIF, 3, { 0, 0, 1 } },
+        { SC_OPCODE_SUM_IFS, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_SUMIFS, PAIRED_VAR_ARGS+1, { 0, 0, 0 } },
+        { SC_OPCODE_AVERAGE_IFS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_AVERAGEIFS, PAIRED_VAR_ARGS+1, { 0, 0, 0 } },
+        { SC_OPCODE_COUNT_IFS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_COUNTIFS, PAIRED_VAR_ARGS, { 0, 0 } },
+        { SC_OPCODE_COUNT_IF, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_ZAEHLENWENN, 2, { 0, 0 } },
+        { SC_OPCODE_SQRT, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_WURZEL, 1, { 0 } },
+        { SC_OPCODE_RANDOM, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_ZUFALLSZAHL, 0, { } },
+        { SC_OPCODE_IS_EVEN, 0, ID_FUNCTION_GRP_INFO, HID_FUNC_ISTGERADE, 1, { 0 } },
+        { SC_OPCODE_IS_ODD, 0, ID_FUNCTION_GRP_INFO, HID_FUNC_ISTUNGERADE, 1, { 0 } },
+        { SC_OPCODE_COMBIN, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_KOMBINATIONEN, 2, { 0, 0 } },
+        { SC_OPCODE_COMBIN_A, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_KOMBINATIONEN2, 2, { 0, 0 } },
+        { SC_OPCODE_ARC_COS, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_ARCCOS, 1, { 0 } },
+        { SC_OPCODE_ARC_SIN, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_ARCSIN, 1, { 0 } },
+        { SC_OPCODE_ARC_COS_HYP, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_ARCOSHYP, 1, { 0 } },
+        { SC_OPCODE_ARC_SIN_HYP, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_ARSINHYP, 1, { 0 } },
+        { SC_OPCODE_ARC_COT, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_ARCCOT, 1, { 0 } },
+        { SC_OPCODE_ARC_TAN, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_ARCTAN, 1, { 0 } },
+        { SC_OPCODE_ARC_COT_HYP, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_ARCOTHYP, 1, { 0 } },
+        { SC_OPCODE_ARC_TAN_HYP, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_ARTANHYP, 1, { 0 } },
+        { SC_OPCODE_COS, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_COS, 1, { 0 } },
+        { SC_OPCODE_SIN, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_SIN, 1, { 0 } },
+        { SC_OPCODE_COT, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_COT, 1, { 0 } },
+        { SC_OPCODE_TAN, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_TAN, 1, { 0 } },
+        { SC_OPCODE_COS_HYP, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_COSHYP, 1, { 0 } },
+        { SC_OPCODE_SIN_HYP, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_SINHYP, 1, { 0 } },
+        { SC_OPCODE_COT_HYP, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_COTHYP, 1, { 0 } },
+        { SC_OPCODE_TAN_HYP, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_TANHYP, 1, { 0 } },
+        { SC_OPCODE_ARC_TAN_2, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_ARCTAN2, 2, { 0, 0 } },
+        { SC_OPCODE_COSECANT, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_COSECANT, 1, { 0 } },
+        { SC_OPCODE_SECANT, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_SECANT, 1, { 0 } },
+        { SC_OPCODE_COSECANT_HYP, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_COSECANTHYP, 1, { 0 } },
+        { SC_OPCODE_SECANT_HYP, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_SECANTHYP, 1, { 0 } },
+        { SC_OPCODE_DEG, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_DEG, 1, { 0 } },
+        { SC_OPCODE_RAD, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_RAD, 1, { 0 } },
+        { SC_OPCODE_EXP, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_EXP, 1, { 0 } },
+        { SC_OPCODE_LOG, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_LOG, 2, { 0, 1 } },
+        { SC_OPCODE_LN, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_LN, 1, { 0 } },
+        { SC_OPCODE_LOG10, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_LOG10, 1, { 0 } },
+        { SC_OPCODE_FACT, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_FAKULTAET, 1, { 0 } },
+        { SC_OPCODE_MOD, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_REST, 2, { 0, 0 } },
+        { SC_OPCODE_PLUS_MINUS, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_VORZEICHEN, 1, { 0 } },
+        { SC_OPCODE_SUB_TOTAL, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_TEILERGEBNIS, 2, { 0, 0 } },
+        { SC_OPCODE_AGGREGATE, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_AGGREGATE, VAR_ARGS+3, { 0, 0, 0, 1 } },
+        { SC_OPCODE_INT, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_GANZZAHL, 1, { 0 } },
+        { SC_OPCODE_TRUNC, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_KUERZEN, 2, { 0, 0 } },
+        { SC_OPCODE_ROUND, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_RUNDEN, 2, { 0, 1 } },
+        { SC_OPCODE_ROUND_UP, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_AUFRUNDEN, 2, { 0, 1 } },
+        { SC_OPCODE_ROUND_DOWN, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_ABRUNDEN, 2, { 0, 1 } },
+        { SC_OPCODE_EVEN, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_GERADE, 1, { 0 } },
+        { SC_OPCODE_ODD, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_UNGERADE, 1, { 0 } },
+        { SC_OPCODE_CEIL_MS, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_CEIL_MS, 2, { 0, 0 } },
+        { SC_OPCODE_CEIL_PRECISE, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_CEIL_PRECISE, 2, { 0, 1 } },
+        { SC_OPCODE_CEIL_ISO, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_CEIL_ISO, 2, { 0, 1 } },
+        { SC_OPCODE_CEIL, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_OBERGRENZE, 3, { 0, 1, 1 } },
+        { SC_OPCODE_CEIL_MATH, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_CEIL_MATH, 3, { 0, 1, 1 } },
+        { SC_OPCODE_FLOOR, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_UNTERGRENZE, 3, { 0, 1, 1 } },
+        { SC_OPCODE_FLOOR_MS, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_FLOOR_MS, 2, { 0, 0 } },
+        { SC_OPCODE_FLOOR_MATH, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_FLOOR_MATH, 3, { 0, 1, 1 } },
+        { SC_OPCODE_FLOOR_PRECISE, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_FLOOR_PRECISE, 2, { 0, 1 } },
+        { SC_OPCODE_GCD, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_GGT, VAR_ARGS, { 0 } },
+        { SC_OPCODE_LCM, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_KGV, VAR_ARGS, { 0 } },
+        { SC_OPCODE_MAT_TRANS, 0, ID_FUNCTION_GRP_MATRIX, HID_FUNC_MTRANS, 1, { 0 } },
+        { SC_OPCODE_MAT_MULT, 0, ID_FUNCTION_GRP_MATRIX, HID_FUNC_MMULT, 2, { 0, 0 } },
+        { SC_OPCODE_MAT_DET, 0, ID_FUNCTION_GRP_MATRIX, HID_FUNC_MDET, 1, { 0 } },
+        { SC_OPCODE_MAT_INV, 0, ID_FUNCTION_GRP_MATRIX, HID_FUNC_MINV, 1, { 0 } },
+        { SC_OPCODE_MATRIX_UNIT, 0, ID_FUNCTION_GRP_MATRIX, HID_FUNC_EINHEITSMATRIX, 1, { 0 } },
+        { SC_OPCODE_SUM_PRODUCT, 0, ID_FUNCTION_GRP_MATRIX, HID_FUNC_SUMMENPRODUKT, VAR_ARGS, { 0 } },
+        { SC_OPCODE_SUM_X2MY2, 0, ID_FUNCTION_GRP_MATRIX, HID_FUNC_SUMMEX2MY2, 2, { 0, 0 } },
+        { SC_OPCODE_SUM_X2DY2, 0, ID_FUNCTION_GRP_MATRIX, HID_FUNC_SUMMEX2PY2, 2, { 0, 0 } },
+        { SC_OPCODE_SUM_XMY2, 0, ID_FUNCTION_GRP_MATRIX, HID_FUNC_SUMMEXMY2, 2, { 0, 0 } },
+        { SC_OPCODE_FREQUENCY, 0, ID_FUNCTION_GRP_MATRIX, HID_FUNC_HAEUFIGKEIT, 2, { 0, 0 } },
+        { SC_OPCODE_LINEST, 0, ID_FUNCTION_GRP_MATRIX, HID_FUNC_RGP, 4, { 0, 1, 1, 1 } },
+        { SC_OPCODE_LOGEST, 0, ID_FUNCTION_GRP_MATRIX, HID_FUNC_RKP, 4, { 0, 1, 1, 1 } },
+        { SC_OPCODE_TREND, 0, ID_FUNCTION_GRP_MATRIX, HID_FUNC_TREND, 4, { 0, 1, 1, 1 } },
+        { SC_OPCODE_GROWTH, 0, ID_FUNCTION_GRP_MATRIX, HID_FUNC_VARIATION, 4, { 0, 1, 1, 1 } },
+        { SC_OPCODE_COUNT, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_ANZAHL, VAR_ARGS, { 0 } },
+        { SC_OPCODE_COUNT_2, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_ANZAHL2, VAR_ARGS, { 0 } },
+        { SC_OPCODE_MAX, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_MAX, VAR_ARGS, { 0 } },
+        { SC_OPCODE_MAX_A, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_MAXA, VAR_ARGS, { 0 } },
+        { SC_OPCODE_MIN, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_MIN, VAR_ARGS, { 0 } },
+        { SC_OPCODE_MIN_A, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_MINA, VAR_ARGS, { 0 } },
+        { SC_OPCODE_VAR, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_VARIANZ, VAR_ARGS, { 0 } },
+        { SC_OPCODE_VAR_S, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_VAR_S, VAR_ARGS, { 0 } },
+        { SC_OPCODE_VAR_A, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_VARIANZA, VAR_ARGS, { 0 } },
+        { SC_OPCODE_VAR_P, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_VARIANZEN, VAR_ARGS, { 0 } },
+        { SC_OPCODE_VAR_P_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_VAR_P_MS, VAR_ARGS, { 0 } },
+        { SC_OPCODE_VAR_P_A, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_VARIANZENA, VAR_ARGS, { 0 } },
+        { SC_OPCODE_ST_DEV, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_STABW, VAR_ARGS, { 0 } },
+        { SC_OPCODE_ST_DEV_S, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_ST_DEV_S, VAR_ARGS, { 0 } },
+        { SC_OPCODE_ST_DEV_A, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_STABWA, VAR_ARGS, { 0 } },
+        { SC_OPCODE_ST_DEV_P, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_STABWN, VAR_ARGS, { 0 } },
+        { SC_OPCODE_ST_DEV_P_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_ST_DEV_P_MS, VAR_ARGS, { 0 } },
+        { SC_OPCODE_ST_DEV_P_A, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_STABWNA, VAR_ARGS, { 0 } },
+        { SC_OPCODE_AVERAGE, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_MITTELWERT, VAR_ARGS, { 0 } },
+        { SC_OPCODE_AVERAGE_A, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_MITTELWERTA, VAR_ARGS, { 0 } },
+        { SC_OPCODE_DEV_SQ, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_SUMQUADABW, VAR_ARGS, { 0 } },
+        { SC_OPCODE_AVE_DEV, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_MITTELABW, VAR_ARGS, { 0 } },
+        { SC_OPCODE_SKEW, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_SCHIEFE, VAR_ARGS, { 0 } },
+        { SC_OPCODE_SKEWP, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_SKEWP, VAR_ARGS, { 0 } },
+        { SC_OPCODE_KURT, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_KURT, VAR_ARGS, { 0 } },
+        { SC_OPCODE_GEO_MEAN, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_GEOMITTEL, VAR_ARGS, { 0 } },
+        { SC_OPCODE_HAR_MEAN, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_HARMITTEL, VAR_ARGS, { 0 } },
+        { SC_OPCODE_MODAL_VALUE, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_MODALWERT, VAR_ARGS, { 0 } },
+        { SC_OPCODE_MODAL_VALUE_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_MODAL_VALUE_MS, VAR_ARGS, { 0 } },
+        { SC_OPCODE_MODAL_VALUE_MULTI, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_MODAL_VALUE_MULTI, VAR_ARGS, { 0 } },
+        { SC_OPCODE_MEDIAN, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_MEDIAN, VAR_ARGS, { 0 } },
+        { SC_OPCODE_PERCENTILE, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_QUANTIL, 2, { 0, 0 } },
+        { SC_OPCODE_PERCENTILE_EXC, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_PERCENTILE_EXC, 2, { 0, 0 } },
+        { SC_OPCODE_PERCENTILE_INC, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_PERCENTILE_INC, 2, { 0, 0 } },
+        { SC_OPCODE_QUARTILE, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_QUARTILE, 2, { 0, 0 } },
+        { SC_OPCODE_QUARTILE_EXC, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_QUARTILE_EXC, 2, { 0, 0 } },
+        { SC_OPCODE_QUARTILE_INC, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_QUARTILE_INC, 2, { 0, 0 } },
+        { SC_OPCODE_LARGE, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_KGROESSTE, 2, { 0, 0 } },
+        { SC_OPCODE_SMALL, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_KKLEINSTE, 2, { 0, 0 } },
+        { SC_OPCODE_PERCENT_RANK, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_QUANTILSRANG, 3, { 0, 0, 1 } },
+        { SC_OPCODE_PERCENT_RANK_EXC, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_PERCENTRANK_EXC, 3, { 0, 0, 1 } },
+        { SC_OPCODE_PERCENT_RANK_INC, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_PERCENTRANK_INC, 3, { 0, 0, 1 } },
+        { SC_OPCODE_RANK, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_RANG, 3, { 0, 0, 1 } },
+        { SC_OPCODE_RANK_EQ, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_RANK_EQ, 3, { 0, 0, 1 } },
+        { SC_OPCODE_RANK_AVG, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_RANK_AVG, 3, { 0, 0, 1 } },
+        { SC_OPCODE_TRIM_MEAN, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_GESTUTZTMITTEL, 2, { 0, 0 } },
+        { SC_OPCODE_PROB, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_WAHRSCHBEREICH, 4, { 0, 0, 0, 1 } },
+        { SC_OPCODE_B, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_B, 4, { 0, 0, 0, 1 } },
+        { SC_OPCODE_PHI, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_PHI, 1, { 0 } },
+        { SC_OPCODE_GAUSS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_GAUSS, 1, { 0 } },
+        { SC_OPCODE_FISHER, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_FISHER, 1, { 0 } },
+        { SC_OPCODE_FISHER_INV, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_FISHERINV, 1, { 0 } },
+        { SC_OPCODE_BINOM_DIST, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_BINOMVERT, 4, { 0, 0, 0, 0 } },
+        { SC_OPCODE_BINOM_DIST_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_BINOM_DIST_MS, 4, { 0, 0, 0, 0 } },
+        { SC_OPCODE_NEG_BINOM_VERT, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_NEGBINOMVERT, 3, { 0, 0, 0 } },
+        { SC_OPCODE_NEG_BINOM_DIST_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_NEGBINOMDIST_MS, 4, { 0, 0, 0, 0 } },
+        { SC_OPCODE_CRIT_BINOM, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_KRITBINOM, 3, { 0, 0, 0 } },
+        { SC_OPCODE_BINOM_INV, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_BINOM_INV_MS, 3, { 0, 0, 0 } },
+        { SC_OPCODE_POISSON_DIST, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_POISSON, 3, { 0, 0, 1 } },
+        { SC_OPCODE_POISSON_DIST_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_POISSON_DIST_MS, 3, { 0, 0, 1 } },
+        { SC_OPCODE_NORM_DIST, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_NORMVERT, 4, { 0, 0, 0, 1 } },
+        { SC_OPCODE_NORM_DIST_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_NORMDIST_MS, 4, { 0, 0, 0, 0 } },
+        { SC_OPCODE_NORM_INV, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_NORMINV, 3, { 0, 0, 0 } },
+        { SC_OPCODE_NORM_INV_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_NORMINV_MS, 3, { 0, 0, 0 } },
+        { SC_OPCODE_STD_NORM_DIST, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_STANDNORMVERT, 1, { 0 } },
+        { SC_OPCODE_STD_NORM_DIST_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_STD_NORMDIST_MS, 2, { 0, 0 } },
+        { SC_OPCODE_S_NORM_INV, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_STANDNORMINV, 1, { 0 } },
+        { SC_OPCODE_S_NORM_INV_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_STD_NORMINV_MS, 1, { 0 } },
+        { SC_OPCODE_LOG_NORM_DIST, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_LOGNORMVERT, 4, { 0, 1, 1, 1 } },
+        { SC_OPCODE_LOG_NORM_DIST_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_LOGNORMDIST_MS, 4, { 0, 0, 0, 0 } },
+        { SC_OPCODE_LOG_INV, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_LOGINV, 3, { 0, 1, 1 } },
+        { SC_OPCODE_LOG_INV_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_LOGINV, 3, { 0, 0, 0 } },
+        { SC_OPCODE_EXP_DIST, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_EXPONVERT, 3, { 0, 0, 0 } },
+        { SC_OPCODE_EXP_DIST_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_EXP_DIST_MS, 3, { 0, 0, 0 } },
+        { SC_OPCODE_GAMMA_DIST, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_GAMMAVERT, 4, { 0, 0, 0, 1 } },
+        { SC_OPCODE_GAMMA_DIST_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_GAMMADIST_MS, 4, { 0, 0, 0, 0 } },
+        { SC_OPCODE_GAMMA_INV, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_GAMMAINV, 3, { 0, 0, 0 } },
+        { SC_OPCODE_GAMMA_INV_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_GAMMAINV_MS, 3, { 0, 0, 0 } },
+        { SC_OPCODE_GAMMA_LN, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_GAMMALN, 1, { 0 } },
+        { SC_OPCODE_GAMMA_LN_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_GAMMALN_MS, 1, { 0 } },
+        { SC_OPCODE_GAMMA, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_GAMMA, 1, { 0 } },
+        { SC_OPCODE_BETA_DIST, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_BETAVERT, 6, { 0, 0, 0, 1, 1, 1 } },
+        { SC_OPCODE_BETA_INV, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_BETAINV, 5, { 0, 0, 0, 1, 1 } },
+        { SC_OPCODE_BETA_DIST_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_BETADIST_MS, 6, { 0, 0, 0, 0, 1, 1 } },
+        { SC_OPCODE_BETA_INV_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_BETAINV_MS, 5, { 0, 0, 0, 1, 1 } },
+        { SC_OPCODE_WEIBULL, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_WEIBULL, 4, { 0, 0, 0, 0 } },
+        { SC_OPCODE_WEIBULL_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_WEIBULL_DIST_MS, 4, { 0, 0, 0, 0 } },
+        { SC_OPCODE_HYP_GEOM_DIST, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_HYPGEOMVERT, 5, { 0, 0, 0, 0, 1 } },
+        { SC_OPCODE_HYP_GEOM_DIST_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_HYP_GEOM_DIST_MS, 5, { 0, 0, 0, 0, 0 } },
+        { SC_OPCODE_T_DIST, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_TVERT, 3, { 0, 0, 0 } },
+        { SC_OPCODE_T_DIST_2T, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_TDIST_2T, 2, { 0, 0 } },
+        { SC_OPCODE_T_DIST_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_TDIST_MS, 3, { 0, 0, 0 } },
+        { SC_OPCODE_T_DIST_RT, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_TDIST_RT, 2, { 0, 0 } },
+        { SC_OPCODE_T_INV, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_TINV, 2, { 0, 0 } },
+        { SC_OPCODE_T_INV_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_TINV_MS, 2, { 0, 0 } },
+        { SC_OPCODE_T_INV_2T, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_TINV_2T, 2, { 0, 0 } },
+        { SC_OPCODE_F_DIST, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_FVERT, 3, { 0, 0, 0 } },
+        { SC_OPCODE_F_DIST_LT, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_F_DIST_LT, 4, { 0, 0, 0, 1 } },
+        { SC_OPCODE_F_DIST_RT, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_F_DIST_RT, 3, { 0, 0, 0 } },
+        { SC_OPCODE_F_INV, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_FINV, 3, { 0, 0, 0 } },
+        { SC_OPCODE_F_INV_LT, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_F_INV_LT, 3, { 0, 0, 0 } },
+        { SC_OPCODE_F_INV_RT, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_F_INV_RT, 3, { 0, 0, 0 } },
+        { SC_OPCODE_CHI_DIST, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_CHIVERT, 2, { 0, 0 } },
+        { SC_OPCODE_CHI_DIST_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_CHIVERT_MS, 2, { 0, 0 } },
+        { SC_OPCODE_CHISQ_DIST, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_CHISQDIST, 3, { 0, 0, 1 } },
+        { SC_OPCODE_CHISQ_DIST_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_CHISQDIST_MS, 3, { 0, 0, 0 } },
+        { SC_OPCODE_CHI_INV, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_CHIINV, 2, { 0, 0 } },
+        { SC_OPCODE_CHI_INV_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_CHIINV_MS, 2, { 0, 0 } },
+        { SC_OPCODE_CHISQ_INV, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_CHISQINV, 2, { 0, 0 } },
+        { SC_OPCODE_CHISQ_INV_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_CHISQINV_MS, 2, { 0, 0 } },
+        { SC_OPCODE_STANDARD, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_STANDARDISIERUNG, 3, { 0, 0, 0 } },
+        { SC_OPCODE_PERMUT, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_VARIATIONEN, 2, { 0, 0 } },
+        { SC_OPCODE_PERMUTATION_A, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_VARIATIONEN2, 2, { 0, 0 } },
+        { SC_OPCODE_CONFIDENCE, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_KONFIDENZ, 3, { 0, 0, 0 } },
+        { SC_OPCODE_CONFIDENCE_N, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_CONFIDENCE_N, 3, { 0, 0, 0 } },
+        { SC_OPCODE_CONFIDENCE_T, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_CONFIDENCE_T, 3, { 0, 0, 0 } },
+        { SC_OPCODE_Z_TEST, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_GTEST, 3, { 0, 0, 1 } },
+        { SC_OPCODE_Z_TEST_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_Z_TEST_MS, 3, { 0, 0, 1 } },
+        { SC_OPCODE_CHI_TEST, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_CHITEST, 2, { 0, 0 } },
+        { SC_OPCODE_CHI_TEST_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_CHITEST_MS, 2, { 0, 0 } },
+        { SC_OPCODE_F_TEST, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_FTEST, 2, { 0, 0 } },
+        { SC_OPCODE_F_TEST_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_F_TEST_MS, 2, { 0, 0 } },
+        { SC_OPCODE_T_TEST, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_TTEST, 4, { 0, 0, 0, 0 } },
+        { SC_OPCODE_T_TEST_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_TTEST_MS, 4, { 0, 0, 0, 0 } },
+        { SC_OPCODE_RSQ, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_BESTIMMTHEITSMASS, 2, { 0, 0 } },
+        { SC_OPCODE_INTERCEPT, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_ACHSENABSCHNITT, 2, { 0, 0 } },
+        { SC_OPCODE_SLOPE, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_STEIGUNG, 2, { 0, 0 } },
+        { SC_OPCODE_STEYX, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_STFEHLERYX, 2, { 0, 0 } },
+        { SC_OPCODE_PEARSON, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_PEARSON, 2, { 0, 0 } },
+        { SC_OPCODE_CORREL, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_KORREL, 2, { 0, 0 } },
+        { SC_OPCODE_COVAR, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_KOVAR, 2, { 0, 0 } },
+        { SC_OPCODE_COVARIANCE_P, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_COVARIANCE_P, 2, { 0, 0 } },
+        { SC_OPCODE_COVARIANCE_S, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_COVARIANCE_S, 2, { 0, 0 } },
+        { SC_OPCODE_FORECAST, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_SCHAETZER, 3, { 0, 0, 0 } },
+        { SC_OPCODE_FORECAST_ETS_ADD, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_FORECAST_ETS_ADD, 6, { 0, 0, 0, 1, 1, 1 } },
+        { SC_OPCODE_FORECAST_ETS_MUL, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_FORECAST_ETS_MUL, 6, { 0, 0, 0, 1, 1, 1 } },
+        { SC_OPCODE_FORECAST_ETS_PIA, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_FORECAST_ETS_PIA, 7, { 0, 0, 0, 1, 1, 1, 1 } },
+        { SC_OPCODE_FORECAST_ETS_PIM, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_FORECAST_ETS_PIM, 7, { 0, 0, 0, 1, 1, 1, 1 } },
+        { SC_OPCODE_FORECAST_ETS_SEA, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_FORECAST_ETS_SEA, 4, { 0, 0, 1, 1 } },
+        { SC_OPCODE_FORECAST_ETS_STA, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_FORECAST_ETS_STA, 6, { 0, 0, 0, 1, 1, 1 } },
+        { SC_OPCODE_FORECAST_ETS_STM, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_FORECAST_ETS_STM, 6, { 0, 0, 0, 1, 1, 1 } },
+        { SC_OPCODE_FORECAST_LIN, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_FORECAST_LIN, 3, { 0, 0, 0 } },
+        { SC_OPCODE_ADDRESS, 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_ADRESSE, 5, { 0, 0, 1, 1, 1 } },
+        { SC_OPCODE_AREAS, 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_BEREICHE, 1, { 0 } },
+        { SC_OPCODE_CHOOSE, 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_WAHL, VAR_ARGS+1, { 0, 0 } },
+        { SC_OPCODE_COLUMN, 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_SPALTE, 1, { 1 } },
+        { SC_OPCODE_ROW, 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_ZEILE, 1, { 1 } },
+        { SC_OPCODE_SHEET, 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_TABELLE, 1, { 1 } },
+        { SC_OPCODE_COLUMNS, 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_SPALTEN, 1, { 0 } },
+        { SC_OPCODE_ROWS, 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_ZEILEN, 1, { 0 } },
+        { SC_OPCODE_SHEETS, 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_TABELLEN, 1, { 1 } },
+        { SC_OPCODE_H_LOOKUP, 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_WVERWEIS, 4, { 0, 0, 0, 1 } },
+        { SC_OPCODE_V_LOOKUP, 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_SVERWEIS, 4, { 0, 0, 0, 1 } },
+        { SC_OPCODE_INDEX, 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_INDEX, 4, { 0, 1, 1, 1 } },
+        { SC_OPCODE_INDIRECT, 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_INDIREKT, 2, { 0, 1 } },
+        { SC_OPCODE_LOOKUP, 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_VERWEIS, 3, { 0, 0, 1 } },
+        { SC_OPCODE_MATCH, 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_VERGLEICH, 3, { 0, 0, 1 } },
+        { SC_OPCODE_OFFSET, 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_VERSCHIEBUNG, 5, { 0, 0, 0, 1, 1 } },
+        { SC_OPCODE_ERROR_TYPE, 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_FEHLERTYP, 1, { 0 } },
+        { SC_OPCODE_ERROR_TYPE_ODF, 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_ERROR_TYPE_ODF, 1, { 0 } },
+        { SC_OPCODE_STYLE, 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_VORLAGE, 3, { 0, 1, 1 } },
+        { SC_OPCODE_DDE, 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_DDE, 4, { 0, 0, 0, 1 } },
+        { SC_OPCODE_HYPERLINK, 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_HYPERLINK, 2, { 0, 1 } },
+        { SC_OPCODE_GET_PIVOT_DATA, 0, ID_FUNCTION_GRP_TABLE, HID_FUNC_GETPIVOTDATA, VAR_ARGS+2, { 0, 0, 1 } },
+        { SC_OPCODE_BAHTTEXT, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_BAHTTEXT, 1, { 0 } },
+        { SC_OPCODE_JIS, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_JIS, 1, { 0 } },
+        { SC_OPCODE_ASC, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_ASC, 1, { 0 } },
+        { SC_OPCODE_CODE, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_CODE, 1, { 0 } },
+        { SC_OPCODE_CURRENCY, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_DM, 2, { 0, 1 } },
+        { SC_OPCODE_CHAR, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_ZEICHEN, 1, { 0 } },
+        { SC_OPCODE_CLEAN, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_SAEUBERN, 1, { 0 } },
+        { SC_OPCODE_CONCAT, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_VERKETTEN, VAR_ARGS, { 0 } },
+        { SC_OPCODE_CONCAT_MS, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_CONCAT_MS, VAR_ARGS, { 0 } },
+        { SC_OPCODE_TEXTJOIN_MS, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_TEXTJOIN_MS, VAR_ARGS + 2, { 0, 0, 0 } },
+        { SC_OPCODE_IFS_MS, 0, ID_FUNCTION_GRP_LOGIC, HID_FUNC_IFS_MS, PAIRED_VAR_ARGS, { 0, 0 } },
+        { SC_OPCODE_SWITCH_MS, 0, ID_FUNCTION_GRP_LOGIC, HID_FUNC_SWITCH_MS, PAIRED_VAR_ARGS + 1, { 0, 0, 0 } },
+        { SC_OPCODE_MINIFS_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_MINIFS_MS, PAIRED_VAR_ARGS + 1, { 0, 0, 0 } },
+        { SC_OPCODE_MAXIFS_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_MAXIFS_MS, PAIRED_VAR_ARGS + 1, { 0, 0, 0 } },
+        { SC_OPCODE_EXACT, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_IDENTISCH, 2, { 0, 0 } },
+        { SC_OPCODE_FIND, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_FINDEN, 3, { 0, 0, 1 } },
+        { SC_OPCODE_SEARCH, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_SUCHEN, 3, { 0, 0, 1 } },
+        { SC_OPCODE_TRIM, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_GLAETTEN, 1, { 0 } },
+        { SC_OPCODE_PROPER, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_GROSS2, 1, { 0 } },
+        { SC_OPCODE_UPPER, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_GROSS, 1, { 0 } },
+        { SC_OPCODE_LOWER, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_KLEIN, 1, { 0 } },
+        { SC_OPCODE_VALUE, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_WERT, 1, { 0 } },
+        { SC_OPCODE_TEXT, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_TEXT, 2, { 0, 0 } },
+        { SC_OPCODE_T, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_T, 1, { 0 } },
+        { SC_OPCODE_REPLACE, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_ERSETZEN, 4, { 0, 0, 0, 0 } },
+        { SC_OPCODE_FIXED, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_FEST, 3, { 0, 0, 1 } },
+        { SC_OPCODE_LEN, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_LAENGE, 1, { 0 } },
+        { SC_OPCODE_LEFT, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_LINKS, 2, { 0, 1 } },
+        { SC_OPCODE_RIGHT, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_RECHTS, 2, { 0, 1 } },
+        { SC_OPCODE_MID, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_TEIL, 3, { 0, 0, 0 } },
+        { SC_OPCODE_REPT, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_WIEDERHOLEN, 2, { 0, 0 } },
+        { SC_OPCODE_SUBSTITUTE, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_WECHSELN, 4, { 0, 0, 0, 1 } },
+        { SC_OPCODE_BASE, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_BASIS, 3, { 0, 0, 1 } },
+        { SC_OPCODE_DECIMAL, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_DEZIMAL, 2, { 0, 0 } },
+        { SC_OPCODE_CONVERT_OOO, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_UMRECHNEN, 3, { 0, 0, 0 } },
+        { SC_OPCODE_ROMAN, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_ROEMISCH, 2, { 0, 1 } },
+        { SC_OPCODE_ARABIC, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_ARABISCH, 1, { 0 } },
+        { SC_OPCODE_INFO, 0, ID_FUNCTION_GRP_INFO, HID_FUNC_INFO, 1, { 0 } },
+        { SC_OPCODE_UNICODE, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_UNICODE, 1, { 0 } },
+        { SC_OPCODE_UNICHAR, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_UNICHAR, 1, { 0 } },
+        { SC_OPCODE_EUROCONVERT, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_EUROCONVERT, 5, { 0, 0, 0, 1, 1 } },
+        { SC_OPCODE_NUMBERVALUE, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_NUMBERVALUE, 3, { 0, 1, 1 } },
+        { SC_OPCODE_BITAND, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_BITAND, 2, { 0, 0 } },
+        { SC_OPCODE_BITOR, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_BITOR, 2, { 0, 0 } },
+        { SC_OPCODE_BITXOR, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_BITXOR, 2, { 0, 0 } },
+        { SC_OPCODE_BITRSHIFT, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_BITRSHIFT, 2, { 0, 0 } },
+        { SC_OPCODE_BITLSHIFT, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_BITLSHIFT, 2, { 0, 0 } },
+        { SC_OPCODE_LENB, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_LENB, 1, { 0 } },
+        { SC_OPCODE_RIGHTB, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_RIGHTB, 2, { 0, 1 } },
+        { SC_OPCODE_LEFTB, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_LEFTB, 2, { 0, 1 } },
+        { SC_OPCODE_MIDB, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_MIDB, 3, { 0, 0, 0 } },
+        { SC_OPCODE_FILTERXML, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_FILTERXML, 2, { 0, 0 } },
+        { SC_OPCODE_COLOR, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_COLOR, 4, { 0, 0, 0, 1 } },
+        { SC_OPCODE_WEBSERVICE, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_WEBSERVICE, 1, { 0, 0 } },
+        { SC_OPCODE_ENCODEURL, 0, ID_FUNCTION_GRP_TEXT, HID_FUNC_ENCODEURL, 1, { 0 } },
+        { SC_OPCODE_ERF_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_ERF_MS, 1, { 0 } },
+        { SC_OPCODE_ERFC_MS, 0, ID_FUNCTION_GRP_STATISTIC, HID_FUNC_ERFC_MS, 1, { 0 } },
+        { SC_OPCODE_RAWSUBTRACT, 0, ID_FUNCTION_GRP_MATH, HID_FUNC_RAWSUBTRACT, VAR_ARGS+2, { 0, 0, 1 } }
+    };
+
     ScFuncDesc* pDesc = nullptr;
     sal_Int32 nStrLen = 0;
     ::std::list<ScFuncDesc*> tmpFuncList;
@@ -394,13 +818,20 @@ ScFunctionList::ScFunctionList()
     for (sal_uInt16 i = 0; i <= SC_OPCODE_LAST_OPCODE_ID; ++i)
     {
         ScResId aRes(RID_SC_FUNC_DESCRIPTIONS_START + i);
-        aRes.SetRT(RSC_RESOURCE);
-        // Sub resource of OpCode available?
+        aRes.SetRT(RSC_STRINGARRAY);
+        // Opcode Resource available?
         if (SC_MOD()->GetResMgr()->IsAvailable(aRes))
         {
             pDesc = new ScFuncDesc;
             bool bSuppressed = false;
-            ScFuncRes aSubRes( aRes, pDesc, bSuppressed);
+
+            ScFuncDescCore *pEntry = std::find_if(aDescs, aDescs + SAL_N_ELEMENTS(aDescs),
+                [&i](const ScFuncDescCore &rItem)
+                {
+                    return rItem.nOpCode == i;
+                }
+            );
+            ScFuncRes aSubRes(aRes, *pEntry, pDesc, bSuppressed);
             // Instead of dealing with this exceptional case at 1001 places
             // we simply don't add an entirely suppressed function to the
             // list and delete it.
@@ -779,18 +1210,17 @@ sal_Unicode ScFunctionMgr::getSingleToken(const formula::IFunctionManager::EToke
 }
 
 // class ScFuncRes:
-ScFuncRes::ScFuncRes( ResId &aRes, ScFuncDesc* pDesc, bool & rbSuppressed )
- : Resource(aRes)
+ScFuncRes::ScFuncRes(ResId &aRes, const ScFuncDescCore &rEntry, ScFuncDesc* pDesc, bool & rbSuppressed)
 {
     const sal_uInt16 nOpCode = aRes.GetId() - RID_SC_FUNC_DESCRIPTIONS_START;
-    sal_uInt16 nFunctionFlags = GetNum();
+    sal_uInt16 nFunctionFlags = rEntry.nFunctionFlags;
     // Bit 1: entirely suppressed
     // Bit 2: hidden unless used
     rbSuppressed = ((nFunctionFlags & 1) != 0);
     pDesc->mbHidden = ((nFunctionFlags & 2) != 0);
-    pDesc->nCategory = GetNum();
-    pDesc->sHelpId = ReadByteStringRes();
-    pDesc->nArgCount = GetNum();
+    pDesc->nCategory = rEntry.nCategory;
+    pDesc->sHelpId = rEntry.pHelpId;
+    pDesc->nArgCount = rEntry.nArgs;
     sal_uInt16 nArgs = pDesc->nArgCount;
     sal_uInt16 nVarArgsSet = 0;
     if (nArgs >= PAIRED_VAR_ARGS)
@@ -803,22 +1233,20 @@ ScFuncRes::ScFuncRes( ResId &aRes, ScFuncDesc* pDesc, bool & rbSuppressed )
         nVarArgsSet = 1;
         nArgs -= VAR_ARGS - nVarArgsSet;
     }
+    assert(nArgs <= SAL_N_ELEMENTS(rEntry.aOptionalArgs));
     if (nArgs)
     {
         pDesc->nVarArgsStart = nArgs - nVarArgsSet;
         pDesc->pDefArgFlags = new ScFuncDesc::ParameterFlags[nArgs];
         for (sal_uInt16 i = 0; i < nArgs; ++i)
         {
-            pDesc->pDefArgFlags[i].bOptional = (bool)GetNum();
+            pDesc->pDefArgFlags[i].bOptional = (bool)rEntry.aOptionalArgs[i];
         }
     }
-    // Need to read the value from the resource even if nArgs==0 to advance the
-    // resource position pointer, so this can't be in the if(nArgs) block above.
-    sal_uInt16 nSuppressed = GetNum();
-    assert(!nSuppressed); (void)nSuppressed;
 
     pDesc->pFuncName = new OUString(ScCompiler::GetNativeSymbol(static_cast<OpCode>(nOpCode)));
-    pDesc->pFuncDesc = new OUString( SC_RESSTR(1) );
+    ResStringArray aArr(aRes);
+    pDesc->pFuncDesc = new OUString(aArr.GetString(0));
 
     if (nArgs)
     {
@@ -828,8 +1256,8 @@ ScFuncRes::ScFuncRes( ResId &aRes, ScFuncDesc* pDesc, bool & rbSuppressed )
         pDesc->maDefArgDescs.resize(nArgs);
         for (sal_uInt16 i = 0; i < nArgs; ++i)
         {
-            pDesc->maDefArgNames[i] = SC_RESSTR(2*(i+1)  );
-            pDesc->maDefArgDescs[i] = SC_RESSTR(2*(i+1)+1);
+            pDesc->maDefArgNames[i] = aArr.GetString((i*2)+1);
+            pDesc->maDefArgDescs[i] = aArr.GetString((i*2)+2);
             // If empty and variable number of arguments and last parameter and
             // parameter is optional and the previous is not optional, repeat
             // previous parameter name and description.
@@ -851,13 +1279,6 @@ ScFuncRes::ScFuncRes( ResId &aRes, ScFuncDesc* pDesc, bool & rbSuppressed )
             }
         }
     }
-
-    FreeResource();
-}
-
-sal_uInt16 ScFuncRes::GetNum()
-{
-    return ReadShortRes();
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/ui/src/scfuncs.src b/sc/source/ui/src/scfuncs.src
index 01d1dae7..ed205af 100644
--- a/sc/source/ui/src/scfuncs.src
+++ b/sc/source/ui/src/scfuncs.src
@@ -23,46 +23,7 @@
  *  the function.
  *
  *      In this sub resource, with index 1 the description of the function is
- *      given, after that follows an
- *
- *      ExtraData block with:
- *
- *          16-bit value:
- *
- *          Bit 1: boolean flag whether function is suppressed. Usually 0. This
- *          may be used to add UI string resources before UI freeze if
- *          implementation isn't ready yet without displaying them in the
- *          function wizard, most recent used list and other UI elements. Also
- *          not available via API then.
- *
- *          Bit 2: boolean flag whether function is hidden in the Function
- *          Wizard unless used in an expression.
- *
- *
- *          Function group (text, math, ...), one of ID_FUNCTION_GRP_...
- *
- *          Help ID, HID_FUNC_...
- *
- *          Number of parameters. VAR_ARGS if variable number, or
- *          VAR_ARGS+number if number of fixed parameters and variable
- *          arguments following. Or PAIRED_VAR_ARGS if variable number of
- *          paired parameters, or PAIRED_VAR_ARGS+number if number of fixed
- *          parameters and variable paired arguments following.
- *
- *          For every parameter:
- *
- *              Boolean flag whether the parameter is optional.
- *
- *          Number of suppressed parameters. Usually 0. Same meaning and
- *          mechanism as the flag for the entire function above.
- *
- *          For every suppressed parameter:
- *
- *              The parameter number, offset starting with 0. Variable
- *              arguments can't be suppressed!
- *
- *
- *      ExtraData block followed by two string resources for each parameter,
+ *      given, followed by two string resources for each parameter,
  *      first the type or name of the parameter, second a description of the
  *      parameter.
  */
@@ -71,13078 +32,4819 @@
 #include "formula/compiler.hrc"
 
  // -=*# Resource for function DCOUNT #*=-
-Resource SC_OPCODE_DB_COUNT+RID_SC_FUNC_DESCRIPTIONS_START
+StringArray SC_OPCODE_DB_COUNT+RID_SC_FUNC_DESCRIPTIONS_START
 {
-    String 1 // Description
-    {
-        Text [ en-US ] = "Counts the cells of a data range whose contents match the search criteria." ;
-    };
-    ExtraData =
-    {
-        0;
-        ID_FUNCTION_GRP_DATABASE;
-        HID_FUNC_DBANZAHL;
-        3;  0;  0;  0;
-        0;
-    };
-    String 2 // Name of Parameter 1
-    {
-        Text [ en-US ] = "Database" ;
-    };
-    String 3 // Description of Parameter 1
-    {
-        Text [ en-US ] = "The range of cells containing data." ;
-    };
-    String 4 // Name of Parameter 2
-    {
-        Text [ en-US ] = "Database field" ;
-    };
-    String 5 // Description of Parameter 2
-    {
-        Text [ en-US ] = "Indicates which database field (column) is to be used for the search criteria." ;
-    };
-    String 6 // Name of Parameter 3
-    {
-        Text [ en-US ] = "Search criteria" ;
-    };
-    String 7 // Description of Parameter 3
+    ItemList [ en-US ] =
     {
-        Text [ en-US ] = "Defines the cell range containing the search criteria." ;
+        < "Counts the cells of a data range whose contents match the search criteria." ; >;
+        < "Database" ; >;
+        < "The range of cells containing data." ; >;
+        < "Database field" ; >;
+        < "Indicates which database field (column) is to be used for the search criteria." ; >;
+        < "Search criteria" ; >;
+        < "Defines the cell range containing the search criteria." ; >;
     };
 };
  // -=*# Resource for function DCOUNTA #*=-
-Resource SC_OPCODE_DB_COUNT_2+RID_SC_FUNC_DESCRIPTIONS_START
+StringArray SC_OPCODE_DB_COUNT_2+RID_SC_FUNC_DESCRIPTIONS_START
 {
-    String 1 // Description
-    {
-        Text [ en-US ] = "Counts all non-blank cells of a data range where the content corresponds to the search criteria." ;
-    };
-    ExtraData =
-    {
-        0;
-        ID_FUNCTION_GRP_DATABASE;
-        HID_FUNC_DBANZAHL2;
-        3;  0;  0;  0;
-        0;
-    };
-    String 2 // Name of Parameter 1
-    {
-        Text [ en-US ] = "Database" ;
-    };
-    String 3 // Description of Parameter 1
-    {
-        Text [ en-US ] = "The range of cells containing data." ;
-    };
-    String 4 // Name of Parameter 2
-    {
-        Text [ en-US ] = "Database field" ;
-    };
-    String 5 // Description of Parameter 2
-    {
-        Text [ en-US ] = "Indicates which database field (column) is to be used for the search criteria." ;
-    };
-    String 6 // Name of Parameter 3
-    {
-        Text [ en-US ] = "Search criteria" ;
-    };
-    String 7 // Description of Parameter 3
+    ItemList [ en-US ] =
     {
-        Text [ en-US ] = "Defines the cell range containing the search criteria." ;
+        < "Counts all non-blank cells of a data range where the content corresponds to the search criteria." ; >;
+        < "Database" ; >;
+        < "The range of cells containing data." ; >;
+        < "Database field" ; >;
+        < "Indicates which database field (column) is to be used for the search criteria." ; >;
+        < "Search criteria" ; >;
+        < "Defines the cell range containing the search criteria." ; >;
     };
 };
  // -=*# Resource for function DAVERAGE #*=-
-Resource SC_OPCODE_DB_AVERAGE+RID_SC_FUNC_DESCRIPTIONS_START
+StringArray SC_OPCODE_DB_AVERAGE+RID_SC_FUNC_DESCRIPTIONS_START
 {
-    String 1 // Description
-    {
-        Text [ en-US ] = "Returns the average value of all the cells of a data range whose contents match the search criteria." ;
-    };
-    ExtraData =
-    {
-        0;
-        ID_FUNCTION_GRP_DATABASE;
-        HID_FUNC_DBMITTELWERT;
-        3;  0;  0;  0;
-        0;
-    };
-    String 2 // Name of Parameter 1
-    {
-        Text [ en-US ] = "Database" ;
-    };
-    String 3 // Description of Parameter 1
-    {
-        Text [ en-US ] = "The range of cells containing data." ;
-    };
-    String 4 // Name of Parameter 2
-    {
-        Text [ en-US ] = "Database field" ;
-    };
-    String 5 // Description of Parameter 2
-    {
-        Text [ en-US ] = "Indicates which database field (column) is to be used for the search criteria." ;
-    };
-    String 6 // Name of Parameter 3
-    {
-        Text [ en-US ] = "Search criteria" ;
-    };
-    String 7 // Description of Parameter 3
+    ItemList [ en-US ] =
     {
-        Text [ en-US ] = "Defines the cell range containing the search criteria." ;
+        < "Returns the average value of all the cells of a data range whose contents match the search criteria." ; >;
+        < "Database" ; >;
+        < "The range of cells containing data." ; >;
+        < "Database field" ; >;
+        < "Indicates which database field (column) is to be used for the search criteria." ; >;
+        < "Search criteria" ; >;
+        < "Defines the cell range containing the search criteria." ; >;
     };
 };
  // -=*# Resource for function DGET #*=-
-Resource SC_OPCODE_DB_GET+RID_SC_FUNC_DESCRIPTIONS_START
+StringArray SC_OPCODE_DB_GET+RID_SC_FUNC_DESCRIPTIONS_START
 {
-    String 1 // Description
-    {
-        Text [ en-US ] = "Defines the contents of the cell of a data range which matches the search criteria." ;
-    };
-    ExtraData =
-    {
-        0;
-        ID_FUNCTION_GRP_DATABASE;
-        HID_FUNC_DBAUSZUG;
-        3;  0;  0;  0;
-        0;
-    };
-    String 2 // Name of Parameter 1
-    {
-        Text [ en-US ] = "Database" ;
-    };
-    String 3 // Description of Parameter 1
-    {
-        Text [ en-US ] = "The range of cells containing data." ;
-    };
-    String 4 // Name of Parameter 2
-    {
-        Text [ en-US ] = "Database field" ;
-    };
-    String 5 // Description of Parameter 2
-    {
-        Text [ en-US ] = "Indicates which database field (column) is to be used for the search criteria." ;
-    };
-    String 6 // Name of Parameter 3
-    {
-        Text [ en-US ] = "Search criteria" ;
-    };
-    String 7 // Description of Parameter 3
+    ItemList [ en-US ] =
     {
-        Text [ en-US ] = "Defines the cell range containing the search criteria." ;
+        < "Defines the contents of the cell of a data range which matches the search criteria." ; >;
+        < "Database" ; >;
+        < "The range of cells containing data." ; >;
+        < "Database field" ; >;
+        < "Indicates which database field (column) is to be used for the search criteria." ; >;
+        < "Search criteria" ; >;
+        < "Defines the cell range containing the search criteria." ; >;
     };
 };
  // -=*# Resource for function DMAX #*=-
-Resource SC_OPCODE_DB_MAX+RID_SC_FUNC_DESCRIPTIONS_START
+StringArray SC_OPCODE_DB_MAX+RID_SC_FUNC_DESCRIPTIONS_START
 {
-    String 1 // Description
-    {
-        Text [ en-US ] = "Returns the maximum value from all of the cells of a data range which correspond to the search criteria." ;
-    };
-    ExtraData =
-    {
-        0;
-        ID_FUNCTION_GRP_DATABASE;
-        HID_FUNC_DBMAX;
-        3;  0;  0;  0;
-        0;
-    };
-    String 2 // Name of Parameter 1
-    {
-        Text [ en-US ] = "Database" ;
-    };
-    String 3 // Description of Parameter 1
-    {
-        Text [ en-US ] = "The range of cells containing data." ;
-    };
-    String 4 // Name of Parameter 2
-    {
-        Text [ en-US ] = "Database field" ;
-    };
-    String 5 // Description of Parameter 2
-    {
-        Text [ en-US ] = "Indicates which database field (column) is to be used for the search criteria." ;
-    };
-    String 6 // Name of Parameter 3
-    {
-        Text [ en-US ] = "Search criteria" ;
-    };
-    String 7 // Description of Parameter 3
+    ItemList [ en-US ] =
     {
-        Text [ en-US ] = "Defines the cell range containing the search criteria." ;
+        < "Returns the maximum value from all of the cells of a data range which correspond to the search criteria." ; >;
+        < "Database" ; >;
+        < "The range of cells containing data." ; >;
+        < "Database field" ; >;
+        < "Indicates which database field (column) is to be used for the search criteria." ; >;
+        < "Search criteria" ; >;
+        < "Defines the cell range containing the search criteria." ; >;
     };
 };
  // -=*# Resource for function DMIN #*=-
-Resource SC_OPCODE_DB_MIN+RID_SC_FUNC_DESCRIPTIONS_START
+StringArray SC_OPCODE_DB_MIN+RID_SC_FUNC_DESCRIPTIONS_START
 {
-    String 1 // Description
-    {
-        Text [ en-US ] = "Returns the minimum of all cells of a data range where the contents correspond to the search criteria." ;
-    };
-    ExtraData =
-    {
-        0;
-        ID_FUNCTION_GRP_DATABASE;
-        HID_FUNC_DBMIN;
-        3;  0;  0;  0;
-        0;
-    };
-    String 2 // Name of Parameter 1
-    {
-        Text [ en-US ] = "Database" ;
-    };
-    String 3 // Description of Parameter 1
-    {
-        Text [ en-US ] = "The range of cells containing data." ;
-    };
-    String 4 // Name of Parameter 2
-    {
-        Text [ en-US ] = "Database field" ;
-    };
-    String 5 // Description of Parameter 2
-    {
-        Text [ en-US ] = "Indicates which database field (column) is to be used for the search criteria." ;
-    };
-    String 6 // Name of Parameter 3
-    {
-        Text [ en-US ] = "Search criteria" ;
-    };
-    String 7 // Description of Parameter 3
+    ItemList [ en-US ] =
     {
-        Text [ en-US ] = "Defines the cell range containing the search criteria." ;
+        < "Returns the minimum of all cells of a data range where the contents correspond to the search criteria." ; >;
+        < "Database" ; >;
+        < "The range of cells containing data." ; >;
+        < "Database field" ; >;
+        < "Indicates which database field (column) is to be used for the search criteria." ; >;
+        < "Search criteria" ; >;
+        < "Defines the cell range containing the search criteria." ; >;
     };
 };
  // -=*# Resource for function DPRODUCT #*=-
-Resource SC_OPCODE_DB_PRODUCT+RID_SC_FUNC_DESCRIPTIONS_START
+StringArray SC_OPCODE_DB_PRODUCT+RID_SC_FUNC_DESCRIPTIONS_START
 {
-    String 1 // Description
-    {
-        Text [ en-US ] = "Multiplies all cells of a data range where the contents match the search criteria." ;
-    };
-    ExtraData =
-    {
-        0;
-        ID_FUNCTION_GRP_DATABASE;
-        HID_FUNC_DBPRODUKT;
-        3;  0;  0;  0;
-        0;
-    };
-    String 2 // Name of Parameter 1
-    {
-        Text [ en-US ] = "Database" ;
-    };
-    String 3 // Description of Parameter 1
-    {
-        Text [ en-US ] = "The range of cells containing data." ;
-    };
-    String 4 // Name of Parameter 2
-    {
-        Text [ en-US ] = "Database field" ;
-    };
-    String 5 // Description of Parameter 2
-    {
-        Text [ en-US ] = "Indicates which database field (column) is to be used for the search criteria." ;
-    };
-    String 6 // Name of Parameter 3
-    {
-        Text [ en-US ] = "Search criteria" ;
-    };
-    String 7 // Description of Parameter 3
+    ItemList [ en-US ] =
     {
-        Text [ en-US ] = "Defines the cell range containing the search criteria." ;
+        < "Multiplies all cells of a data range where the contents match the search criteria." ; >;
+        < "Database" ; >;
+        < "The range of cells containing data." ; >;
+        < "Database field" ; >;
+        < "Indicates which database field (column) is to be used for the search criteria." ; >;
+        < "Search criteria" ; >;
+        < "Defines the cell range containing the search criteria." ; >;
     };
 };
  // -=*# Resource for function DSTDEV #*=-
-Resource SC_OPCODE_DB_STD_DEV+RID_SC_FUNC_DESCRIPTIONS_START
+StringArray SC_OPCODE_DB_STD_DEV+RID_SC_FUNC_DESCRIPTIONS_START
 {
-    String 1 // Description
-    {
-        Text [ en-US ] = "Calculates the standard deviation of all cells in a data range whose contents match the search criteria." ;
-    };
-    ExtraData =
-    {
-        0;
-        ID_FUNCTION_GRP_DATABASE;
-        HID_FUNC_DBSTDABW;
-        3;  0;  0;  0;
-        0;
-    };
-    String 2 // Name of Parameter 1
-    {
-        Text [ en-US ] = "Database" ;
-    };
-    String 3 // Description of Parameter 1
-    {
-        Text [ en-US ] = "The range of cells containing data." ;
-    };
-    String 4 // Name of Parameter 2
-    {
-        Text [ en-US ] = "Database field" ;
-    };
-    String 5 // Description of Parameter 2
-    {
-        Text [ en-US ] = "Indicates which database field (column) is to be used for the search criteria." ;
-    };
-    String 6 // Name of Parameter 3
-    {
-        Text [ en-US ] = "Search criteria" ;
-    };
-    String 7 // Description of Parameter 3
+    ItemList [ en-US ] =
     {
-        Text [ en-US ] = "Defines the cell range containing the search criteria." ;
+        < "Calculates the standard deviation of all cells in a data range whose contents match the search criteria." ; >;
+        < "Database" ; >;
+        < "The range of cells containing data." ; >;
+        < "Database field" ; >;
+        < "Indicates which database field (column) is to be used for the search criteria." ; >;
+        < "Search criteria" ; >;
+        < "Defines the cell range containing the search criteria." ; >;
     };
 };
  // -=*# Resource for function DSTDEVP #*=-
-Resource SC_OPCODE_DB_STD_DEV_P+RID_SC_FUNC_DESCRIPTIONS_START
+StringArray SC_OPCODE_DB_STD_DEV_P+RID_SC_FUNC_DESCRIPTIONS_START
 {
-    String 1 // Description
-    {
-        Text [ en-US ] = "Returns the standard deviation with regards to the population of all cells of a data range matching the search criteria." ;
-    };
-    ExtraData =
-    {
-        0;
-        ID_FUNCTION_GRP_DATABASE;
-        HID_FUNC_DBSTDABWN;
-        3;  0;  0;  0;
-        0;
-    };
-    String 2 // Name of Parameter 1
-    {
-        Text [ en-US ] = "Database" ;
-    };
-    String 3 // Description of Parameter 1
-    {
-        Text [ en-US ] = "The range of cells containing data." ;
-    };
-    String 4 // Name of Parameter 2
-    {
-        Text [ en-US ] = "Database field" ;
-    };
-    String 5 // Description of Parameter 2
-    {
-        Text [ en-US ] = "Indicates which database field (column) is to be used for the search criteria." ;
-    };
-    String 6 // Name of Parameter 3
-    {
-        Text [ en-US ] = "Search criteria" ;
-    };
-    String 7 // Description of Parameter 3
+    ItemList [ en-US ] =
     {
-        Text [ en-US ] = "Defines the cell range containing the search criteria." ;
+        < "Returns the standard deviation with regards to the population of all cells of a data range matching the search criteria." ; >;
+        < "Database" ; >;
+        < "The range of cells containing data." ; >;
+        < "Database field" ; >;
+        < "Indicates which database field (column) is to be used for the search criteria." ; >;
+        < "Search criteria" ; >;
+        < "Defines the cell range containing the search criteria." ; >;
     };
 };
  // -=*# Resource for function DSUM #*=-
-Resource SC_OPCODE_DB_SUM+RID_SC_FUNC_DESCRIPTIONS_START
+StringArray SC_OPCODE_DB_SUM+RID_SC_FUNC_DESCRIPTIONS_START
 {
-    String 1 // Description
-    {
-        Text [ en-US ] = "Adds all the cells of a data range where the contents match the search criteria." ;
-    };
-    ExtraData =
-    {
-        0;
-        ID_FUNCTION_GRP_DATABASE;
-        HID_FUNC_DBSUMME;
-        3;  0;  0;  0;
-        0;
-    };
-    String 2 // Name of Parameter 1
-    {
-        Text [ en-US ] = "Database" ;
-    };
-    String 3 // Description of Parameter 1
-    {
-        Text [ en-US ] = "The range of cells containing data." ;
-    };
-    String 4 // Name of Parameter 2
-    {
-        Text [ en-US ] = "Database field" ;
-    };
-    String 5 // Description of Parameter 2
-    {
-        Text [ en-US ] = "Indicates which database field (column) is to be used for the search criteria." ;
-    };
-    String 6 // Name of Parameter 3
-    {
-        Text [ en-US ] = "Search criteria" ;
-    };
-    String 7 // Description of Parameter 3
+    ItemList [ en-US ] =
     {
-        Text [ en-US ] = "Defines the cell range containing the search criteria." ;
+        < "Adds all the cells of a data range where the contents match the search criteria." ; >;
+        < "Database" ; >;
+        < "The range of cells containing data." ; >;
+        < "Database field" ; >;
+        < "Indicates which database field (column) is to be used for the search criteria." ; >;
+        < "Search criteria" ; >;
+        < "Defines the cell range containing the search criteria." ; >;
     };
 };
  // -=*# Resource for function DVAR #*=-
-Resource SC_OPCODE_DB_VAR+RID_SC_FUNC_DESCRIPTIONS_START
+StringArray SC_OPCODE_DB_VAR+RID_SC_FUNC_DESCRIPTIONS_START
 {
-    String 1 // Description
-    {
-        Text [ en-US ] = "Determines the variance of all the cells in a data range where the contents match the search criteria." ;
-    };
-    ExtraData =
-    {
-        0;
-        ID_FUNCTION_GRP_DATABASE;
-        HID_FUNC_DBVARIANZ;
-        3;  0;  0;  0;
-        0;
-    };
-    String 2 // Name of Parameter 1
-    {
-        Text [ en-US ] = "Database" ;
-    };
-    String 3 // Description of Parameter 1
-    {
-        Text [ en-US ] = "The range of cells containing data." ;
-    };
-    String 4 // Name of Parameter 2
-    {
-        Text [ en-US ] = "Database field" ;
-    };
-    String 5 // Description of Parameter 2
-    {
-        Text [ en-US ] = "Indicates which database field (column) is to be used for the search criteria." ;
-    };
-    String 6 // Name of Parameter 3
-    {
-        Text [ en-US ] = "Search criteria" ;
-    };
-    String 7 // Description of Parameter 3
+    ItemList [ en-US ] =
     {
-        Text [ en-US ] = "Defines the cell range containing the search criteria." ;
+        < "Determines the variance of all the cells in a data range where the contents match the search criteria." ; >;
+        < "Database" ; >;
+        < "The range of cells containing data." ; >;
+        < "Database field" ; >;
+        < "Indicates which database field (column) is to be used for the search criteria." ; >;
+        < "Search criteria" ; >;
+        < "Defines the cell range containing the search criteria." ; >;
     };
 };
  // -=*# Resource for function DVARP #*=-
-Resource SC_OPCODE_DB_VAR_P+RID_SC_FUNC_DESCRIPTIONS_START
+StringArray SC_OPCODE_DB_VAR_P+RID_SC_FUNC_DESCRIPTIONS_START
 {
-    String 1 // Description
-    {
-        Text [ en-US ] = "Determines variance of a population based on all cells in a data range where contents match the search criteria." ;
-    };
-    ExtraData =
-    {
-        0;
-        ID_FUNCTION_GRP_DATABASE;
-        HID_FUNC_DBVARIANZEN;
-        3;  0;  0;  0;
-        0;
-    };
-    String 2 // Name of Parameter 1
-    {
-        Text [ en-US ] = "Database" ;
-    };
-    String 3 // Description of Parameter 1
-    {
-        Text [ en-US ] = "The range of cells containing data." ;
-    };
-    String 4 // Name of Parameter 2
-    {
-        Text [ en-US ] = "Database field" ;
-    };
-    String 5 // Description of Parameter 2
-    {
-        Text [ en-US ] = "Indicates which database field (column) is to be used for the search criteria." ;
-    };
-    String 6 // Name of Parameter 3
-    {
-        Text [ en-US ] = "Search criteria" ;
-    };
-    String 7 // Description of Parameter 3
+    ItemList [ en-US ] =
     {
-        Text [ en-US ] = "Defines the cell range containing the search criteria." ;
+        < "Determines variance of a population based on all cells in a data range where contents match the search criteria." ; >;
+        < "Database" ; >;
+        < "The range of cells containing data." ; >;
+        < "Database field" ; >;
+        < "Indicates which database field (column) is to be used for the search criteria." ; >;
+        < "Search criteria" ; >;
+        < "Defines the cell range containing the search criteria." ; >;
     };
 };
  // -=*# Resource for function DATE #*=-
-Resource SC_OPCODE_GET_DATE+RID_SC_FUNC_DESCRIPTIONS_START
+StringArray SC_OPCODE_GET_DATE+RID_SC_FUNC_DESCRIPTIONS_START
 {
-    String 1 // Description
-    {
-        Text [ en-US ] = "Provides an internal number for the date given." ;
-    };
-    ExtraData =
-    {
-        0;
-        ID_FUNCTION_GRP_DATETIME;
-        HID_FUNC_DATUM;
-        3;  0;  0;  0;
-        0;
-    };
-    String 2 // Name of Parameter 1
-    {
-        Text [ en-US ] = "year" ;
-    };
-    String 3 // Description of Parameter 1
-    {
-        Text [ en-US ] = "An integer between 1583 and 9956 or 0 and 99 (19xx or 20xx depending on the defined option)." ;
-    };
-    String 4 // Name of Parameter 2
-    {
-        Text [ en-US ] = "month" ;
-    };
-    String 5 // Description of Parameter 2
-    {
-        Text [ en-US ] = "An integer between 1 and 12 representing the month." ;
-    };
-    String 6 // Name of Parameter 3
-    {
-        Text [ en-US ] = "day" ;
-    };
-    String 7 // Description of Parameter 3
+    ItemList [ en-US ] =
     {
-        Text [ en-US ] = "An integer between 1 and 31 representing the day of the month." ;
+        < "Provides an internal number for the date given." ; >;
+        < "year" ; >;
+        < "An integer between 1583 and 9956 or 0 and 99 (19xx or 20xx depending on the defined option)." ; >;
+        < "month" ; >;
+        < "An integer between 1 and 12 representing the month." ; >;
+        < "day" ; >;
+        < "An integer between 1 and 31 representing the day of the month." ; >;
     };
 };
  // -=*# Resource for function DATE_VALUE #*=-
-Resource SC_OPCODE_GET_DATE_VALUE+RID_SC_FUNC_DESCRIPTIONS_START
+StringArray SC_OPCODE_GET_DATE_VALUE+RID_SC_FUNC_DESCRIPTIONS_START
 {
-    String 1 // Description
-    {
-        Text [ en-US ] = "Returns an internal number for a text having a possible date format." ;
-    };
-    ExtraData =
-    {
-        0;
-        ID_FUNCTION_GRP_DATETIME;
-        HID_FUNC_DATWERT;
-        1;  0;
-        0;
-    };
-    String 2 // Name of Parameter 1
-    {
-        Text [ en-US ] = "text" ;
-    };
-    String 3 // Description of Parameter 1
+    ItemList [ en-US ] =
     {
-        Text [ en-US ] = "A text enclosed in quotation marks which returns a date in a %PRODUCTNAME date format." ;
+        < "Returns an internal number for a text having a possible date format." ; >;
+        < "text" ; >;
+        < "A text enclosed in quotation marks which returns a date in a %PRODUCTNAME date format." ; >;
     };
 };
  // -=*# Resource for function DAY #*=-
-Resource SC_OPCODE_GET_DAY+RID_SC_FUNC_DESCRIPTIONS_START
+StringArray SC_OPCODE_GET_DAY+RID_SC_FUNC_DESCRIPTIONS_START
 {
-    String 1 // Description
-    {
-        Text [ en-US ] = "Returns the sequential date of the month as an integer (1-31) in relation to the date value." ;
-    };
-    ExtraData =
-    {
-        0;
-        ID_FUNCTION_GRP_DATETIME;
-        HID_FUNC_TAG;
-        1;  0;
-        0;
-    };
-    String 2 // Name of Parameter 1
-    {
-        Text [ en-US ] = "Number" ;
-    };
-    String 3 // Description of Parameter 1
+    ItemList [ en-US ] =
     {
-        Text [ en-US ] = "The internal number for the date." ;
+        < "Returns the sequential date of the month as an integer (1-31) in relation to the date value." ; >;
+        < "Number" ; >;
+        < "The internal number for the date." ; >;
     };
 };
  // -=*# Resource for function DAYS360 #*=-
-Resource SC_OPCODE_GET_DIFF_DATE_360+RID_SC_FUNC_DESCRIPTIONS_START
+StringArray SC_OPCODE_GET_DIFF_DATE_360+RID_SC_FUNC_DESCRIPTIONS_START
 {
-    String 1 // Description
-    {
-        Text [ en-US ] = "Calculates the number of days between two dates based on a 360-day year." ;
-    };
-    ExtraData =
-    {
-        0;
-        ID_FUNCTION_GRP_DATETIME;
-        HID_FUNC_TAGE360;
-        3;  0;  0;  1;
-        0;
-    };
-    String 2 // Name of Parameter 1
-    {
-        Text [ en-US ] = "Date_1" ;
-    };
-    String 3 // Description of Parameter 1
-    {
-        Text [ en-US ] = "The start date for calculating the difference in days." ;
-    };
-    String 4 // Name of Parameter 2
-    {
-        Text [ en-US ] = "Date_2" ;
-    };
-    String 5 // Description of Parameter 2
-    {
-        Text [ en-US ] = "The end date for calculating the difference in days." ;
-    };
-    String 6 // Name of Parameter 3
-    {
-        Text [ en-US ] = "Type" ;
-    };
-    String 7 // Description of Parameter 3
+    ItemList [ en-US ] =
     {
-        Text [ en-US ] = "Method used to form differences: Type = 0 denotes US method (NASD), Type = 1 denotes the European method." ;
+        < "Calculates the number of days between two dates based on a 360-day year." ; >;
+        < "Date_1" ; >;
+        < "The start date for calculating the difference in days." ; >;
+        < "Date_2" ; >;
+        < "The end date for calculating the difference in days." ; >;
+        < "Type" ; >;
+        < "Method used to form differences: Type = 0 denotes US method (NASD), Type = 1 denotes the European method." ; >;
     };
 };
  // -=*# Resource for function NETWORKDAYS #*=-
-Resource SC_OPCODE_NETWORKDAYS+RID_SC_FUNC_DESCRIPTIONS_START
+StringArray SC_OPCODE_NETWORKDAYS+RID_SC_FUNC_DESCRIPTIONS_START
 {
-    String 1 // Description
-    {
-        Text [ en-US ] = "Returns the number of workdays between two dates using arguments to indicate weekenddays and holidays." ;
-    };
-    ExtraData =
-    {
-        0;
-        ID_FUNCTION_GRP_DATETIME;
-        HID_FUNC_NETWORKDAYS;
-        4;  0;  0;  1;  1;
-        0;
-    };
-    String 2 // Name of Parameter 1
-    {
-        Text [ en-US ] = "Start Date" ;
-    };
-    String 3 // Description of Parameter 1
-    {
-        Text [ en-US ] = "Start date for calculation." ;
-    };
-    String 4 // Name of Parameter 2
-    {
-        Text [ en-US ] = "End Date" ;
-    };
-    String 5 // Description of Parameter 2
-    {
-        Text [ en-US ] = "End date for calculation." ;
-    };
-    String 6 // Name of Parameter 3
-    {
-        Text [ en-US ] = "list of dates" ;
-    };
-    String 7 // Description of Parameter 3
-    {
-        Text [ en-US ] = "Optional set of one or more dates to be considered as holiday." ;
-    };
-    String 8 // Name of Parameter 4
-    {
-        Text [ en-US ] = "array" ;
-    };

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list