Example
We would like to initialize an array of integers in a Mosel program with data held in the C program that executes it:
model "Test initialization in memory"
uses "meminit"
parameters
MEMDAT='' ! Location of data in memory
MEMSIZ=0 ! Size of the data block (nb of integers)
end-parameters
declarations
a:array(1..20) of integer
end-declarations
writeln("Data located at ", MEMDAT, " contains ", MEMSIZ, " integers")
meminit(a, MEMDAT, MEMSIZ)
writeln("a=", a)
end-model A C program to execute the Mosel program meminit_test.mos printed above may look as follows:
int main()
{
XPRMmodel mod;
int result;
char params[80];
static int tabinit[]= {23,78,45,90,234,111,900,68,110};
XPRMinit(); /* Initialize Mosel */
XPRMcompmod("", "meminit_test.mos", NULL, NULL); /* Compile the model */
mod=XPRMloadmod("meminit_test.bim", NULL); /* Load the model */
/* Parameters: the address of the data table and its size */
sprintf(params, "MEMDAT='%p', MEMSIZ=%d", tabinit, sizeof(tabinit)/sizeof(int));
XPRMrunmod(mod, &result, params); /* Run the model */
return result;
}
