[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