tdf147132 basic : flaten some functions
Change-Id: I462cbac4183f304e9f4b296a6361a05a4615c7eb
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137650
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
diff --git a/basic/source/runtime/methods1.cxx b/basic/source/runtime/methods1.cxx
index f0c26ae..9e5356a 100644
--- a/basic/source/runtime/methods1.cxx
+++ b/basic/source/runtime/methods1.cxx
@@ -338,15 +338,11 @@ void SbRtl_CInt(StarBASIC *, SbxArray & rPar, bool) // JSM
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);
}
@@ -382,16 +378,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);
}
@@ -412,98 +403,76 @@ 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)
@@ -527,7 +496,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) )
@@ -547,10 +516,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 )
{
@@ -563,11 +530,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 );
@@ -604,14 +569,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)
@@ -811,10 +772,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();
@@ -834,10 +793,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;
@@ -1109,10 +1066,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();
@@ -1128,10 +1083,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();
@@ -1194,10 +1146,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(),
@@ -1243,20 +1193,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()));
}
@@ -1273,109 +1218,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)
return StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT );
SbxDataType eType = rPar.Get(1)->GetType();
sal_Int16 nLen = 0;
switch( eType )
{
StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT );
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 SbxINTEGER:
case SbxERROR:
case SbxUSHORT:
case SbxINT:
case SbxUINT:
nLen = 2;
break;
case SbxLONG:
case SbxSINGLE:
case SbxULONG:
nLen = 4;
break;
case SbxDOUBLE:
case SbxCURRENCY:
case SbxDATE:
case SbxSALINT64:
case SbxSALUINT64:
nLen = 8;
break;
case SbxOBJECT:
case SbxVARIANT:
case SbxDATAOBJECT:
nLen = 0;
break;
case SbxCHAR:
case SbxBYTE:
case SbxBOOL:
nLen = 1;
break;
case SbxLPSTR:
case SbxLPWSTR:
case SbxCoreSTRING:
case SbxSTRING:
nLen = static_cast<sal_Int16>(rPar.Get(1)->GetOUString().getLength());
break;
default:
nLen = 0;
break;
}
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;
case SbxINTEGER:
case SbxERROR:
case SbxUSHORT:
case SbxINT:
case SbxUINT:
nLen = 2;
break;
case SbxLONG:
case SbxSINGLE:
case SbxULONG:
nLen = 4;
break;
case SbxDOUBLE:
case SbxCURRENCY:
case SbxDATE:
case SbxSALINT64:
case SbxSALUINT64:
nLen = 8;
break;
case SbxOBJECT:
case SbxVARIANT:
case SbxDATAOBJECT:
nLen = 0;
break;
case SbxCHAR:
case SbxBYTE:
case SbxBOOL:
nLen = 1;
break;
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);
}
rPar.Get(0)->PutInteger(nLen);
}
@@ -1456,43 +1389,35 @@ 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)
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() )
{
OUString aStr = rPar.Get(1)->GetOUString();
OUString aSysPath;
::osl::File::getSystemPathFromFileURL( aStr, aSysPath );
if( aSysPath.isEmpty() )
{
aSysPath = aStr;
}
rPar.Get(0)->PutString(aSysPath);
}
else
{
StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT );
aSysPath = aStr;
}
}
@@ -1507,47 +1432,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());
}