X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=gui.c;h=40d521bcf81ceb546a9675b5729c182109a07cf6;hp=a2d3e6cd5b63c5d867d793939dbae219196b6bab;hb=81b9f55a3b231cef27073d02098178895386077d;hpb=8dffec19598a4a0ed77fa082abaf52c8fe66d889 diff --git a/gui.c b/gui.c index a2d3e6cd..40d521bc 100644 --- a/gui.c +++ b/gui.c @@ -6,19 +6,23 @@ /** \file gui.c ncurses-based interface for paraslash */ +#include +#include +#include #include "gui.cmdline.h" #include "para.h" #include "gui.h" #include #include "ringbuffer.h" -#include "string.h" +#include "gui_common.h" #include "fd.h" #include "error.h" +#include "list.h" +#include "sched.h" #include "signal.h" /** define the array of error lists needed by para_gui */ INIT_GUI_ERRLISTS; -extern const char *status_item_list[NUM_STAT_ITEMS]; static char *stat_content[NUM_STAT_ITEMS]; #define STANDARD_STATUS_BAR "para_gui " PACKAGE_VERSION " (hit ? for help)" @@ -447,11 +451,12 @@ __printf_2_3 static void outputf(int color, const char* fmt,...) wrefresh(bot.win); } -static void add_output_line(char *line) +static int add_output_line(char *line, __a_unused void *data) { if (!curses_active) - return; + return 1; rb_add_entry(COLOR_OUTPUT, para_strdup(line)); + return 1; } void para_log(int ll, const char *fmt,...) @@ -484,7 +489,7 @@ static void setup_signal_handling(void) para_install_sighandler(SIGCHLD); para_install_sighandler(SIGWINCH); para_install_sighandler(SIGUSR1); - signal(SIGPIPE, SIG_IGN); +// signal(SIGPIPE, SIG_IGN); signal(SIGHUP, SIG_IGN); } @@ -720,10 +725,11 @@ static void init_curses(void) static void check_sigchld(void) { + int ret; pid_t pid; reap_next_child: - pid = para_reap_child(); - if (pid <= 0) + ret = para_reap_child(&pid); + if (ret <= 0) return; if (pid == cmd_pid) { cmd_pid = 0; @@ -735,19 +741,19 @@ reap_next_child: /* * print status line if line starts with known command. */ -static void check_stat_line(char *line) +static int check_stat_line(char *line, __a_unused void *data) { int i; // PARA_INFO_LOG("%s: checking: %s\n", __func__, line); i = stat_line_valid(line); if (i >= 0) { - line += strlen(status_item_list[i]) + 1; + line += strlen(status_item_list[i]) + 2; free(stat_content[i]); stat_content[i] = para_strdup(line); print_stat_item(i); } - return; + return 1; } /* @@ -911,8 +917,8 @@ repeat: close(audiod_pipe); audiod_pipe = -1; clear_all_items(); - free(stat_content[SI_STATUS_BAR]); - stat_content[SI_STATUS_BAR] = + free(stat_content[SI_BASENAME]); + stat_content[SI_BASENAME] = para_strdup("audiod not running!?"); print_all_items(); } @@ -922,7 +928,8 @@ check_return: if (cp_numread <= 0 && !cbo) /* command complete */ return 0; if (cbo) - cbo = for_each_line(command_buf, cbo, &add_output_line); + cbo = for_each_line(command_buf, cbo, + &add_output_line, NULL); if (cp_numread <= 0) cbo = 0; wrefresh(bot.win);