Static modules versus I/O drivers
The generalization of the notion `file' and the introduction of I/O drivers in Mosel replace certain uses of static user modules. In particular for transfering data in memory it is often no longer necessary to write a dedicated module. However, other uses of static modules persist, such as the compilation of a standard module as a static module for debugging purposes.
The example from Section Example may be re-written as follows using the raw and mem drivers that are available with the standard distribution of Mosel:
model "Test initialization in memory (I/O)"
parameters
MEMDAT='' ! Data block in memory
end-parameters
declarations
a:array(1..20) of integer
end-declarations
initializations from "raw:"
a as MEMDAT
end-initializations
writeln("a=", a)
end-model The complete C program to execute the Mosel program meminitio.mos printed above may look as follows:
#include <stdio.h>
#include "xprm_mc.h"
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("", "meminitio.mos", NULL, NULL); /* Compile the model */
mod=XPRMloadmod("meminitio.bim", NULL); /* Load the model */
/* Parameters: the address of the data table and its size */
sprintf(params, "MEMDAT='noindex,mem:%p/%u'", tabinit, sizeof(tabinit));
XPRMrunmod(mod, &result, params); /* Run the model */
return result;
}
