summaryrefslogtreecommitdiff
path: root/basic/source/runtime/methods1.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'basic/source/runtime/methods1.cxx')
-rw-r--r--basic/source/runtime/methods1.cxx619
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;