X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=gui.c;h=f5e65c8bb900b65fc299d0a30842f192450f217a;hp=37d0d8e9ec205f0f3992d21b3a97519b277fc7af;hb=73414e9b5d2fcf5b3c65558fbd715148a1a38a2b;hpb=f6f50d03a09d6bc423324206d274336e9905bbb4 diff --git a/gui.c b/gui.c index 37d0d8e9..f5e65c8b 100644 --- a/gui.c +++ b/gui.c @@ -6,6 +6,9 @@ /** \file gui.c ncurses-based interface for paraslash */ +#include +#include +#include #include "gui.cmdline.h" #include "para.h" #include "gui.h" @@ -14,11 +17,12 @@ #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)" @@ -56,15 +60,15 @@ static struct gui_args_info conf; enum {GETCH_MODE, COMMAND_MODE, EXTERNAL_MODE}; -#define COLOR_STATUSBAR 32 -#define COLOR_COMMAND 33 -#define COLOR_OUTPUT 34 -#define COLOR_MSG 35 -#define COLOR_ERRMSG 36 -#define COLOR_WELCOME 37 -#define COLOR_SEPARATOR 38 -#define COLOR_TOP 39 -#define COLOR_BOT 40 +#define COLOR_STATUSBAR 52 +#define COLOR_COMMAND 53 +#define COLOR_OUTPUT 54 +#define COLOR_MSG 55 +#define COLOR_ERRMSG 56 +#define COLOR_WELCOME 57 +#define COLOR_SEPARATOR 58 +#define COLOR_TOP 59 +#define COLOR_BOT 60 struct gui_command { const char *key; @@ -485,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); } @@ -660,14 +664,15 @@ static void print_all_items(void) if (!curses_active) return; - for (i = 0; i < NUM_STAT_ITEMS; i++) + FOR_EACH_STATUS_ITEM(i) print_stat_item(i); } + static void clear_all_items(void) { int i; - for (i = 0; i < NUM_STAT_ITEMS; i++) { + FOR_EACH_STATUS_ITEM(i) { free(stat_content[i]); stat_content[i] = para_strdup(""); } @@ -679,7 +684,7 @@ static void init_colors(void) if (!has_colors()) msg_n_exit(EXIT_FAILURE, "Error: No color term\n"); start_color(); - for (i = 0; i < NUM_STAT_ITEMS; i++) + FOR_EACH_STATUS_ITEM(i) if (theme.data[i].len) init_pair(i + 1, theme.data[i].fg, theme.data[i].bg); init_pair(COLOR_STATUSBAR, theme.sb_fg, theme.sb_bg); @@ -721,10 +726,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; @@ -743,7 +749,7 @@ static int check_stat_line(char *line, __a_unused void *data) // 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); @@ -912,8 +918,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(); } @@ -980,7 +986,7 @@ static int client_cmd_cmdline(char *cmd) if (ret < 0) return -1; command_pipe = fds[1]; - mark_fd_nonblock(command_pipe); + mark_fd_nonblocking(command_pipe); return send_output(); } @@ -996,7 +1002,7 @@ static int display_cmd(char *cmd) if (para_exec_cmdline_pid(&cmd_pid, cmd, fds) < 0) return -1; command_pipe = fds[1]; - mark_fd_nonblock(command_pipe); + mark_fd_nonblocking(command_pipe); return send_output(); }