X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=gui.c;h=48d4b51b6445c902a791755cc84737f3421dafc7;hb=3367017659e639aa8925ff4c607f1d41d24e657e;hp=38addd9815cc5bf2775c80278679a1e9c64e872e;hpb=1c8226eae0e976d940366cd10bd708d8e4d0bca5;p=paraslash.git diff --git a/gui.c b/gui.c index 38addd98..48d4b51b 100644 --- a/gui.c +++ b/gui.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 1998-2011 Andre Noll + * Copyright (C) 1998-2012 Andre Noll * * Licensed under the GPL v2. For licencing details see COPYING. */ @@ -9,7 +9,6 @@ #include #include #include -#include #include #include "gui.cmdline.h" @@ -22,6 +21,7 @@ #include "list.h" #include "sched.h" #include "signal.h" +#include "version.h" /** define the array of error lists needed by para_gui */ INIT_GUI_ERRLISTS; @@ -33,10 +33,10 @@ static int signal_pipe; static struct win_data { WINDOW *win; - NCURSES_SIZE_T begx; - NCURSES_SIZE_T begy; - NCURSES_SIZE_T cols; - NCURSES_SIZE_T lines; + size_t begx; + size_t begy; + size_t cols; + size_t lines; } top, bot, sb, in, sep; #define RINGBUFFER_SIZE 512 @@ -99,7 +99,7 @@ static void com_reread_conf(void); static void com_enlarge_top_win(void); static void com_shrink_top_win(void); static void com_version(void); -static void com_quit(void); +__noreturn static void com_quit(void); static void com_refresh(void); static void com_ll_incr(void); static void com_ll_decr(void); @@ -336,11 +336,14 @@ static int align_str(WINDOW* win, char *str, unsigned int len, __printf_2_3 static void print_in_bar(int color, const char *fmt,...) { char *msg; + va_list ap; if (!curses_active) return; wattron(in.win, COLOR_PAIR(color)); - PARA_VSPRINTF(fmt, msg); + va_start(ap, fmt); + xvasprintf(&msg, fmt, ap); + va_end(ap); wmove(in.win, 0, 0); align_str(in.win, msg, sb.cols, LEFT); free(msg); @@ -471,10 +474,13 @@ static void rb_add_entry(int color, char *msg) __printf_2_3 static void outputf(int color, const char* fmt,...) { char *msg; + va_list ap; if (!curses_active) return; - PARA_VSPRINTF(fmt, msg); + va_start(ap, fmt); + xvasprintf(&msg, fmt, ap); + va_end(ap); rb_add_entry(color, msg); wrefresh(bot.win); } @@ -489,10 +495,11 @@ static int add_output_line(char *line, __a_unused void *data) static int loglevel; -__printf_2_3 void para_log(int ll, const char *fmt,...) +__printf_2_3 void curses_log(int ll, const char *fmt,...) { int color; char *msg; + va_list ap; if (ll < loglevel || !curses_active) return; @@ -505,11 +512,14 @@ __printf_2_3 void para_log(int ll, const char *fmt,...) default: color = COLOR_ERRMSG; } - PARA_VSPRINTF(fmt, msg); + va_start(ap, fmt); + xvasprintf(&msg, fmt, ap); + va_end(ap); chop(msg); rb_add_entry(color, msg); wrefresh(bot.win); } +__printf_2_3 void (*para_log)(int, const char*, ...) = curses_log; static void setup_signal_handling(void) { @@ -1044,26 +1054,25 @@ check_return: /* * read from command pipe and print data to bot window */ -static int send_output(void) +static void send_output(void) { int ret; if (command_pipe < 0) - return 0; + return; ret = mark_fd_nonblocking(command_pipe); if (ret < 0) { close(command_pipe); - return ret; + return; } if (do_select(COMMAND_MODE) >= 0) PARA_INFO_LOG("command complete"); else PARA_NOTICE_LOG("command aborted"); print_in_bar(COLOR_MSG, " "); - return 1; } -static int client_cmd_cmdline(char *cmd) +static void para_cmd(char *cmd) { int ret, fds[3] = {0, 1, 0}; char *c = make_message(BINDIR "/para_client -- %s", cmd); @@ -1073,41 +1082,40 @@ static int client_cmd_cmdline(char *cmd) ret = para_exec_cmdline_pid(&cmd_pid, c, fds); free(c); if (ret < 0) - return -1; + return; command_pipe = fds[1]; - return send_output(); + send_output(); } /* * exec command and print output to bot win */ -static int display_cmd(char *cmd) +static void display_cmd(char *cmd) { int fds[3] = {0, 1, 0}; print_in_bar(COLOR_MSG, "executing display command, hit any key to abort"); outputf(COLOR_COMMAND, "%s", cmd); if (para_exec_cmdline_pid(&cmd_pid, cmd, fds) < 0) - return -1; + return; command_pipe = fds[1]; - return send_output(); + send_output(); } /* * shutdown curses and stat pipe before executing external commands */ -static int external_cmd(char *cmd) +static void external_cmd(char *cmd) { int fds[3] = {-1, -1, -1}; if (cmd_pid) - return -1; + return; shutdown_curses(); para_exec_cmdline_pid(&cmd_pid, cmd, fds); cmd_died = 0; do_select(EXTERNAL_MODE); init_curses(); - return 0; } static void print_scroll_msg(void) @@ -1426,7 +1434,7 @@ static void handle_command(int c) else if (*handler == 'x') external_cmd(arg); else if (*handler == 'p') - client_cmd_cmdline(arg); + para_cmd(arg); else if (*handler == 'i') { int num = find_cmd_byname(arg); if (num >= 0)