/*
- * Copyright (C) 1998-2007 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 1998-2008 Andre Noll <maan@systemlinux.org>
*
* Licensed under the GPL v2. For licencing details see COPYING.
*/
/** \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"
/** 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)"
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;
para_install_sighandler(SIGCHLD);
para_install_sighandler(SIGWINCH);
para_install_sighandler(SIGUSR1);
- signal(SIGPIPE, SIG_IGN);
+// signal(SIGPIPE, SIG_IGN);
signal(SIGHUP, SIG_IGN);
}
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));
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("");
}
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);
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;
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);
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();
}
static int client_cmd_cmdline(char *cmd)
{
int ret, fds[3] = {0, 1, 0};
- char *c = make_message(BINDIR "/para_client %s", cmd);
+ char *c = make_message(BINDIR "/para_client -- %s", cmd);
outputf(COLOR_COMMAND, "%s", c);
print_in_bar(COLOR_MSG, "executing client command, hit any key to abort\n");
if (ret < 0)
return -1;
command_pipe = fds[1];
- mark_fd_nonblock(command_pipe);
+ mark_fd_nonblocking(command_pipe);
return send_output();
}
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();
}