X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=gui.c;h=d080946a0cab608f67269f6371ac69916d0faf16;hp=5403b9a607d2f8780017b2ca6306019c509ebcb7;hb=5c556c52f1196cea4536d36b683372de532943a9;hpb=6a52c8891d69e45389081a4400c7d3f1314be868 diff --git a/gui.c b/gui.c index 5403b9a6..d080946a 100644 --- a/gui.c +++ b/gui.c @@ -1,36 +1,28 @@ /* * Copyright (C) 1998-2007 Andre Noll * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + * Licensed under the GPL v2. For licencing details see COPYING. */ /** \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)" @@ -459,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,...) @@ -496,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); } @@ -671,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(""); } @@ -690,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); @@ -732,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; @@ -747,19 +742,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; } /* @@ -923,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(); } @@ -934,7 +929,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); @@ -990,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(); } @@ -1006,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(); } @@ -1161,6 +1157,12 @@ static void com_ll_incr(void) static void com_reread_conf(void) { char *cf =configfile_exists(); + struct gui_cmdline_parser_params params = { + .override = 1, + .initialize = 1, + .check_required = 0, + .check_ambiguity = 0 + }; if (!cf) { PARA_WARNING_LOG("%s", "there is no configuration to read"); @@ -1168,7 +1170,7 @@ static void com_reread_conf(void) } PARA_INFO_LOG("%s", "rereading command line options and config file"); gui_cmdline_parser(_argc, _argv, &conf); - gui_cmdline_parser_configfile(cf, &conf, 1, 1, 0); + gui_cmdline_parser_config_file(cf, &conf, ¶ms); PARA_NOTICE_LOG("%s", "config file reloaded"); if (check_key_map_args() < 0) finish(EXIT_FAILURE); @@ -1343,8 +1345,15 @@ int main(int argc, char *argv[]) conf.config_file_arg); exit(EXIT_FAILURE); } - if (cf) - gui_cmdline_parser_configfile(cf, &conf, 0, 0, 0); + if (cf) { + struct gui_cmdline_parser_params params = { + .override = 0, + .initialize = 0, + .check_required = 0, + .check_ambiguity = 0 + }; + gui_cmdline_parser_config_file(cf, &conf, ¶ms); + } if (check_key_map_args() < 0) { fprintf(stderr, "invalid key map in config file\n"); exit(EXIT_FAILURE);