diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile.am | 2 | ||||
-rw-r--r-- | src/main.c | 26 | ||||
-rw-r--r-- | src/userinterface.c | 5 |
3 files changed, 25 insertions, 8 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index 865a5de..8cdb716 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -26,4 +26,4 @@ INCLUDES = $(GLIB2_CFLAGS) $(GUILE_CFLAGS) -I$(top_builddir)/include \ -DSCRIPTS_PATH=\"$(schemedir)\" gnurobots_SOURCES = main.c api.c map.c grobot.c userinterface.c -gnurobots_LDFLAGS = $(GLIB2_LIBS) $(GUILE_LDFLAGS) -lltdl +gnurobots_LDFLAGS = $(GLIB2_LIBS) $(GUILE_LDFLAGS) -lltdl -lgthread-2.0 @@ -59,6 +59,7 @@ Map *map; GModule *plugin; UserInterface *load_ui_module (gchar *module_name, Map *map); +gpointer callback(gpointer data); SCM catch_handler (void *data, SCM tag, SCM throw_args); gint is_file_readable (const gchar *filename); @@ -331,6 +332,7 @@ main_prog (void *closure, gint argc, gchar *argv[]) /* draw the map */ user_interface_draw (ui); + user_interface_update_status (ui, "", -1, -1, -1); if (strlen (robot_program) != 0) { @@ -342,16 +344,19 @@ main_prog (void *closure, gint argc, gchar *argv[]) else { gchar buff[BUFF_LEN]; - SCM value; - g_printf ("Robot program not specified. Entering interactive mode..\n"); - user_interface_update_status (ui, "", -1, -1, -1); - while (1) + g_thread_init(NULL); + + g_printf("Robot program not specified. Entering interactive mode..\n"); + + g_thread_create(callback, NULL, FALSE, NULL); + + while(1) { user_interface_get_string (ui, "guile> ", buff, BUFF_LEN); - value = scm_internal_catch (SCM_BOOL_T, - (scm_t_catch_body) scm_c_eval_string, - (void *) buff, catch_handler, NULL); + + scm_internal_catch (SCM_BOOL_T, (scm_t_catch_body) scm_c_eval_string, + (void *) buff, catch_handler, NULL); } } @@ -359,6 +364,13 @@ main_prog (void *closure, gint argc, gchar *argv[]) exit_nicely (); } +gpointer callback(gpointer data) +{ + user_interface_run(ui); + + return NULL; +} + /************************************************************************ * SCM catch_handler (void *data, SCM tag, SCM throw_args); * * * diff --git a/src/userinterface.c b/src/userinterface.c index 8cee000..f31591f 100644 --- a/src/userinterface.c +++ b/src/userinterface.c @@ -88,6 +88,11 @@ user_interface_add_thing (UserInterface * ui, gint x, gint y, gint thing) USER_INTERFACE_GET_CLASS (ui)->user_interface_add_thing (ui, x, y, thing); } +void user_interface_run(UserInterface* ui) +{ + USER_INTERFACE_GET_CLASS(ui)->user_interface_run(ui); +} + void user_interface_draw (UserInterface * ui) { |