Name

Pointer writing (Scilab gateway) — How to write pointer in a gateway.

Calling Sequence

Create from existing data.

Input argument profile:

SciErr getPointer(void* _pvCtx, int* _piAddress, void** _pvPtr)

Named variable profile:

SciErr createNamedPointer(void* _pvCtx, char* _pstName, void** _pvPtr)

Parameters

_pvCtx

Scilab environment pointer, pass in "pvApiCtx" provided by api_scilab.h

_piAddress

Address of the Scilab variable.

_pvPtr

Address of pointer.

SciErr

Error structure where is stored errors messages history and first error number.

Calling Sequence

Write directly in Scilab memory.
SciErr allocPointer(void* _pvCtx, int _iVar, void** _pvPtr)

Parameters

_pvCtx

Scilab environment pointer, pass in "pvApiCtx" provided by api_scilab.h.

_piAddress

Address of the Scilab variable.

_pvPtr

Return address of pointer.

SciErr

Error structure where is stored errors messages history and first error number.

Description

This help describes how pointer can be handled through the Scilab API.

Two types of functions can be used to write in the memory of Scilab.

Gateway Source

			 
int read_pointer(char *fname,unsigned long fname_len)
{
	SciErr sciErr;
	CheckRhs(0,1);
	CheckLhs(1,1);

	if(Rhs == 0)
	{//create mode
		double* pdblData	= (double*)malloc(sizeof(double) * 2 * 2);
		pdblData[0]			= 1;
		pdblData[1]			= 3;
		pdblData[2]			= 2;
		pdblData[3]			= 4;

		sciErr = createPointer(pvApiCtx, Rhs + 1, (void*)pdblData);
	}
	else if(Rhs == 1)
	{//read mode
		int iType			= 0;
		int* piAddr			= NULL;
		void* pvPtr			= NULL;
		double* pdblData	= NULL;

		sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr);
		if(sciErr.iErr)
		{
			printError(&sciErr, 0);
			return 0;
		}

		sciErr = getPointer(pvApiCtx, piAddr, &pvPtr);
		if(sciErr.iErr)
		{
			printError(&sciErr, 0);
			return 0;
		}

		pdblData = (double*)pvPtr;

		sciErr = createMatrixOfDouble(pvApiCtx, Rhs + 1, 2, 2, pdblData);
	}
	else
	{
		return 0;
	}

	if(sciErr.iErr)
	{
		printError(&sciErr, 0);
		return 0;
	}

	LhsVar(1) = Rhs + 1;
	return 0;
}
 
		

Scilab test script

			 
b_ref = [1,2;3,4];
a = read_pointer();
b = read_pointer(a);
if or(b <> b_ref) then error("failed"), end