[plt-scheme] mzc embedding question

From: Chongkai Zhu (czhu at cs.utah.edu)
Date: Fri Nov 30 12:32:54 EST 2007

Matthew Padilla wrote:
> Hello,
>  
> I would like to compile a C++ program that embeds MzScheme, similar to 
> the example given in the online documentation (see example at end of 
> email).  I would like to be able to pass it
> strings representing arbitrary Scheme programs, and have it evaluate them.
>  
> I am running Microsoft's Visual C++ Express, on a Vista machine. 
>  
> Am I mistaken, or can I use mzc for this purpose?  It seems as though 
> mzc makes life easier by resolving linkage issues, etc. (e.g. to 
> MzScheme libraries) but I'm not sure if this is only for
> extension writing.  I've managed to produce .obj files via mzc... but 
> not an .exe.

Sure you can.

mzc --cc yourfile.c
mzc --ld yourfile.exe yourfile.obj

should work.

Chongkai


>  
> I have searched for examples but have found no good ones yet, so I 
> apologize in advance if they have passed me by.
>  
> Thank you,
> Matthew P.
>  
> #include "scheme.h"
>
> int main(int argc, char *argv[])
> {
>   Scheme_Env *e;
>   Scheme_Object *curout;
>   int i;
>   mz_jmp_buf * volatile save, fresh;
>
>   scheme_set_stack_base(NULL, 1); /* required for OS X, only */
>
>   e = scheme_basic_env();
>
>   curout = scheme_get_param(scheme_current_config(), 
> MZCONFIG_OUTPUT_PORT);
>
>   for (i = 1; i < argc; i++) {
>     save = scheme_current_thread->error_buf;
>     scheme_current_thread->error_buf = &fresh;
>     if (scheme_setjmp(scheme_error_buf)) {
>       scheme_current_thread->error_buf = save;
>       return -1; /* There was an error */
>     } else {
>       Scheme_Object *v = scheme_eval_string(argv[i], e);
>       scheme_display(v, curout);
>       scheme_display(scheme_make_character('\n'), curout);
>       /* read-eval-print loop, implicitly uses the initial Scheme_Env: */
>       scheme_apply(scheme_builtin_value("read-eval-print-loop"), 0, NULL);
>       scheme_current_thread->error_buf = save;
>     }
>   }
>   return 0;
> }
>
> ------------------------------------------------------------------------
>
> _________________________________________________
>   For list-related administrative tasks:
>   http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>   



Posted on the users mailing list.