diff options
Diffstat (limited to 'basic/source/runtime/methods1.cxx')
-rw-r--r-- | basic/source/runtime/methods1.cxx | 619 |
1 files changed, 267 insertions, 352 deletions
diff --git a/basic/source/runtime/methods1.cxx b/basic/source/runtime/methods1.cxx index 117e84d73000..57d95b93a526 100644 --- a/basic/source/runtime/methods1.cxx +++ b/basic/source/runtime/methods1.cxx @@ -24,7 +24,6 @@ #include <cstddef> -#include <stdlib.h> #include <rtl/math.hxx> #include <vcl/svapp.hxx> #include <vcl/mapmod.hxx> @@ -61,6 +60,9 @@ #include <com/sun/star/lang/XMultiServiceFactory.hpp> #include <com/sun/star/i18n/LocaleCalendar2.hpp> #include <com/sun/star/sheet/XFunctionAccess.hpp> + +#include <officecfg/Office/Scripting.hxx> + #include <memory> using namespace comphelper; @@ -120,7 +122,7 @@ void SbRtl_CallByName(StarBASIC *, SbxArray & rPar, bool) return; } - // 2. parameter is ProcedureName + // 2. parameter is ProcName OUString aNameStr = rPar.Get(2)->GetOUString(); // 3. parameter is CallType @@ -277,15 +279,11 @@ void SbRtl_CDec(StarBASIC *, SbxArray & rPar, bool) void SbRtl_CDate(StarBASIC *, SbxArray & rPar, bool) // JSM { double nVal = 0.0; - if (rPar.Count() == 2) - { - SbxVariable* pSbxVariable = rPar.Get(1); - nVal = pSbxVariable->GetDate(); - } - else - { - StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); - } + if (rPar.Count() != 2) + return StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); + + SbxVariable* pSbxVariable = rPar.Get(1); + nVal = pSbxVariable->GetDate(); rPar.Get(0)->PutDate(nVal); } @@ -321,30 +319,22 @@ void SbRtl_CDbl(StarBASIC *, SbxArray & rPar, bool) // JSM void SbRtl_CInt(StarBASIC *, SbxArray & rPar, bool) // JSM { sal_Int16 nVal = 0; - if (rPar.Count() == 2) - { - SbxVariable* pSbxVariable = rPar.Get(1); - nVal = pSbxVariable->GetInteger(); - } - else - { - StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); - } + if (rPar.Count() != 2) + return StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); + + SbxVariable* pSbxVariable = rPar.Get(1); + nVal = pSbxVariable->GetInteger(); rPar.Get(0)->PutInteger(nVal); } void SbRtl_CLng(StarBASIC *, SbxArray & rPar, bool) // JSM { sal_Int32 nVal = 0; - if (rPar.Count() == 2) - { - SbxVariable* pSbxVariable = rPar.Get(1); - nVal = pSbxVariable->GetLong(); - } - else - { - StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); - } + if (rPar.Count() != 2) + return StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); + + SbxVariable* pSbxVariable = rPar.Get(1); + nVal = pSbxVariable->GetLong(); rPar.Get(0)->PutLong(nVal); } @@ -380,16 +370,11 @@ void SbRtl_CSng(StarBASIC *, SbxArray & rPar, bool) // JSM void SbRtl_CStr(StarBASIC *, SbxArray & rPar, bool) // JSM { - OUString aString; - if (rPar.Count() == 2) - { - SbxVariable* pSbxVariable = rPar.Get(1); - aString = pSbxVariable->GetOUString(); - } - else - { - StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); - } + if (rPar.Count() != 2) + return StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); + + SbxVariable* pSbxVariable = rPar.Get(1); + OUString aString = pSbxVariable->GetOUString(); rPar.Get(0)->PutString(aString); } @@ -410,112 +395,86 @@ void SbRtl_CVar(StarBASIC *, SbxArray & rPar, bool) // JSM void SbRtl_CVErr(StarBASIC *, SbxArray & rPar, bool) { - sal_Int16 nErrCode = 0; - if (rPar.Count() == 2) - { - SbxVariable* pSbxVariable = rPar.Get(1); - nErrCode = pSbxVariable->GetInteger(); - } - else - { - StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); - } + if (rPar.Count() != 2) + return StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); + + SbxVariable* pSbxVariable = rPar.Get(1); + sal_Int16 nErrCode = pSbxVariable->GetInteger(); rPar.Get(0)->PutErr(nErrCode); } void SbRtl_Iif(StarBASIC *, SbxArray & rPar, bool) // JSM { - if (rPar.Count() == 4) + if (rPar.Count() != 4) + return StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); + + if (rPar.Get(1)->GetBool()) { - if (rPar.Get(1)->GetBool()) - { - *rPar.Get(0) = *rPar.Get(2); - } - else - { - *rPar.Get(0) = *rPar.Get(3); - } + *rPar.Get(0) = *rPar.Get(2); } else { - StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); + *rPar.Get(0) = *rPar.Get(3); } + } void SbRtl_GetSystemType(StarBASIC *, SbxArray & rPar, bool) { if (rPar.Count() != 1) - { - StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); - } - else - { + return StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); + // Removed for SRC595 - rPar.Get(0)->PutInteger(-1); - } + rPar.Get(0)->PutInteger(-1); } void SbRtl_GetGUIType(StarBASIC *, SbxArray & rPar, bool) { if (rPar.Count() != 1) - { - StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); - } - else - { + return StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); + // 17.7.2000 Make simple solution for testtool / fat office #if defined(_WIN32) - rPar.Get(0)->PutInteger(1); + rPar.Get(0)->PutInteger(1); #elif defined(UNX) - rPar.Get(0)->PutInteger(4); + rPar.Get(0)->PutInteger(4); #else - rPar.Get(0)->PutInteger(-1); + rPar.Get(0)->PutInteger(-1); #endif - } } void SbRtl_Red(StarBASIC *, SbxArray & rPar, bool) { if (rPar.Count() != 2) - { - StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); - } - else - { - sal_Int32 nRGB = rPar.Get(1)->GetLong(); - nRGB &= 0x00FF0000; - nRGB >>= 16; - rPar.Get(0)->PutInteger(static_cast<sal_Int16>(nRGB)); - } + return StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); + + sal_Int32 nRGB = rPar.Get(1)->GetLong(); + nRGB &= 0x00FF0000; + nRGB >>= 16; + rPar.Get(0)->PutInteger(static_cast<sal_Int16>(nRGB)); + } void SbRtl_Green(StarBASIC *, SbxArray & rPar, bool) { if (rPar.Count() != 2) - { - StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); - } - else - { - sal_Int32 nRGB = rPar.Get(1)->GetLong(); - nRGB &= 0x0000FF00; - nRGB >>= 8; - rPar.Get(0)->PutInteger(static_cast<sal_Int16>(nRGB)); - } + + return StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); + + sal_Int32 nRGB = rPar.Get(1)->GetLong(); + nRGB &= 0x0000FF00; + nRGB >>= 8; + rPar.Get(0)->PutInteger(static_cast<sal_Int16>(nRGB)); } void SbRtl_Blue(StarBASIC *, SbxArray & rPar, bool) { if (rPar.Count() != 2) - { - StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); - } - else - { - sal_Int32 nRGB = rPar.Get(1)->GetLong(); - nRGB &= 0x000000FF; - rPar.Get(0)->PutInteger(static_cast<sal_Int16>(nRGB)); - } + return StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); + + sal_Int32 nRGB = rPar.Get(1)->GetLong(); + nRGB &= 0x000000FF; + rPar.Get(0)->PutInteger(static_cast<sal_Int16>(nRGB)); } @@ -525,7 +484,7 @@ void SbRtl_Switch(StarBASIC *, SbxArray & rPar, bool) if( !(nCount & 0x0001 )) { // number of arguments must be odd - StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); + return StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); } sal_uInt32 nCurExpr = 1; while( nCurExpr < (nCount-1) ) @@ -545,10 +504,8 @@ void SbRtl_Switch(StarBASIC *, SbxArray & rPar, bool) void Wait_Impl( bool bDurationBased, SbxArray& rPar ) { if (rPar.Count() != 2) - { - StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); - return; - } + return StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); + tools::Long nWait = 0; if ( bDurationBased ) { @@ -561,11 +518,9 @@ void Wait_Impl( bool bDurationBased, SbxArray& rPar ) { nWait = rPar.Get(1)->GetLong(); } + if( nWait < 0 ) - { - StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); - return; - } + return StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); Timer aTimer("basic Wait_Impl"); aTimer.SetTimeout( nWait ); @@ -602,14 +557,10 @@ void SbRtl_DoEvents(StarBASIC *, SbxArray & rPar, bool) void SbRtl_GetGUIVersion(StarBASIC *, SbxArray & rPar, bool) { if (rPar.Count() != 1) - { - StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); - } - else - { - // Removed for SRC595 - rPar.Get(0)->PutLong(-1); - } + return StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); + + // Removed for SRC595 + rPar.Get(0)->PutLong(-1); } void SbRtl_Choose(StarBASIC *, SbxArray & rPar, bool) @@ -809,10 +760,8 @@ void SbRtl_DimArray(StarBASIC *, SbxArray & rPar, bool) void SbRtl_FindObject(StarBASIC *, SbxArray & rPar, bool) { if (rPar.Count() < 2) - { - StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); - return; - } + return StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); + OUString aNameStr = rPar.Get(1)->GetOUString(); @@ -832,10 +781,8 @@ void SbRtl_FindObject(StarBASIC *, SbxArray & rPar, bool) void SbRtl_FindPropertyObject(StarBASIC *, SbxArray & rPar, bool) { if (rPar.Count() < 3) - { - StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); - return; - } + return StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); + SbxBase* pObjVar = rPar.Get(1)->GetObject(); SbxObject* pObj = nullptr; @@ -1107,10 +1054,8 @@ static bool lcl_WriteReadSbxArray( SbxDimArray& rArr, SvStream* pStrm, static void PutGet( SbxArray& rPar, bool bPut ) { if (rPar.Count() != 4) - { - StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); - return; - } + return StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); + sal_Int16 nFileNo = rPar.Get(1)->GetInteger(); SbxVariable* pVar2 = rPar.Get(2); SbxDataType eType2 = pVar2->GetType(); @@ -1126,10 +1071,7 @@ static void PutGet( SbxArray& rPar, bool bPut ) SbiStream* pSbStrm = pIO->GetStream( nFileNo ); if ( !pSbStrm || !(pSbStrm->GetMode() & (SbiStreamFlags::Binary | SbiStreamFlags::Random)) ) - { - StarBASIC::Error( ERRCODE_BASIC_BAD_CHANNEL ); - return; - } + return StarBASIC::Error( ERRCODE_BASIC_BAD_CHANNEL ); SvStream* pStrm = pSbStrm->GetStrm(); bool bRandom = pSbStrm->IsRandom(); @@ -1192,10 +1134,8 @@ void SbRtl_Get(StarBASIC *, SbxArray & rPar, bool) void SbRtl_Environ(StarBASIC *, SbxArray & rPar, bool) { if (rPar.Count() != 2) - { - StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); - return; - } + return StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); + OUString aResult; // should be ANSI but that's not possible under Win16 in the DLL OString aByteStr(OUStringToOString(rPar.Get(1)->GetOUString(), @@ -1241,20 +1181,15 @@ static double GetDialogZoomFactor( bool bX, tools::Long nValue ) void SbRtl_GetDialogZoomFactorX(StarBASIC *, SbxArray & rPar, bool) { if (rPar.Count() != 2) - { - StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); - return; - } + return StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); rPar.Get(0)->PutDouble(GetDialogZoomFactor(true, rPar.Get(1)->GetLong())); } void SbRtl_GetDialogZoomFactorY(StarBASIC *, SbxArray & rPar, bool) { if (rPar.Count() != 2) - { - StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); - return; - } + return StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); + rPar.Get(0)->PutDouble(GetDialogZoomFactor(false, rPar.Get(1)->GetLong())); } @@ -1271,109 +1206,97 @@ void SbRtl_EnableReschedule(StarBASIC *, SbxArray & rPar, bool) void SbRtl_GetSystemTicks(StarBASIC *, SbxArray & rPar, bool) { if (rPar.Count() != 1) - { - StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); - return; - } + return StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); + rPar.Get(0)->PutLong(tools::Time::GetSystemTicks()); } void SbRtl_GetPathSeparator(StarBASIC *, SbxArray & rPar, bool) { if (rPar.Count() != 1) - { - StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); - return; - } + return StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); + rPar.Get(0)->PutString(OUString(SAL_PATHDELIMITER)); } void SbRtl_ResolvePath(StarBASIC *, SbxArray & rPar, bool) { - if (rPar.Count() == 2) - { - OUString aStr = rPar.Get(1)->GetOUString(); - rPar.Get(0)->PutString(aStr); - } - else - { - StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); - } + if (rPar.Count() != 2) + return StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); + + OUString aStr = rPar.Get(1)->GetOUString(); + rPar.Get(0)->PutString(aStr); } void SbRtl_TypeLen(StarBASIC *, SbxArray & rPar, bool) { if (rPar.Count() != 2) - { - StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); - } - else - { - SbxDataType eType = rPar.Get(1)->GetType(); - sal_Int16 nLen = 0; - switch( eType ) - { - case SbxEMPTY: - case SbxNULL: - case SbxVECTOR: - case SbxARRAY: - case SbxBYREF: - case SbxVOID: - case SbxHRESULT: - case SbxPOINTER: - case SbxDIMARRAY: - case SbxCARRAY: - case SbxUSERDEF: - nLen = 0; - break; + return StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); - case SbxINTEGER: - case SbxERROR: - case SbxUSHORT: - case SbxINT: - case SbxUINT: - nLen = 2; - break; + SbxDataType eType = rPar.Get(1)->GetType(); + sal_Int16 nLen = 0; + switch( eType ) + { + case SbxEMPTY: + case SbxNULL: + case SbxVECTOR: + case SbxARRAY: + case SbxBYREF: + case SbxVOID: + case SbxHRESULT: + case SbxPOINTER: + case SbxDIMARRAY: + case SbxCARRAY: + case SbxUSERDEF: + nLen = 0; + break; - case SbxLONG: - case SbxSINGLE: - case SbxULONG: - nLen = 4; - break; + case SbxINTEGER: + case SbxERROR: + case SbxUSHORT: + case SbxINT: + case SbxUINT: + nLen = 2; + break; - case SbxDOUBLE: - case SbxCURRENCY: - case SbxDATE: - case SbxSALINT64: - case SbxSALUINT64: - nLen = 8; - break; + case SbxLONG: + case SbxSINGLE: + case SbxULONG: + nLen = 4; + break; - case SbxOBJECT: - case SbxVARIANT: - case SbxDATAOBJECT: - nLen = 0; - break; + case SbxDOUBLE: + case SbxCURRENCY: + case SbxDATE: + case SbxSALINT64: + case SbxSALUINT64: + nLen = 8; + break; - case SbxCHAR: - case SbxBYTE: - case SbxBOOL: - nLen = 1; - break; + case SbxOBJECT: + case SbxVARIANT: + case SbxDATAOBJECT: + nLen = 0; + break; - case SbxLPSTR: - case SbxLPWSTR: - case SbxCoreSTRING: - case SbxSTRING: - nLen = static_cast<sal_Int16>(rPar.Get(1)->GetOUString().getLength()); + case SbxCHAR: + case SbxBYTE: + case SbxBOOL: + nLen = 1; break; - default: - nLen = 0; - break; - } - rPar.Get(0)->PutInteger(nLen); + case SbxLPSTR: + case SbxLPWSTR: + case SbxCoreSTRING: + case SbxSTRING: + nLen = static_cast<sal_Int16>(rPar.Get(1)->GetOUString().getLength()); + break; + + default: + nLen = 0; + break; } + rPar.Get(0)->PutInteger(nLen); } @@ -1454,44 +1377,37 @@ void SbRtl_GlobalScope(StarBASIC * pBasic, SbxArray & rPar, bool) // Helper functions to convert Url from/to system paths void SbRtl_ConvertToUrl(StarBASIC *, SbxArray & rPar, bool) { - if (rPar.Count() == 2) + if (rPar.Count() != 2) + return StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); + + OUString aStr = rPar.Get(1)->GetOUString(); + INetURLObject aURLObj( aStr, INetProtocol::File ); + OUString aFileURL = aURLObj.GetMainURL( INetURLObject::DecodeMechanism::NONE ); + if( aFileURL.isEmpty() ) { - OUString aStr = rPar.Get(1)->GetOUString(); - INetURLObject aURLObj( aStr, INetProtocol::File ); - OUString aFileURL = aURLObj.GetMainURL( INetURLObject::DecodeMechanism::NONE ); - if( aFileURL.isEmpty() ) - { - osl::File::getFileURLFromSystemPath(aStr, aFileURL); - } - if( aFileURL.isEmpty() ) - { - aFileURL = aStr; - } - rPar.Get(0)->PutString(aFileURL); + osl::File::getFileURLFromSystemPath(aStr, aFileURL); } - else + if( aFileURL.isEmpty() ) { - StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); + aFileURL = aStr; } + rPar.Get(0)->PutString(aFileURL); + } void SbRtl_ConvertFromUrl(StarBASIC *, SbxArray & rPar, bool) { - if (rPar.Count() == 2) - { - OUString aStr = rPar.Get(1)->GetOUString(); - OUString aSysPath; - ::osl::File::getSystemPathFromFileURL( aStr, aSysPath ); - if( aSysPath.isEmpty() ) - { - aSysPath = aStr; - } - rPar.Get(0)->PutString(aSysPath); - } - else + if (rPar.Count() != 2) + return StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); + + OUString aStr = rPar.Get(1)->GetOUString(); + OUString aSysPath; + ::osl::File::getSystemPathFromFileURL( aStr, aSysPath ); + if( aSysPath.isEmpty() ) { - StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); + aSysPath = aStr; } + rPar.Get(0)->PutString(aSysPath); } @@ -1505,47 +1421,40 @@ void SbRtl_Join(StarBASIC *, SbxArray & rPar, bool) { sal_uInt32 nParCount = rPar.Count(); if ( nParCount != 3 && nParCount != 2 ) - { - StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); - return; - } + return StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT ); + SbxBase* pParObj = rPar.Get(1)->GetObject(); SbxDimArray* pArr = dynamic_cast<SbxDimArray*>( pParObj ); - if( pArr ) + if( !pArr ) + return StarBASIC::Error( ERRCODE_BASIC_MUST_HAVE_DIMS ); + + if (pArr->GetDims() != 1) + return StarBASIC::Error( ERRCODE_BASIC_WRONG_DIMS ); // Syntax Error?! + + OUString aDelim; + if( nParCount == 3 ) { - if (pArr->GetDims() != 1) - { - StarBASIC::Error( ERRCODE_BASIC_WRONG_DIMS ); // Syntax Error?! - return; - } - OUString aDelim; - if( nParCount == 3 ) - { - aDelim = rPar.Get(2)->GetOUString(); - } - else - { - aDelim = " "; - } - OUStringBuffer aRetStr(32); - sal_Int32 nLower, nUpper; - pArr->GetDim(1, nLower, nUpper); - sal_Int32 aIdx[1]; - for (aIdx[0] = nLower; aIdx[0] <= nUpper; ++aIdx[0]) - { - OUString aStr = pArr->Get(aIdx)->GetOUString(); - aRetStr.append(aStr); - if (aIdx[0] != nUpper) - { - aRetStr.append(aDelim); - } - } - rPar.Get(0)->PutString(aRetStr.makeStringAndClear()); + aDelim = rPar.Get(2)->GetOUString(); } else { - StarBASIC::Error( ERRCODE_BASIC_MUST_HAVE_DIMS ); + aDelim = " "; } + OUStringBuffer aRetStr(32); + sal_Int32 nLower, nUpper; + pArr->GetDim(1, nLower, nUpper); + sal_Int32 aIdx[1]; + for (aIdx[0] = nLower; aIdx[0] <= nUpper; ++aIdx[0]) + { + OUString aStr = pArr->Get(aIdx)->GetOUString(); + aRetStr.append(aStr); + if (aIdx[0] != nUpper) + { + aRetStr.append(aDelim); + } + } + rPar.Get(0)->PutString(aRetStr.makeStringAndClear()); + } @@ -1805,13 +1714,13 @@ static IntervalInfo const * getIntervalInfo( const OUString& rStringCode ) { INTERVAL_N, "n", 1.0 / 1440.0, true }, // Minute { INTERVAL_S, "s", 1.0 / 86400.0, true } // Second }; - for( std::size_t i = 0; i != SAL_N_ELEMENTS(aIntervalTable); ++i ) - { - if( rStringCode.equalsIgnoreAsciiCaseAscii( - aIntervalTable[i].mStringCode ) ) - { - return &aIntervalTable[i]; - } + auto const pred = [&rStringCode](const IntervalInfo &aInterval) { + return rStringCode.equalsIgnoreAsciiCaseAscii(aInterval.mStringCode); + }; + + auto intervalIter = std::find_if(std::begin(aIntervalTable), std::end(aIntervalTable), pred); + if(intervalIter != std::end(aIntervalTable)) { + return intervalIter; } return nullptr; } @@ -2444,10 +2353,10 @@ void SbRtl_SYD(StarBASIC *, SbxArray & rPar, bool) Sequence< Any > aParams { - makeAny(rPar.Get(1)->GetDouble()), - makeAny(rPar.Get(2)->GetDouble()), - makeAny(rPar.Get(3)->GetDouble()), - makeAny(rPar.Get(4)->GetDouble()) + Any(rPar.Get(1)->GetDouble()), + Any(rPar.Get(2)->GetDouble()), + Any(rPar.Get(3)->GetDouble()), + Any(rPar.Get(4)->GetDouble()) }; CallFunctionAccessFunction(aParams, "SYD", rPar.Get(0)); @@ -2467,9 +2376,9 @@ void SbRtl_SLN(StarBASIC *, SbxArray & rPar, bool) Sequence< Any > aParams { - makeAny(rPar.Get(1)->GetDouble()), - makeAny(rPar.Get(2)->GetDouble()), - makeAny(rPar.Get(3)->GetDouble()) + Any(rPar.Get(1)->GetDouble()), + Any(rPar.Get(2)->GetDouble()), + Any(rPar.Get(3)->GetDouble()) }; CallFunctionAccessFunction(aParams, "SLN", rPar.Get(0)); @@ -2509,11 +2418,11 @@ void SbRtl_Pmt(StarBASIC *, SbxArray & rPar, bool) Sequence< Any > aParams { - makeAny(rate), - makeAny(nper), - makeAny(pmt), - makeAny(fv), - makeAny(type) + Any(rate), + Any(nper), + Any(pmt), + Any(fv), + Any(type) }; CallFunctionAccessFunction(aParams, "Pmt", rPar.Get(0)); @@ -2554,12 +2463,12 @@ void SbRtl_PPmt(StarBASIC *, SbxArray & rPar, bool) Sequence< Any > aParams { - makeAny(rate), - makeAny(per), - makeAny(nper), - makeAny(pv), - makeAny(fv), - makeAny(type) + Any(rate), + Any(per), + Any(nper), + Any(pv), + Any(fv), + Any(type) }; CallFunctionAccessFunction(aParams, "PPmt", rPar.Get(0)); @@ -2599,11 +2508,11 @@ void SbRtl_PV(StarBASIC *, SbxArray & rPar, bool) Sequence< Any > aParams { - makeAny(rate), - makeAny(nper), - makeAny(pmt), - makeAny(fv), - makeAny(type) + Any(rate), + Any(nper), + Any(pmt), + Any(fv), + Any(type) }; CallFunctionAccessFunction(aParams, "PV", rPar.Get(0)); @@ -2629,7 +2538,7 @@ void SbRtl_NPV(StarBASIC *, SbxArray & rPar, bool) Sequence< Any > aParams { - makeAny(rPar.Get(1)->GetDouble()), + Any(rPar.Get(1)->GetDouble()), aValues }; @@ -2670,11 +2579,11 @@ void SbRtl_NPer(StarBASIC *, SbxArray & rPar, bool) Sequence< Any > aParams { - makeAny(rate), - makeAny(pmt), - makeAny(pv), - makeAny(fv), - makeAny(type) + Any(rate), + Any(pmt), + Any(pv), + Any(fv), + Any(type) }; CallFunctionAccessFunction(aParams, "NPer", rPar.Get(0)); @@ -2703,8 +2612,8 @@ void SbRtl_MIRR(StarBASIC *, SbxArray & rPar, bool) Sequence< Any > aParams { aValues, - makeAny(rPar.Get(2)->GetDouble()), - makeAny(rPar.Get(3)->GetDouble()) + Any(rPar.Get(2)->GetDouble()), + Any(rPar.Get(3)->GetDouble()) }; CallFunctionAccessFunction(aParams, "MIRR", rPar.Get(0)); @@ -2740,7 +2649,7 @@ void SbRtl_IRR(StarBASIC *, SbxArray & rPar, bool) Sequence< Any > aParams { aValues, - makeAny(guess) + Any(guess) }; CallFunctionAccessFunction(aParams, "IRR", rPar.Get(0)); @@ -2781,12 +2690,12 @@ void SbRtl_IPmt(StarBASIC *, SbxArray & rPar, bool) Sequence< Any > aParams { - makeAny(rate), - makeAny(per), - makeAny(nper), - makeAny(pv), - makeAny(fv), - makeAny(type) + Any(rate), + Any(per), + Any(nper), + Any(pv), + Any(fv), + Any(type) }; CallFunctionAccessFunction(aParams, "IPmt", rPar.Get(0)); @@ -2826,11 +2735,11 @@ void SbRtl_FV(StarBASIC *, SbxArray & rPar, bool) Sequence< Any > aParams { - makeAny(rate), - makeAny(nper), - makeAny(pmt), - makeAny(pv), - makeAny(type) + Any(rate), + Any(nper), + Any(pmt), + Any(pv), + Any(type) }; CallFunctionAccessFunction(aParams, "FV", rPar.Get(0)); @@ -2864,11 +2773,11 @@ void SbRtl_DDB(StarBASIC *, SbxArray & rPar, bool) Sequence< Any > aParams { - makeAny(cost), - makeAny(salvage), - makeAny(life), - makeAny(period), - makeAny(factor) + Any(cost), + Any(salvage), + Any(life), + Any(period), + Any(factor) }; CallFunctionAccessFunction(aParams, "DDB", rPar.Get(0)); @@ -2921,12 +2830,12 @@ void SbRtl_Rate(StarBASIC *, SbxArray & rPar, bool) Sequence< Any > aParams { - makeAny(nper), - makeAny(pmt), - makeAny(pv), - makeAny(fv), - makeAny(type), - makeAny(guess) + Any(nper), + Any(pmt), + Any(pv), + Any(fv), + Any(type), + Any(guess) }; CallFunctionAccessFunction(aParams, "Rate", rPar.Get(0)); @@ -3022,11 +2931,17 @@ void SbRtl_Me(StarBASIC *, SbxArray & rPar, bool) #endif +bool LibreOffice6FloatingPointMode() +{ + static bool bMode = std::getenv("LIBREOFFICE6FLOATINGPOINTMODE") != nullptr; + + return bMode || officecfg::Office::Scripting::Basic::Compatibility::UseLibreOffice6FloatingPointConversion::get(); +} + sal_Int16 implGetWeekDay( double aDate, bool bFirstDayParam, sal_Int16 nFirstDay ) { - Date aRefDate( 1,1,1900 ); + Date aRefDate(1899'12'30); sal_Int32 nDays = static_cast<sal_Int32>(aDate); - nDays -= 2; // normalize: 1.1.1900 => 0 aRefDate.AddDays( nDays); DayOfWeek aDay = aRefDate.GetDayOfWeek(); sal_Int16 nDay; |