next up previous contents index
Next: 6.2.3 addinter command Up: 6.2 Interface programs Previous: 6.2.1 Building an interface

6.2.2 Example

The following interface is taken from the examples in the examples/addinter-examples directory. The function to be interfaced has the following calling sequence:

int foubare2c (char *ch, int *a, int *ia, float *b, int *ib, 
               double *c, int *mc, int *nc, double *d, double *w, 
               int *err));
The associated Scilab function is:
function [y1,y2,y3,y4,y5]=foobar(x1,x2,x3,x4)
where x1 is a character string, and x2, x3, x4 are matrices which, in the called C function, foubare2c are respectively integer, real and double arrays.


The interface program is the following:

int intsfoubare(fname) 
     char *fname;
{
  int i1, i2;
  static int ierr;
  static int l1, m1, n1, m2, n2, l2, m3, n3, l3, m4, n4, l4, l5, l6;
  static int minlhs=1, minrhs=4, maxlhs=5, maxrhs=4;

  Nbvars = 0;
  
  CheckRhs(minrhs,maxrhs) ;
  CheckLhs(minlhs,maxlhs) ;

  GetRhsVar(1, "c", &m1, &n1, &l1);
  GetRhsVar(2, "i", &m2, &n2, &l2);
  GetRhsVar(3, "r", &m3, &n3, &l3);
  GetRhsVar(4, "d", &m4, &n4, &l4);
  
  CreateVar(5, "d", &m4, &n4, &l5);
  CreateVar(6, "d", &m4, &n4, &l6);

  i1 = n2 * m2;
  i2 = n3 * m3;
  
  foubare2c(cstk(l1), istk(l2), &i1, sstk(l3), &i2, stk(l4), 
	     &m4, &n4, stk(l5),stk(l6), &ierr);
  
  if (ierr > 0) 
    {
      sciprint("Internal Error");
      Error(999);
      return 0;
    }
  
  LhsVar(1) = 5;
  LhsVar(2) = 4;
  LhsVar(3) = 3;
  LhsVar(4) = 2;
  LhsVar(5) = 1;
  PutLhsVar();
  return 0;
}

static TabF Tab[]={ 
  {intsfoubare, "foobar"} 
} ; 

int C2F(foobar)()
{
  Rhs = Max(0, Rhs);
  (*(Tab[Fin-1].f))(Tab[Fin-1].name);
  return 0;
}

Note that the last part of the interface program should contain in the table TabF the pair = (name of the interface program, name of the associated Scilab function). If several functions are interfaced in the interface a pair of names should be given for each function. The entrypoint foobar is used by the dynamic link command addinter.


next up previous contents index
Next: 6.2.3 addinter command Up: 6.2 Interface programs Previous: 6.2.1 Building an interface
Scilab Group