SCIDIR/examples/interface-tutorial
just
enter the make
command in an Unix platform or in the Windows
environment with the Visual C++ environment enter nmake /f Makefile.mak
.
This command produces the following file tutorial_gateway.c
which is
a C function produced by the Makefile :
#include "mex.h" extern Gatefunc intview; extern Gatefunc intmatmul; static GenericTable Tab[]={ {(Myinterfun)sci_gateway, intview,"error msg"}, {(Myinterfun)sci_gateway, intmatmul,"error msg"}, }; int C2F(tutorial_gateway)() { Rhs = Max(0, Rhs); (*(Tab[Fin-1].f))(Tab[Fin-1].name,Tab[Fin-1].F); return 0; }This function is essentially the table of C functions which are dynamically linked wih Scilab.
The following file tutorial.sce
is also produced by the Makefile :
scilab_functions =[... "view"; "matmul"; ]; auxiliary=""; files=G_make(["tutorial_gateway.o","tutorial.a", auxiliary],"void(Win)"); addinter(files,"tutorial_gateway",scilab_functions);
The Scilab function addinter
makes the correspondance between the
C gateway functions (such as intmatmul
) and their names as Scilab
functions.
To load the newly created function matmul
, one has to execute this
script and then the function matmul
can be called into Scilab
-->exec tutorial.sce -->A=rand(2,3);B=rand(3,3);C=matmul(A,B); //C=A*B
Summing up, to build an static interface, the user has to write
a gateway function such as intmatmul
. Then he has to edit
the Makefile in
SCIDIR/examples/interface-tutorial
(or a copy of it) and to put there
the name of his gateway function(s) (e.g. intmatmul.o
) in the
target CINTERFACE
and the name of the corresponding Scilab
function (e.g. matmul
) in the target CFUNCTIONS
with the same ordering. Typing make
produces the static library
and a script file (here tutorial.sce
) which should be
executed each time the newly created function(s) are needed. Of course,
it is possible to perform this operation automatically
when Scilab is launched by creating a startup file .scilab
identical
to tutorial.sce
.