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