gchar *response = g_string_free(priv->response, FALSE);
priv->response = g_string_new("");
+ gdk_threads_enter();
g_signal_emit_by_name(glk, "command", priv->input, response);
+ gdk_threads_leave();
g_free(priv->input);
g_free(response);
priv->interpreter = CHIMARA_IF_INTERPRETER_NONE;
}
+static void
+chimara_if_char_input(ChimaraGlk *glk, guint32 win_rock, guint keysym)
+{
+ CHIMARA_IF_USE_PRIVATE(glk, priv);
+ g_assert(priv->input == NULL);
+
+ gchar outbuf[6];
+ gint outbuflen = g_unichar_to_utf8(gdk_keyval_to_unicode(keysym), outbuf);
+ priv->input = g_strndup(outbuf, outbuflen);
+}
+
static void
chimara_if_line_input(ChimaraGlk *glk, guint32 win_rock, gchar *input)
{
/* Connect to signals of ChimaraGlk parent */
g_signal_connect(self, "stopped", G_CALLBACK(chimara_if_stopped), NULL);
g_signal_connect(self, "waiting", G_CALLBACK(chimara_if_waiting), NULL);
+ g_signal_connect(self, "char-input", G_CALLBACK(chimara_if_char_input), NULL);
g_signal_connect(self, "line-input", G_CALLBACK(chimara_if_line_input), NULL);
g_signal_connect(self, "text-buffer-output", G_CALLBACK(chimara_if_text_buffer_output), NULL);
}
;
}
+ /* Check if an external blorb file is present */
+ /* FIXME: hardcoded path */
+ if(format == CHIMARA_IF_FORMAT_Z5 || format == CHIMARA_IF_FORMAT_Z6 || format == CHIMARA_IF_FORMAT_Z8) {
+ gchar *path = g_path_get_dirname(gamefile);
+ gchar *scratch = g_path_get_basename(gamefile);
+ *(strrchr(scratch, '.')) = '\0';
+ gchar *blorbfile = g_strconcat(path, "/../Resources/", scratch, ".blb", NULL);
+ g_printerr("Looking for %s\n", blorbfile);
+ if(g_file_test(blorbfile, G_FILE_TEST_EXISTS)) {
+ args = g_slist_prepend(args, blorbfile);
+ g_printerr("Prepending graphics file to args\n");
+ } else {
+ g_free(blorbfile);
+ }
+ g_free(path);
+ g_free(scratch);
+ }
+
/* Allocate argv to hold the arguments */
int argc = g_slist_length(args);
args = g_slist_prepend(args, NULL);