<< Prev | - Up - | Next >> |
#include "mozart.h" // 1
// 2
OZ_BI_define(BIgetenv,1,1) // 3
{ // 4
OZ_declareAtom(0,envVarName); // 5
// 6
char *envValue = getenv(envVarName); // 7
// 8
if (envValue == 0) /* not defined in environment */// 9
return OZ_FAILED; //10
//11
OZ_RETURN_ATOM(envValue); //12
} OZ_BI_end //13
//14
//15
static OZ_C_proc_interface oz_interface[] = { //16
{"getenv",1,1,BIgetenv}, //17
{0,0,0,0} //18
}; //19
//20
OZ_C_proc_interface *oz_init_module() { //21
return oz_interface; //22
} //23
Suppose we want to provide an Oz native module Goodies
containing a single procedure {Goodies.getenv VarA ValueA}
as an interface to the C library function getenv(3)
: it constrains ValueA
to an atom, which is the value of the environment variable VarA
, where VarA
is an atom. Thus {Goodies.getenv 'HOME' X}
will constrain X
to an atom representing the path to our home directory. To realize this we have to perform the following steps:
Write a piece of C code.
Create an object file from the C code.
Create a dynamic library from the object file(s).
Link the library into Oz.
These steps are explained in more detail below.
<< Prev | - Up - | Next >> |