#include "escheme.h" #define scheme_make_bool(i) (i ? scheme_true : scheme_false) typedef struct { Scheme_Type type; void* val; }mathlink; Scheme_Type MathLink_Type; static Scheme_Object *init_and_openlink(int argc, Scheme_Object **argv) { mathlink *ret; ret = scheme_malloc_atomic( sizeof( mathlink)); ret->type = MathLink_Type; ret->val = NULL; return ((Scheme_Object*)ret); } static Scheme_Object *SCHEME_MathLinkP(int argc, Scheme_Object **argv) { return scheme_make_bool( SCHEME_TYPE( argv[0]) == MathLink_Type); } Scheme_Object *scheme_reload(Scheme_Env *env) { Scheme_Env *menv; Scheme_Object *proc; menv = scheme_primitive_module(scheme_intern_symbol("ml"), env); proc = scheme_make_prim_w_arity(init_and_openlink, "init_and_openlink", 0, -1); scheme_add_global("init_and_openlink", proc, menv); proc = scheme_make_prim_w_arity(SCHEME_MathLinkP, "MathLink?", 1, 1); scheme_add_global("MathLink?", proc, menv); scheme_finish_primitive_module(menv); return scheme_void; } Scheme_Object *scheme_initialize(Scheme_Env *env) { MathLink_Type = scheme_make_type( ""); return scheme_reload(env); } Scheme_Object *scheme_module_name() { return scheme_intern_symbol("ml"); }