#include #include static void interpret (const char *cmd) { g_print ("\n : "); if (strcmp (cmd, "hip") == 0) g_print ("*hip*"); else if (strcmp (cmd, "hop") == 0) g_print ("*hop*"); else g_print ("huh?"); g_print ("\n >>> "); } static void activate (GtkEntry *entry) { interpret (gtk_entry_get_text (entry)); } gboolean input (GIOChannel *channel) { char buf[128]; int read; g_io_channel_read (channel, buf, 128, &read); buf[read] = '\0'; interpret (buf); return TRUE; } int main (int argc, char *argv[]) { GtkWidget *win; GtkWidget *entry; GIOChannel *stdin_channel; gtk_init (&argc, &argv); /* setup gui */ win = gtk_window_new (GTK_WINDOW_TOPLEVEL); entry = gtk_entry_new (); gtk_container_add (GTK_CONTAINER (win), entry); gtk_signal_connect (GTK_OBJECT (entry), "activate", GTK_SIGNAL_FUNC (activate), entry); gtk_widget_show_all (win); /* setup text-ui */ stdin_channel = g_io_channel_unix_new (0);/* read from stdin */ g_io_add_watch (stdin_channel, G_IO_IN, (GIOFunc)input, NULL); /* display prompt */ g_print ("\n >>> "); gtk_main (); return 0; }