From ef4616f943c15d40cc2ff189b70e0ef6251af561 Mon Sep 17 00:00:00 2001 From: Jose Antonio Ortega Ruiz Date: Tue, 28 Aug 2001 16:38:06 +0000 Subject: guile integration --- mixguile/mixguile.c | 46 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 3 deletions(-) (limited to 'mixguile/mixguile.c') diff --git a/mixguile/mixguile.c b/mixguile/mixguile.c index 52321ca..4072869 100644 --- a/mixguile/mixguile.c +++ b/mixguile/mixguile.c @@ -21,31 +21,70 @@ * */ +#include #include "mixguile_cmd_dispatcher.h" #include "mixguile.h" static mixguile_cmd_dispatcher_t *dispatcher_ = NULL; +static mix_vm_cmd_dispatcher_t *vm_dispatcher_ = NULL; static main_func_t main_fun_; /* do local initialisation and enter the user provided main */ + static void real_main_ (int argc, char *argv[]) { + if (vm_dispatcher_) + { + mixguile_set_cmd_dispatcher (vm_dispatcher_); + mixguile_load_bootstrap (); + } (*main_fun_)(argc, argv); } /* initialise the guile command dispatcher and enter the provided - main function. the mixlib is also initialised. + main function. */ void -mixguile_init (int argc, char *argv[], main_func_t main_fun) +mixguile_init (int argc, char *argv[], main_func_t main_fun, + mix_vm_cmd_dispatcher_t *dis) { - mix_init_lib (); main_fun_ = main_fun; + vm_dispatcher_ = dis; gh_enter (argc, argv, real_main_); } +/* load bootstrap file */ +void +mixguile_load_bootstrap (void) +{ + FILE *scm = NULL; + const gchar *scmfile = SCM_FILE; + gchar *lscmfile = + g_strconcat (g_get_home_dir (), G_DIR_SEPARATOR_S, MIX_CONFIG_DIR, + G_DIR_SEPARATOR_S, LOCAL_SCM_FILE, NULL); + + if (!(scm = fopen (scmfile, "r")) + && !(scm = fopen ((scmfile = LOCAL_SCM_FILE), "r"))) + { + g_warning ("mixguile bootstrap file %s not found\n", SCM_FILE); + scmfile = NULL; + } + else + fclose (scm); + + if (scmfile) mixguile_interpret_file (scmfile); + + if ((scm = fopen (lscmfile, "r")) != NULL) + { + fclose (scm); + mixguile_interpret_file (lscmfile); + } + + g_free (lscmfile); +} + /* enter the guile repl */ void mixguile_enter_repl (int argc, char *argv[]) @@ -60,6 +99,7 @@ mixguile_set_cmd_dispatcher (mix_vm_cmd_dispatcher_t *dis) { g_return_if_fail (dis != NULL); if (dispatcher_) mixguile_cmd_dispatcher_delete (dispatcher_); + vm_dispatcher_ = dis; dispatcher_ = mixguile_cmd_dispatcher_new (dis); g_assert (dispatcher_); } -- cgit v1.2.3