# String writing (Scilab gateway)

How to write matrices of string in a gateway.

## Calling Sequence

Input argument profile:

    SciErr createMatrixOfString(void* _pvCtx, int _iVar, int _iRows, int _iCols, const char* const* _pstStrings)

    SciErr createMatrixOfWideString(void* _pvCtx, int _iVar, int _iRows, int _iCols, const wchar_t* const* _pwstStrings)

Named variable profile:

    SciErr createNamedMatrixOfString(void* _pvCtx, const char* _pstName, int _iRows, int _iCols, const char* const* _pstStrings)

    SciErr createNamedMatrixOfWideString(void* _pvCtx, const char* _pstName, int _iRows, int _iCols, const wchar_t* const* _pwstStrings)

## Arguments

_pvCtx

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

_iVar

  Position in the Scilab memory where you want to put the variable

_pstName

  Name of the variable for "named" functions.

_iRows

  Number of rows of the new variable

_iCols

  Numbers of columns of the new variable

_pstStrings

  Address of array of char* (size: _iCols * _iRows)

SciErr

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

## Description

This help describes how matrix of strings can be handled through the Scilab API.

## Gateway Source

    #include "api_scilab.h"
    int write_string(char *fname,unsigned long fname_len)
    {
    	SciErr sciErr;
    	//variable info : matrix of string 2 x 3
    	int iRows		= 2;
    	int iCols		= 3;
    	char** pstData	= NULL;
    	//data to put in the new variable
    	char string11[]	= "may";
    	char string21[]	= "be";
    	char string12[]	= "the";
    	char string22[]	= "with";
    	char string13[]	= "puffin";
    	char string23[]	= "you";
    	//alloc new array
    	pstData			= (char**)malloc(sizeof(char*) * iRows * iCols);
    	//copy data address to the "main" array
    	pstData[0]		= string11;
    	pstData[1]		= string21;
    	pstData[2]		= string12;
    	pstData[3]		= string22;
    	pstData[4]		= string13;
    	pstData[5]		= string23;

    	//create the variable
    	sciErr = createMatrixOfString(pvApiCtx, nbInputArgument(pvApiCtx) + 1, iRows, iCols, pstData);
    	if(sciErr.iErr)
    	{
    		printError(&sciErr, 0);
    		return 0;
    	}

    	//free container
    	free(pstData);
    	//assign allocated variables to Lhs position
        AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;
    	return 0;
    }

## Scilab test script

    a_ref = "may the puffin be with you ";
    b = [];
    a = write_string();
    for i=1:size(a,"r")
        for j=1:size(a,"c")
            b = b + a(i,j);
            b = b + " ";
        end
    end
    if b <> a_ref then error("failed"), end