#include <curses.h>
#include "ringbuffer.h"
#include "string.h"
+#include "fd.h"
+#include "error.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 COLOR_BOT 40
struct gui_command {
- char *key;
- char *name;
- char *description;
+ const char *key;
+ const char *name;
+ const char *description;
void (*handler)(void);
};
* print aligned string to curses window. This function always prints
* exactly len chars.
*/
-static int align_str(WINDOW* win, char *string, unsigned int len,
+static int align_str(WINDOW* win, const char *string, unsigned int len,
unsigned int align)
{
int num; /* of spaces */
return 1;
}
-__printf_2_3 static void print_in_bar(int color, char *fmt,...)
+__printf_2_3 static void print_in_bar(int color, const char *fmt,...)
{
char *msg;
/*
* print formated output to bot win and refresh
*/
-__printf_2_3 static void outputf(int color, char* fmt,...)
+__printf_2_3 static void outputf(int color, const char* fmt,...)
{
char *msg;
rb_add_entry(COLOR_OUTPUT, para_strdup(line));
}
-void para_log(int ll, char *fmt,...)
+void para_log(int ll, const char *fmt,...)
{
int color;
char *msg;
/*
* exit curses and print given message to stdout/stderr
*/
-__printf_2_3 static void msg_n_exit(int ret, char* fmt, ...)
+__printf_2_3 static void msg_n_exit(int ret, const char* fmt, ...)
{
va_list argp;
FILE *outfd = ret? stderr: stdout;
/* audiod pipe */
if (audiod_pipe < 0)
audiod_pipe = open_audiod_pipe();
- if (audiod_pipe >= 0) {
- FD_SET(audiod_pipe, &rfds);
- max_fileno = MAX(max_fileno, audiod_pipe);
- }
-
+ if (audiod_pipe >= 0)
+ para_fd_set(audiod_pipe, &rfds, &max_fileno);
/* signal pipe */
- FD_SET(signal_pipe, &rfds);
- max_fileno = MAX(max_fileno, signal_pipe);
+ para_fd_set(signal_pipe, &rfds, &max_fileno);
/* command pipe only for COMMAND_MODE */
- if (command_pipe >= 0 && mode == COMMAND_MODE) {
- FD_SET(command_pipe, &rfds);
- max_fileno = MAX(max_fileno, command_pipe);
- }
- FD_SET(STDIN_FILENO, &rfds);
- ret = select(max_fileno + 1, &rfds, NULL, NULL, &tv);
+ if (command_pipe >= 0 && mode == COMMAND_MODE)
+ para_fd_set(command_pipe, &rfds, &max_fileno);
+ if (curses_active)
+ para_fd_set(STDIN_FILENO, &rfds, &max_fileno);
+ ret = para_select(max_fileno + 1, &rfds, NULL, &tv);
// PARA_DEBUG_LOG("select returned %d\n", ret);
-
+ if (ret <= 0)
+ goto check_return; /* skip fd checks */
/* signals */
if (FD_ISSET(signal_pipe, &rfds)) {
int sig_nr = para_next_signal();
if (sig_nr > 0)
handle_signal(sig_nr);
}
- if (ret <= 0)
- goto check_return; /* skip fd checks */
/* read command pipe if ready */
if (command_pipe >= 0 && mode == COMMAND_MODE &&
FD_ISSET(command_pipe, &rfds)) {
int i;
for (i = 0; i < conf.key_map_given; ++i) {
- char *s = conf.key_map_arg[i], *handler, *arg,
- *desc = "", tmp[MAXLINE];
+ char *handler, *arg, *tmp = para_strdup(conf.key_map_arg[i]);
+ const char *handler_text = "???", *desc = NULL;
- strcpy(tmp, s);
- if (!split_key_map(tmp, &handler, &arg))
+ if (!split_key_map(tmp, &handler, &arg)) {
+ free(tmp);
return;
- switch(*handler) {
+ }
+ switch (*handler) {
case 'i':
- handler = "internal";
+ handler_text = "internal";
desc = command_list[find_cmd_byname(arg)].description;
break;
- case 'x': handler = "external"; break;
- case 'd': handler = "display "; break;
- case 'p': handler = "para "; break;
+ case 'x': handler_text = "external"; break;
+ case 'd': handler_text = "display "; break;
+ case 'p': handler_text = "para "; break;
}
- outputf(COLOR_MSG, "%s\t%s\t%s%s\t%s", tmp, handler, arg,
+ outputf(COLOR_MSG, "%s\t%s\t%s%s\t%s", tmp, handler_text, arg,
strlen(arg) < 8? "\t" : "",
- desc);
+ desc? desc : "");
+ free(tmp);
}
for (i = 0; command_list[i].handler; i++) {
struct gui_command gc = command_list[i];
}
print_in_bar(COLOR_MSG, "try \"para_gui -h\" or \"para_client help\" "
"for more info");
- return;
}
static void com_shrink_top_win(void)