return 1;
}
-int action(GtkWidget *wdg, char *cli) {
- char *cmd = strtok(cli, " \n");
+int action(char *cli) {
+ GtkWidget *wdg;
+ char *wid = strtok(cli, " \n"); // Separator: Space, Tab, Newline
+ char *cmd = strtok(NULL, " \n");
char *args = strtok(NULL, "");
- if (!wdg) return 0;
- else if ( (GTK_IS_BUTTON(wdg) && a_button(GTK_BUTTON(wdg), cmd, args))
- || (GTK_IS_ENTRY(wdg) && a_entry(GTK_ENTRY(wdg), cmd, args))
- || (GTK_IS_WINDOW(wdg) && a_window(GTK_WINDOW(wdg), cmd, args))
- || (GTK_IS_TEXT_VIEW(wdg) && a_text_view(GTK_TEXT_VIEW(wdg), cmd, args))
- || (GTK_IS_EDITABLE(wdg) && a_editable(GTK_EDITABLE(wdg), cmd, args))
- || (GTK_IS_WIDGET(wdg) && a_widget(GTK_WIDGET(wdg), cmd, args))
+ if ( !wid || !wid[0]
+ || !(wdg = GTK_WIDGET(gtk_builder_get_object(builder, wid)))
+ ) return 0;
+ else if (
+ (GTK_IS_BUTTON(wdg) && a_button(GTK_BUTTON(wdg), cmd, args))
+ || (GTK_IS_ENTRY(wdg) && a_entry(GTK_ENTRY(wdg), cmd, args))
+ || (GTK_IS_WINDOW(wdg) && a_window(GTK_WINDOW(wdg), cmd, args))
+ || (GTK_IS_TEXT_VIEW(wdg) && a_text_view(GTK_TEXT_VIEW(wdg), cmd, args))
+ || (GTK_IS_EDITABLE(wdg) && a_editable(GTK_EDITABLE(wdg), cmd, args))
+ || (GTK_IS_WIDGET(wdg) && a_widget(GTK_WIDGET(wdg), cmd, args))
) return 1;
else return 0;
}
-void a_command(char *cli) {
- GtkWidget *wdg;
- char *wid = strtok(cli, " \n"); // Separator: Space, Tab
-
- if ( wdg = GTK_WIDGET(gtk_builder_get_object(builder, wid)) ) {
- action(wdg, strtok(NULL, ""));
- }
-}
-
gboolean idle_readline(gpointer d) {
- // GtkBuilder *bld = GTK_BUILDER(d);
static size_t s = 128;
static char *buf = NULL;
static int len = 0; int l;
if (!buf) buf = malloc(s);
- l = read(0, buf + len, s - len);
- while ( l > 0 ) {
+ while ( (l = read(0, buf + len, s - len)) > 0) {
len += l;
if ( buf[len - 1] == '\n' && (len < 2 || buf[len - 2] != '\\') ) break;
else if (len >= 2) buf[--len - 1] = '\n';
}
if ( l > 0 ) {
buf[len - 1] = 0;
- a_command(buf);
+ action(buf);
len = 0;
+ } else if (l == 0) {
+ exit(0);
}
return 1;
}