[Scilab-Dev] quetion
Allan CORNET
allan.cornet at scilab.org
Tue May 26 09:14:48 CEST 2009
Hi,
A example with string and double variables
if haveacompiler() then
chdir(TMPDIR);
src = ['#include <stdio.h>'
'#include ""stack-c.h""'
'#include ""sciprint.h""'
'#include ""Scierror.h""'
''
'static char *cvar = NULL;'
'static int ivar = 0;'
'int sci_cvar_set (char *fname)'
'{'
' char *arg = NULL;'
' int m1 = 0 ;'
' int n1 = 0 ;'
' int l1 = 0 ;'
' if (GetType(1) == sci_strings)'
' {'
' GetRhsVar(1,STRING_DATATYPE ,&m1,&n1,&l1);'
' cvar = strdup(cstk(l1));'
' }'
' else if (GetType(1) == sci_matrix)'
' {'
' GetRhsVar(1,MATRIX_OF_DOUBLE_DATATYPE ,&m1,&n1,&l1);'
' ivar = (int)*stk(l1);'
' }'
' else'
' {'
' Scierror(999,""error ...\n"");'
' }'
''
' return 0;'
'} '
''
'int sci_cvar_get (char *fname)'
'{'
''
' if (GetType(1) == sci_strings)'
' {'
' int m1 = 0, n1 = 0, l1 = 0;'
' int m = 1, n = 0, l = 0;'
''
' GetRhsVar(1,STRING_DATATYPE ,&m1,&n1,&l1);'
' if (strcmp(cstk(l1),""string"") == 0)'
' {'
' m = 1;'
''
' if (cvar) n = (int)strlen(cvar);'
' else n = (int)strlen("""");'
''
' CreateVar(Rhs+1,STRING_DATATYPE ,&m,&n,&l); '
' if (cvar) strcpy(cstk(l),cvar);'
' else strcpy(cstk(l),"""");'
' }'
' else'
' if (strcmp(cstk(l1),""number"") == 0)'
' {'
' m = 1;'
' n = 1;'
' CreateVar(Rhs+1,MATRIX_OF_DOUBLE_DATATYPE ,&m,&n,&l); '
' *stk(l) = (double)ivar;'
' }'
' else'
' {'
' Scierror(999,""error ...\n"");'
' return 0;'
' }'
' LhsVar(1) = Rhs+1;'
' }'
' else'
' {'
' Scierror(999,""error ...\n"");'
' }'
' return 0;'
'}'
];
mputl(src,'example_cvar.c');
files=['example_cvar.c'];
ilib_build('addinter',['cvar_get','sci_cvar_get';'cvar_set','sci_cvar_set'],
files,[]);
exec loader.sce;
cvar_set(33)
cvar_set('my string')
cvar_get('string')
cvar_get('number')
end
Allan
-----Message d'origine-----
De : sploving [mailto:sploving1 at 163.com]
Envoyé : mardi 26 mai 2009 06:41
À : dev at lists.scilab.org
Objet : [Scilab-Dev] quetion
hi all,
I want to wrap a C variable for scialb. and my wrapper is as follows:
extern char cvar;
int _wrap_cvar_set (char *fname){
char arg1 ;
int m1 ;
int n1 ;
int l1 ;
{
GetRhsVar(1,STRING_DATATYPEE ,&m1,&n1,&l1);
arg1=(char)(*stk(l1));
}
cvar = arg1;
return 0;
}
int _wrap_cvar_get (char *fname){
char result;
int m ;
int n ;
int l ;
result = (char)cvar;
{
m=1,n=1;
CreateVar(Rhs+1,STRING_DATATYPE ,&m,&n,&l);
*stk(l)=result;
LhsVar(1)=Rhs+1;
}
return 0;
}
It could not work. Then I use the "MATRIX_OF_STRING_DATATYPE" , it does
not work either. At last I use the "MATRIX_OF_DOUBLE_DATATYPE", it
works. But it could not set a char to cvar, as follows:
-->cvar_set(3)
-->cvar_get()
ans =
3.
-->cvar_set("b")
!--error 246
What is the matter? Thanks for any reply.
Baozeng
More information about the dev
mailing list