#include "epplet.h" #define EPPLET_NAME "E-Exec" #define EPPLET_VERSION "0.4" #define EPPLET_INFO "Exec a command given by the user" #define MAX_HIST_LEN 15 Epplet_gadget textbox = NULL; Epplet_gadget history_popup = NULL; char *command_history[MAX_HIST_LEN]; int current_command = 0; int num_commands = 0; static void cb_close(void *data); static void run_contents(void *data); static void change_textbox(void *data); static void cb_close(void *data) { Epplet_cleanup(); Epplet_unremember(); exit(0); data = NULL; } static void run_contents(void *data) { char *command = Epplet_textbox_contents(textbox); int i; if (command && strlen(command)) { if (num_commands < MAX_HIST_LEN) command_history[num_commands++] = strdup(command); else { free(command_history[0]); Epplet_remove_popup_entry(history_popup, 1); for (i = 0; i < MAX_HIST_LEN; i++) command_history[i] = command_history[i + 1]; command_history[MAX_HIST_LEN - 1] = strdup(command); } current_command = num_commands; Epplet_add_popup_entry(history_popup, command, NULL, change_textbox, strdup(command)); Epplet_spawn_command(command); Epplet_reset_textbox(textbox); } return; data = NULL; } static void change_textbox(void *data) { char *s = (char *)data; Epplet_change_textbox(textbox, s); } static void hist_last(void *data) { if (current_command == 0) { current_command = num_commands; Epplet_reset_textbox(textbox); } else { Epplet_change_textbox(textbox, command_history[--current_command]); } return; data = NULL; } static void hist_next(void *data) { if (current_command == num_commands - 1) { current_command++; Epplet_reset_textbox(textbox); return; } else if (current_command >= num_commands) { current_command = 0; } else { current_command++; } Epplet_change_textbox(textbox, command_history[current_command]); return; data = NULL; } int main(int argc, char *argv[]) { atexit(Epplet_cleanup); if ((argc > 1) && (!strcmp("--proper-size", argv[1]))) { Epplet_Init(EPPLET_NAME, EPPLET_VERSION, EPPLET_INFO, 6, 3, argc, argv, 0); Epplet_gadget_show(Epplet_create_label(-12, 2, "E-Exec", 2)); textbox = Epplet_create_textbox(NULL, NULL, 2, 32, 92, 14, 2, run_contents, NULL); } else { Epplet_Init(EPPLET_NAME, EPPLET_VERSION, EPPLET_INFO, 5, 3, argc, argv, 0); Epplet_gadget_show(Epplet_create_label(-12, 2, "E-Exec", 2)); textbox = Epplet_create_textbox(NULL, NULL, 2, 32, 76, 14, 2, run_contents, NULL); } Epplet_gadget_show(Epplet_create_button(NULL, NULL, 2, 2, 12, 12, "CLOSE", 0, NULL, cb_close, NULL)); Epplet_gadget_show(Epplet_create_button(NULL, NULL, 2, 16, 12, 12, "PREVIOUS", 0, NULL, hist_last, NULL)); Epplet_gadget_show(Epplet_create_button(NULL, NULL, 16, 16, 12, 12, "NEXT", 0, NULL, hist_next, NULL)); Epplet_gadget_show(Epplet_create_button(NULL, NULL, 60, 16, 12, 12, "PLAY", 0, NULL, run_contents, NULL)); history_popup = Epplet_create_popup(); Epplet_add_popup_entry(history_popup, "-NeverMind-", NULL, NULL, NULL); Epplet_gadget_show(Epplet_create_popupbutton(NULL, NULL, 30, 16, 12, 12, "ARROW_UP", history_popup)); Epplet_gadget_show(textbox); Epplet_show(); Epplet_Loop(); return 0; }