Double use case.
This example shows how to get a double variable and return it to Scilab.
#include "api_scilab.h"
int doubleExample(char *fname,unsigned long fname_len)
{
SciErr sciErr;
int* piAddr = NULL;
int iType = 0;
int iRet = 0;
CheckInputArgument(pvApiCtx, 1, 1);
CheckOutputArgument(pvApiCtx, 0, 1);
sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr);
if(sciErr.iErr)
{
printError(&sciErr, 0);
return 0;
}
if(isEmptyMatrix(pvApiCtx, piAddr))
{
iRet = createEmptyMatrix(pvApiCtx, nbInputArgument + 1);
if(iRet)
{
return iRet;
}
AssignOutputVariable(1) = 0;
}
else if(isDoubleType(pvApiCtx, piAddr))
{
if(isScalar(pvApiCtx, piAddr))
{
double dblReal = 0;
double dblImg = 0;
if(isVarComplex(pvApiCtx, piAddr))
{
iRet = getScalarComplexDouble(pvApiCtx, piAddr, &dblReal, &dblImg);
if(iRet)
{
return iRet;
}
iRet = createScalarComplexDouble(pvApiCtx, nbInputArgument + 1, dblReal, dblImg);
if(iRet)
{
return iRet;
}
}
else
{
iRet = getScalarDouble(pvApiCtx, piAddr, &dblReal);
if(iRet)
{
return iRet;
}
iRet = createScalarDouble(pvApiCtx, nbInputArgument + 1, dblReal);
if(iRet)
{
return iRet;
}
}
}
else
{
int iRows = 0;
int iCols = 0;
double* pdblReal = NULL;
double* pdblImg = NULL;
if(isVarComplex(pvApiCtx, piAddr))
{
sciErr = getComplexMatrixOfDouble(pvApiCtx, piAddr, &iRows, &iCols, &pdblReal, &pdblImg);
if(sciErr.iErr)
{
printError(&sciErr, 0);
return sciErr.iErr;
}
sciErr = createComplexMatrixOfDouble(pvApiCtx, nbInputArgument + 1, iRows, iCols, pdblReal, pdblImg);
if(sciErr.iErr)
{
printError(&sciErr, 0);
return sciErr.iErr;
}
}
else
{
sciErr = getMatrixOfDouble(pvApiCtx, piAddr, &iRows, &iCols, &pdblReal);
if(sciErr.iErr)
{
printError(&sciErr, 0);
return sciErr.iErr;
}
sciErr = createMatrixOfDouble(pvApiCtx, nbInputArgument + 1, iRows, iCols, pdblReal);
if(sciErr.iErr)
{
printError(&sciErr, 0);
return sciErr.iErr;
}
}
}
AssignOutputVariable(1) = nbInputArgument + 1;
}
return 0;
}
a = 1;
b = %i;
c = [1,2,3;4,5,6];
d = c(1:$) + c($:-1:1) * %i;
doubleExample(a) == a
doubleExample(b) == b
doubleExample(c) == c
doubleExample(d) == d