add demos dynamic link
[scilab.git] / scilab / modules / dynamic_link / demos / call_c.sce
1 //
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2009 - DIGITEO - Allan CORNET
4 //
5 // This file is distributed under the same license as the Scilab package.
6 //
7
8 //           CALLING EXTERNAL C FUNCTION
9
10 if haveacompiler() then
11
12
13 // we use TMPDIR for compilation 
14         
15   foo=['void foo(double *a,double *b,double *c)';
16      '{ *c = *a + *b; }'  ];
17      
18   mprintf('\n');
19   mprintf(gettext('C Function to call in scilab.\n'));
20   
21   disp(foo);
22         
23 if ~c_link('foo') then
24   path = getcwd(); 
25   chdir(TMPDIR); 
26   mputl(foo,'foo.c');
27   
28   mprintf('\n');
29   mprintf(gettext('Call ilib_for_link to build C function.\n'));
30   ilib_for_link(['foo'],'foo.c',[],"c");
31   exec loader.sce ;
32   chdir(path) 
33 end     
34
35 //Z = X+Y by C function
36 X = 5;
37 Y = 7;
38 mprintf('\n');
39 mprintf(gettext('Call C function. Z = X+Y'));
40 mprintf('\n');
41 mprintf(gettext('with X = %d'), X);
42 mprintf('\n');
43 mprintf(gettext('with Y = %d'), Y);
44 mprintf('\n');
45 mprintf("Z = call(''foo'', X, 1, ''d'', Y, 2, ''d'', ''out'', [1,1], 3, ''d'');");
46 mprintf('\n');
47 Z = call('foo', X, 1, 'd', Y, 2, 'd', 'out', [1,1], 3, 'd');
48 mprintf(gettext('result Z = %d'), Z);
49 mprintf('\n');
50
51 end