blob: 5edbf5b7630b1c4eba08ee08c94d6da521dae5c6 [file] [log] [blame]
/*
* C-type: char or char*
* Scilab type: string
*/
/*
* CHAR
*/
%fragment(SWIG_AsVal_frag(char), "header", fragment="SWIG_SciString_AsChar") {
#define SWIG_AsVal_char(scilabValue, valuePointer) SWIG_SciString_AsChar(pvApiCtx, scilabValue, valuePointer, SWIG_Scilab_GetFuncName())
}
%fragment("SWIG_SciString_AsChar", "header") {
SWIGINTERN int
SWIG_SciString_AsChar(void *pvApiCtx, int iVar, char *pcValue, char *fname) {
SciErr sciErr;
int *piAddrVar = NULL;
char *pstValue = NULL;
int iRet;
sciErr = getVarAddressFromPosition(pvApiCtx, iVar, &piAddrVar);
if (sciErr.iErr) {
printError(&sciErr, 0);
return SWIG_ERROR;
}
if (isStringType(pvApiCtx, piAddrVar) == 0)
{
Scierror(SCILAB_API_ARGUMENT_ERROR, _("%s: Wrong type for input argument #%d: A single string expected.\n"), fname, iVar);
return SWIG_TypeError;
}
iRet = getAllocatedSingleString(pvApiCtx, piAddrVar, &pstValue);
if (iRet) {
return SWIG_ERROR;
}
if (pcValue != NULL) {
*pcValue = pstValue[0];
}
freeAllocatedSingleString(pstValue);
return SWIG_OK;
}
}
%fragment(SWIG_From_frag(char), "header", fragment="SWIG_SciString_FromChar") {
#define SWIG_From_char(value) SWIG_SciString_FromChar(pvApiCtx, SWIG_Scilab_GetOutputPosition(), value)
}
%fragment("SWIG_SciString_FromChar", "header") {
SWIGINTERN int
SWIG_SciString_FromChar(void *pvApiCtx, int iVarOut, char chValue) {
char *pchValue = (char*)malloc(sizeof(char) * 2);
pchValue[0] = chValue;
pchValue[1] = '\0';
if (createSingleString(pvApiCtx, SWIG_NbInputArgument(pvApiCtx) + iVarOut, pchValue))
return SWIG_ERROR;
free(pchValue);
return SWIG_OK;
}
}
/*
* CHAR *
*/
%fragment("SWIG_AsCharArray", "header", fragment = "SWIG_SciString_AsCharPtr") {
#define SWIG_AsCharArray(scilabValue, charPtrPointer, charPtrLength) SWIG_SciString_AsCharPtr(pvApiCtx, scilabValue, charPtrPointer, charPtrLength, SWIG_Scilab_GetFuncName())
}
%fragment("SWIG_SciString_AsCharPtr", "header") {
SWIGINTERN int
SWIG_SciString_AsCharPtr(void *pvApiCtx, int iVar, char *pcValue, int iLength, char *fname) {
SciErr sciErr;
int *piAddrVar = NULL;
char* pcTmpValue = NULL;
int iRet;
sciErr = getVarAddressFromPosition(pvApiCtx, iVar, &piAddrVar);
if (sciErr.iErr) {
printError(&sciErr, 0);
return SWIG_ERROR;
}
iRet = getAllocatedSingleString(pvApiCtx, piAddrVar, &pcTmpValue);
if (iRet) {
return SWIG_ERROR;
}
if (pcValue != NULL) {
strncpy(pcValue, pcTmpValue, iLength);
}
freeAllocatedSingleString(pcTmpValue);
return SWIG_OK;
}
}
%fragment("SWIG_AsCharPtrAndSize", "header", fragment = "SWIG_SciString_AsCharPtrAndSize") {
#define SWIG_AsCharPtrAndSize(scilabValue, charPtrPointer, charPtrLength, allocMemory) SWIG_SciString_AsCharPtrAndSize(pvApiCtx, scilabValue, charPtrPointer, charPtrLength, allocMemory, SWIG_Scilab_GetFuncName())
}
%fragment("SWIG_SciString_AsCharPtrAndSize", "header") {
SWIGINTERN int
SWIG_SciString_AsCharPtrAndSize(void *pvApiCtx, int iVar, char **pcValue, size_t *piLength, int *alloc, char *fname) {
SciErr sciErr;
int *piAddrVar = NULL;
char *pstString = NULL;
int iRows = 0;
int iCols = 0;
int iLen = 0;
sciErr = getVarAddressFromPosition(pvApiCtx, iVar, &piAddrVar);
if (sciErr.iErr) {
printError(&sciErr, 0);
return SWIG_ERROR;
}
if (isScalar(pvApiCtx, piAddrVar) == 0 || isStringType(pvApiCtx, piAddrVar) == 0)
{
Scierror(SCILAB_API_ARGUMENT_ERROR, _("%s: Wrong type for input argument #%d: A single string expected.\n"), fname, iVar);
return SWIG_TypeError;
}
sciErr = getMatrixOfString(pvApiCtx, piAddrVar, &iRows, &iCols, &iLen, NULL);
if (sciErr.iErr)
{
printError(&sciErr, 0);
return SWIG_ERROR;
}
pstString = %new_array(iLen + 1, char);
sciErr = getMatrixOfString(pvApiCtx, piAddrVar, &iRows, &iCols, &iLen, &pstString);
if (sciErr.iErr)
{
printError(&sciErr, 0);
return SWIG_ERROR;
}
// TODO: return SWIG_ERROR if pcValue NULL (now returning SWIG_ERROR fails some typechecks)
if (pcValue) {
*pcValue = pstString;
}
if (alloc != NULL) {
*alloc = SWIG_NEWOBJ;
}
if (piLength != NULL) {
*piLength = strlen(pstString);
}
return SWIG_OK;
}
}
%fragment("SWIG_FromCharPtr", "header", fragment = "SWIG_SciString_FromCharPtr") {
#define SWIG_FromCharPtr(charPtr) SWIG_SciString_FromCharPtr(pvApiCtx, SWIG_Scilab_GetOutputPosition(), charPtr)
}
%fragment("SWIG_SciString_FromCharPtr", "header") {
SWIGINTERN int
SWIG_SciString_FromCharPtr(void *pvApiCtx, int iVarOut, const char *pchValue) {
if (pchValue) {
SciErr sciErr;
const char* pstStrings[1];
pstStrings[0] = pchValue;
sciErr = createMatrixOfString(pvApiCtx, SWIG_NbInputArgument(pvApiCtx) + iVarOut, 1, 1, pstStrings);
if (sciErr.iErr) {
printError(&sciErr, 0);
return SWIG_ERROR;
}
}
else {
int iRet = createEmptyMatrix(pvApiCtx, SWIG_NbInputArgument(pvApiCtx) + iVarOut);
if (iRet) {
return SWIG_ERROR;
}
}
return SWIG_OK;
}
}
/*
* CHAR * ARRAY
*/
%fragment("SWIG_SciString_AsCharPtrArrayAndSize", "header") {
SWIGINTERN int
SWIG_SciString_AsCharPtrArrayAndSize(void *pvApiCtx, int iVar, int *iRows, int *iCols, char ***charPtrArray, char *fname) {
SciErr sciErr;
int i = 0;
int *piAddrVar = NULL;
int* piLength = NULL;
sciErr = getVarAddressFromPosition(pvApiCtx, iVar, &piAddrVar);
if (sciErr.iErr) {
printError(&sciErr, 0);
return SWIG_ERROR;
}
sciErr = getMatrixOfString(pvApiCtx, piAddrVar, iRows, iCols, NULL, NULL);
if (sciErr.iErr) {
printError(&sciErr, 0);
return SWIG_ERROR;
}
piLength = (int*) malloc((*iRows) * (*iCols) * sizeof(int));
sciErr = getMatrixOfString(pvApiCtx, piAddrVar, iRows, iCols, piLength, NULL);
if (sciErr.iErr) {
printError(&sciErr, 0);
return SWIG_ERROR;
}
*charPtrArray = (char**) malloc((*iRows) * (*iCols) * sizeof(char*));
for(i = 0 ; i < (*iRows) * (*iCols); i++) {
(*charPtrArray)[i] = (char*) malloc(sizeof(char) * (piLength[i] + 1));
}
sciErr = getMatrixOfString(pvApiCtx, piAddrVar, iRows, iCols, piLength, *charPtrArray);
if (sciErr.iErr) {
printError(&sciErr, 0);
return SWIG_ERROR;
}
free(piLength);
return SWIG_OK;
}
}
%fragment("SWIG_SciString_FromCharPtrArrayAndSize", "header") {
SWIGINTERN int
SWIG_SciString_FromCharPtrArrayAndSize(void *pvApiCtx, int iVarOut, int iRows, int iCols, char **charPtrArray) {
SciErr sciErr;
sciErr = createMatrixOfString(pvApiCtx, SWIG_NbInputArgument(pvApiCtx) + iVarOut, iRows, iCols, (const char* const*) charPtrArray);
if (sciErr.iErr) {
printError(&sciErr, 0);
return SWIG_ERROR;
}
return SWIG_OK;
}
}
%fragment("SWIG_FromCharPtrAndSize", "header", fragment = "SWIG_SciString_FromCharPtr") {
#define SWIG_FromCharPtrAndSize(charPtr, charPtrLength) SWIG_SciString_FromCharPtr(pvApiCtx, SWIG_Scilab_GetOutputPosition(), charPtr)
}
/*
* Char* Scilab variable
*/
%fragment(SWIG_CreateScilabVariable_frag(char), "wrapper") {
SWIGINTERN int
SWIG_CreateScilabVariable_dec(char)(void *pvApiCtx, const char* psVariableName, const char cVariableValue) {
SciErr sciErr;
char sValue[2];
const char* psStrings[1];
sValue[0] = cVariableValue;
sValue[1] = '\0';
psStrings[0] = sValue;
sciErr = createNamedMatrixOfString(pvApiCtx, psVariableName, 1, 1, psStrings);
if (sciErr.iErr) {
printError(&sciErr, 0);
return SWIG_ERROR;
}
return SWIG_OK;
}
}
%fragment(SWIG_CreateScilabVariable_frag(charptr), "wrapper") {
SWIGINTERN int
SWIG_CreateScilabVariable_dec(charptr)(void *pvApiCtx, const char* psVariableName, const char* psVariableValue) {
SciErr sciErr;
const char* psStrings[1];
psStrings[0] = psVariableValue;
sciErr = createNamedMatrixOfString(pvApiCtx, psVariableName, 1, 1, psStrings);
if (sciErr.iErr) {
printError(&sciErr, 0);
return SWIG_ERROR;
}
return SWIG_OK;
}
}