| 1 #include <gmodule.h> |
|
| 2 |
|
| 3 #include <gnt.h> |
|
| 4 #include <gntbox.h> |
|
| 5 #include <gntentry.h> |
|
| 6 #include <gntlabel.h> |
|
| 7 |
|
| 8 static gboolean |
|
| 9 key_pressed(GntEntry *entry, const char *text, gpointer null) |
|
| 10 { |
|
| 11 if (*text != '\r') |
|
| 12 return FALSE; |
|
| 13 |
|
| 14 { |
|
| 15 const char *cmd; |
|
| 16 void *handle; |
|
| 17 void (*func)(); |
|
| 18 |
|
| 19 cmd = gnt_entry_get_text(entry); |
|
| 20 handle = g_module_open(cmd, G_MODULE_BIND_LOCAL); |
|
| 21 if (handle && g_module_symbol(handle, "main", (gpointer)&func)) |
|
| 22 { |
|
| 23 char *argv[] = {cmd, NULL}; |
|
| 24 gnt_entry_clear(entry); |
|
| 25 func(1, argv); |
|
| 26 } |
|
| 27 else |
|
| 28 { |
|
| 29 GntWidget *widget = gnt_vbox_new(FALSE); |
|
| 30 gnt_box_set_toplevel(GNT_BOX(widget), TRUE); |
|
| 31 gnt_box_set_title(GNT_BOX(widget), "Error"); |
|
| 32 gnt_box_add_widget(GNT_BOX(widget), gnt_label_new("Could not execute.")); |
|
| 33 gnt_box_add_widget(GNT_BOX(widget), gnt_label_new(g_module_error())); |
|
| 34 |
|
| 35 gnt_widget_show(widget); |
|
| 36 } |
|
| 37 } |
|
| 38 |
|
| 39 return TRUE; |
|
| 40 } |
|
| 41 |
|
| 42 int main() |
|
| 43 { |
|
| 44 GntWidget *window, *entry; |
|
| 45 |
|
| 46 freopen(".error", "w", stderr); |
|
| 47 |
|
| 48 gnt_init(); |
|
| 49 |
|
| 50 window = gnt_hbox_new(FALSE); |
|
| 51 |
|
| 52 gnt_box_add_widget(GNT_BOX(window), gnt_label_new("Command")); |
|
| 53 |
|
| 54 entry = gnt_entry_new(NULL); |
|
| 55 g_signal_connect(G_OBJECT(entry), "key_pressed", G_CALLBACK(key_pressed), NULL); |
|
| 56 gnt_box_add_widget(GNT_BOX(window), entry); |
|
| 57 |
|
| 58 gnt_widget_set_position(window, 0, getmaxy(stdscr) - 2); |
|
| 59 gnt_widget_show(window); |
|
| 60 |
|
| 61 gnt_main(); |
|
| 62 |
|
| 63 gnt_quit(); |
|
| 64 |
|
| 65 return 0; |
|
| 66 } |
|
| 67 |
|