From: Paul Hänsch Date: Mon, 13 Jul 2026 19:21:06 +0000 (+0200) Subject: simplified command parsing, exit when stdin closes X-Git-Url: https://git.plutz.net/?a=commitdiff_plain;h=8d3d38f5173053310ddb039aa8cf94d650f3bb14;p=gladerunner simplified command parsing, exit when stdin closes --- diff --git a/glade1.c b/glade1.c index de2a198..0196d3b 100644 --- a/glade1.c +++ b/glade1.c @@ -83,39 +83,33 @@ int a_text_view(GtkTextView *w, char *cmd, char *args) { 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'; @@ -124,8 +118,10 @@ gboolean idle_readline(gpointer d) { } if ( l > 0 ) { buf[len - 1] = 0; - a_command(buf); + action(buf); len = 0; + } else if (l == 0) { + exit(0); } return 1; }