summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBradley Smith2008-03-12 17:10:36 +0000
committerBradley Smith2008-03-12 17:10:36 +0000
commitc03fe0d1dc69b0322853d4ca4862ece10d942f66 (patch)
tree0819aa93ef75eb9c3aefc0e67deefac5d3694a08 /src
parentRemove sign hack. (diff)
downloadgnurobots-c03fe0d1dc69b0322853d4ca4862ece10d942f66.tar.gz
Make UI update in a loop, and thread out input.
Signed-off-by: Bradley Smith <brad@brad-smith.co.uk>
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am2
-rw-r--r--src/main.c26
-rw-r--r--src/userinterface.c5
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
diff --git a/src/main.c b/src/main.c
index ed5378a..2dd9c16 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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)
{