Next: Dia Advanced, Previous: Dia Hook, Up: Extending Dia [Contents][Index]
Let’s assume that the pre-Guile Dia code looks structurally like this:
main ()
When you add Guile to a program, one (rather technical) requirement is
that Guile’s garbage collector needs to know where the bottom of the C
stack is. The easiest way to ensure this is to use
scm_boot_guile
like this:
main ()
scm_boot_guile (argc, argv, inner_main, NULL)
inner_main ()
scm_c_define_gsubr
In other words, you move the guts of what was previously in your
main
function into a new function called inner_main
, and
then add a scm_boot_guile
call, with inner_main
as a
parameter, to the end of main
.
Assuming that you are using foreign objects and have written primitive
code as described in the preceding subsections, you also need to insert
calls to declare your new foreign objects and export the primitives to
Scheme. These declarations must happen inside the dynamic scope
of the scm_boot_guile
call, but also before any code is
run that could possibly use them — the beginning of inner_main
is an ideal place for this.