Fix compilation on NetBSD.
[paraslash.git] / gui.c
diff --git a/gui.c b/gui.c
index 28291a867fd99aea2f6d4abeb96c7e671abc8fc3..2fddc2f8dbbf2674fae9613fcb8b99da616044ed 100644 (file)
--- a/gui.c
+++ b/gui.c
@@ -6,6 +6,9 @@
 
 /** \file gui.c ncurses-based interface for paraslash */
 
+#include <signal.h>
+#include <sys/types.h>
+#include <dirent.h>
 #include "gui.cmdline.h"
 #include "para.h"
 #include "gui.h"
@@ -20,7 +23,6 @@
 
 /** 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)"
@@ -58,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;
@@ -487,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);
 }
 
@@ -647,7 +649,6 @@ static void print_stat_item(int i)
        if (!curses_active || !d.len || !c)
                return;
        tmp = make_message("%s%s%s", d.prefix, c, d.postfix);
-//     PARA_DEBUG_LOG("%s: read: %s\n", __func__, tmp);
        wmove(top.win, d.y * top.lines / 100, d.x * COLS / 100);
        wrefresh(top.win);
        wattron(top.win, COLOR_PAIR(i + 1));
@@ -662,14 +663,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("");
        }
@@ -678,10 +680,11 @@ static void clear_all_items(void)
 static void init_colors(void)
 {
        int i;
+
        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);
@@ -723,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;
@@ -746,6 +750,8 @@ static int check_stat_line(char *line, __a_unused void *data)
        i = stat_line_valid(line);
        if (i >= 0) {
                line += strlen(status_item_list[i]) + 1;
+               if (*line == ' ')
+                       line++;
                free(stat_content[i]);
                stat_content[i] = para_strdup(line);
                print_stat_item(i);
@@ -914,8 +920,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();
                }
@@ -982,7 +988,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();
 }
 
@@ -998,7 +1004,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();
 }