--- /dev/null
+/* SCCS Id: @(#)gnaskstr.c 3.3 2000/07/16 */
+/* Copyright (C) 1998 by Erik Andersen <andersee@debian.org> */
+/* NetHack may be freely redistributed. See license for details. */
+
+#include "gnaskstr.h"
+#include "gnmain.h"
+#include <gnome.h>
+
+
+static
+void ghack_ask_string_callback(gchar * string, gpointer data)
+{
+ char **user_text = (char **) data;
+
+ g_assert(user_text != NULL);
+
+ *user_text = string; /* note - value must be g_free'd */
+}
+
+
+int ghack_ask_string_dialog(const char *szMessageStr,
+ const char *szDefaultStr, const char *szTitleStr,
+ char *buffer)
+{
+ int i;
+ GtkWidget* dialog;
+ gchar *user_text = NULL;
+
+ dialog = gnome_request_dialog(FALSE, szMessageStr,
+ szDefaultStr, 0,
+ ghack_ask_string_callback,
+ &user_text, NULL);
+ g_assert(dialog != NULL);
+
+ gtk_window_set_title(GTK_WINDOW(dialog), szTitleStr);
+
+ gnome_dialog_set_default( GNOME_DIALOG(dialog), 0);
+ gtk_window_set_modal( GTK_WINDOW(dialog), TRUE);
+ gnome_dialog_set_parent (GNOME_DIALOG (dialog),
+ GTK_WINDOW (ghack_get_main_window ()) );
+
+ i = gnome_dialog_run_and_close (GNOME_DIALOG (dialog));
+
+ /* Quit */
+ if ( i != 0 || user_text == NULL ) {
+ if (user_text)
+ g_free(user_text);
+ return -1;
+ }
+
+ if ( *user_text == 0 ) {
+ g_free(user_text);
+ return -1;
+ }
+
+ g_assert(strlen(user_text) > 0);
+ strcpy (buffer, user_text);
+ g_free(user_text);
+ return 0;
+}
+