#include "escheme.h" #include "mathlink.h" #define scheme_make_bool(i) (i ? scheme_true : scheme_false) #define linkpoint(n) ((mathlink*)argv[n])->val typedef struct { Scheme_Type type; MLINK val; }mathlink; Scheme_Type MathLink_Type; static Scheme_Object *warning(int argc, Scheme_Object **argv) { scheme_warning( SCHEME_BYTE_STR_VAL( argv[0])); return scheme_void; } static Scheme_Object *init_and_openlink(int argc, Scheme_Object **argv) { long err; MLENV ep; MLINK lp; mathlink *ret; char **arg; int i; arg = calloc( argc+1, sizeof(char*)); arg[0] = "ml"; for(i=0;itype = MathLink_Type; ret->val = lp; return ((Scheme_Object*)ret); } static Scheme_Object *MathPutFunction(int argc, Scheme_Object **argv) { return scheme_make_bool( MLPutFunction( linkpoint(2), SCHEME_SYM_VAL( argv[0]), SCHEME_INT_VAL( argv[1]))); } static Scheme_Object *MathPutArgCount(int argc, Scheme_Object **argv) { return scheme_make_bool( MLPutArgCount( linkpoint(1), SCHEME_INT_VAL( argv[0]))); } static Scheme_Object *MathPutSymbol(int argc, Scheme_Object **argv) { return scheme_make_bool( MLPutSymbol( linkpoint(1), SCHEME_SYM_VAL( argv[0]))); } static Scheme_Object *MathPutByteString(int argc, Scheme_Object **argv) { return scheme_make_bool( MLPutByteString( linkpoint(1), SCHEME_BYTE_STR_VAL( argv[0]), SCHEME_BYTE_STRLEN_VAL( argv[0]))); } static Scheme_Object *MathPutUnicodeString(int argc, Scheme_Object **argv) { unsigned int *s1; unsigned short *s2; long n, i; Scheme_Object *ret; s1 = SCHEME_CHAR_STR_VAL( argv[0]); n = SCHEME_CHAR_STRLEN_VAL( argv[0]); s2 = calloc( n, sizeof(unsigned short)); for (i=0; i"); return scheme_reload(env); } Scheme_Object *scheme_module_name() { return scheme_intern_symbol("ml"); }