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; }