Interface entre Scilab/Scicos e funções externas * Associando (linking) código Função externa chamada de uma outra função no Scilab/Scicos. Obrigatoriamente os argumentos da função externa devem ser ponteiros para int, double ou char. A função é interpretada diretamente, não sendo necessário escrever uma interface. A função do Scilab usada para chamar a função externa é a call ou uma outra função que aceite argumentos externos como a ode, dassl, optim e a fsolve. Exemplo: 1 - Criando uma função em C para soma de dois valores. A função possui 3 argumentos sendo o último o valor de retorno. 2 - Usando a função call do Scilab para chamar a soma. Sintaxe de call: call("nome_da_funcao",arg1,1,"i",arg2,2,"i",arg3,3,"i","out",3). onde: arg1, arg2 e arg3 sao os paramentros da funcao C; "i" é o tipo do argumento - integer; 1, 2 e 3 - local na pilha do Scilab onde estão armazenados os parametros; "out" - depois deste parametro informa-se qual argumento é usado como saida, neste caso o 3° da pilha. Função soma: #include #include int soma(int *a, int *b, int *c){ *c = *a + *b; } No scilab: -->names=['soma']; // ponto de entrada -->files = 'soma.o'; // arquivo objeto -->flag='c'; // indica que codigo eh c -->ilib_for_link(names,files,[],flag); // builder, gera loader.sce generate a loader file generate a Makefile: Makelib running the makefile compilation of soma building shared library (be patient) -->exec("loader.sce") //executando loader.sce -->// generated by builder.sce: Please do not edit this file -->// ------------------------------------------------------ -->soma_path=get_absolute_file_path('loader.sce'); -->link(soma_path+'libsoma.so',['soma'],'c'); shared archive loaded Link done --> -->a=2, b=1; a = 2. -->y=call("soma",a,1,"i",b,2,"i",c,3,"i","out",3) //usando call para chamar soma y = 3. --> referência: Campbell, S. L., Chancelier, J.-P. and Nikoukhah, R. (2005). Modeling and Simulation in Scilab/Scicos, Springer-Verlag.