| /* |
| * 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; |
| } |
| } |