Dear all,

I tried to get information about making standalone programs but didn’ t

find a lot so i try here.

I have to coupling programs, ones in Fortran others in Matlab with data

exchange between them. I can use C or C++ but it have to be standalone

programs.

So that’ s my purpose: receive a matrix in an array, send it to a

function.m which returns another matrix that y send in an array.

I made it and it works well but i want to understand some things.

Below a simplified example with my questions commented (I made it from

the example of the documentation):

/*

Which includes are really needed in the example below?

*/

#include <octave/oct.h>

#include <octave/octave.h>

#include <octave/parse.h>

#include <octave/toplev.h> /* do_octave_atexit */

#define IP_DIM_X 2

#define IP_DIM_Y 3

int main (const int argc, char ** argv) {

const char * argvv [] = {"" /* name of program, not relevant */,

"--silent"};

/*

Why the line below doesn’ t work?

const char * argvv [] = {"",""};

What would be the name of program if I would one?

*/

int il_size[2];

int t=12;

il_size[0] = IP_DIM_X;

il_size[1] = IP_DIM_Y;

double fla_transport [ il_size[0] * il_size[1] ];

double fla_rent [ il_size[0] * il_size[1] ];

octave_main (2, (char **) argvv, true /* embedded */);

/*

Is that calling octave? I have a new line in my «~/.octave_hist» each

time in run the program.

Does that mean if octave is not installed I cannot use this program?

If it does we can’t talk about a standalone program.

What does the «2» and the «true» mean?

*/

Matrix inMatrix (il_size[0], il_size[1]);

octave_value_list functionArguments;

/*

Do I HAVE to use this to call functions?

*/

//Reception of transport

//Copy fla_transport in inMatrix to give it to Octave.

for (int i=0 ; i<il_size[0]; i++){

for (int j=0 ; j<il_size[1]; j++){

int index = i*il_size[1] + j;

inMatrix (i,j) = fla_transport[index];

}

}

functionArguments (0) = inMatrix;

functionArguments (1) = t;

const octave_value_list result = feval ("multiplication",

functionArguments,1);

/*

I found somewhere that the «1» was because I expect one argument,

but if I have to use functionArguments it will allways be 1?

Is there another way to use a function than «feval»?

*/

inMatrix = result (0).matrix_value ();

/*

Where can i found the list of the «octave_value_list» methods?

I thought it was in «oct-obj.cc» but i didn’t find it.

*/

//Copy of inMatrix for send

for (int i=0 ; i<il_size[0]; i++){

for (int j=0 ; j<il_size[1]; j++){

int index = i*il_size[1] + j;

fla_rent [index] = inMatrix (i,j);

}

}

//Send of rent

do_octave_atexit ();

/*

What is the difference with:

clean_up_and_exit(0);

?

*/

return 0;

}

_______________________________________________

Help-octave mailing list

[hidden email]
https://www-old.cae.wisc.edu/mailman/listinfo/help-octave