@@ -163,15 +163,15 @@ void find_parents_for_clock(char *clkname, int complete)
strcat(name, clkname);
sprintf(str, "Enter Clock Name : %s\n", name);
- display_reset_cursor();
- display_print_line(0, str, 1, NULL);
- display_refresh_pad();
+ display_reset_cursor(CLOCK);
+ display_print_line(CLOCK, 0, str, 1, NULL);
+ display_refresh_pad(CLOCK);
return;
}
sprintf(name, "Parents for \"%s\" Clock : \n", clkname);
- display_reset_cursor();
- display_print_line(0, name, 1, NULL);
- display_refresh_pad();
+ display_reset_cursor(CLOCK);
+ display_print_line(CLOCK, 0, name, 1, NULL);
+ display_refresh_pad(CLOCK);
dump_all_parents(clkname);
}
@@ -271,7 +271,7 @@ static int clock_print_info_cb(struct tree *t, void *data)
if (!buffer)
return -1;
- display_print_line(*line, buffer, clock->usecount, t);
+ display_print_line(CLOCK, *line, buffer, clock->usecount, t);
(*line)++;
@@ -286,18 +286,18 @@ static int clock_print_info(void)
print_clock_header();
- display_reset_cursor();
+ display_reset_cursor(CLOCK);
ret = tree_for_each(clock_tree, clock_print_info_cb, &line);
- display_refresh_pad();
+ display_refresh_pad(CLOCK);
return ret;
}
int clock_toggle_expanded(void)
{
- struct tree *t = display_get_row_data();
+ struct tree *t = display_get_row_data(CLOCK);
struct clock_info *clk = t->private;
clk->expanded = !clk->expanded;
@@ -44,21 +44,24 @@ static const int maxrows = 1024;
static char footer_items[NUM_FOOTER_ITEMS][64];
-static char *win_names[TOTAL_FEATURE_WINS] = {
- "Clocks",
- "Regulators",
- "Sensors"
-};
-
struct rowdata {
int attr;
void *data;
};
-static struct rowdata *rowdata;
-static int nrdata;
-static int scrolling;
-static int cursor;
+struct windata {
+ struct rowdata *rowdata;
+ char *name;
+ int nrdata;
+ int scrolling;
+ int cursor;
+};
+
+struct windata windata[TOTAL_FEATURE_WINS] = {
+ { .name = "Clocks" },
+ { .name = "Regulators" },
+ { .name = "Sensors" },
+};
static void display_fini(void)
{
@@ -170,8 +173,8 @@ void show_header(int selectedwindow)
else
wattroff(header_win, A_REVERSE);
- print(header_win, curr_pointer, 0, " %s ", win_names[i]);
- curr_pointer += strlen(win_names[i]) + 2;
+ print(header_win, curr_pointer, 0, " %s ", windata[i].name);
+ curr_pointer += strlen(windata[i].name) + 2;
}
wrefresh(header_win);
werase(footer_win);
@@ -274,69 +277,74 @@ void print_sensor_header(void)
wrefresh(sensor_win);
}
-int display_refresh_pad(void)
+int display_refresh_pad(int win)
{
- return prefresh(clock_pad, scrolling, 0, 2, 0, maxy - 2, maxx);
+ return prefresh(clock_pad, windata[win].scrolling,
+ 0, 2, 0, maxy - 2, maxx);
}
-static int inline display_clock_un_select(int line, bool highlight, bool bold)
+static int inline display_clock_un_select(int win, int line,
+ bool highlight, bool bold)
{
if (mvwchgat(clock_pad, line, 0, -1,
highlight ? WA_STANDOUT :
bold ? WA_BOLD: WA_NORMAL, 0, NULL) < 0)
return -1;
- return display_refresh_pad();
+ return display_refresh_pad(win);
}
-int display_clock_select(int line)
+int display_select(int win, int line)
{
- return display_clock_un_select(line, true, false);
+ return display_clock_un_select(win, line, true, false);
}
-int display_clock_unselect(int line, bool bold)
+int display_unselect(int win, int line, bool bold)
{
- return display_clock_un_select(line, false, bold);
+ return display_clock_un_select(win, line, false, bold);
}
-void *display_get_row_data(void)
+void *display_get_row_data(int win)
{
- return rowdata[cursor].data;
+ return windata[win].rowdata[windata[win].cursor].data;
}
-int display_set_row_data(int line, void *data, int attr)
+int display_set_row_data(int win, int line, void *data, int attr)
{
- if (line >= nrdata) {
+ struct rowdata *rowdata = windata[win].rowdata;
+
+ if (line >= windata[win].nrdata) {
rowdata = realloc(rowdata, sizeof(struct rowdata) * (line + 1));
if (!rowdata)
return -1;
- nrdata = line + 1;
+ windata[win].nrdata = line + 1;
}
rowdata[line].data = data;
rowdata[line].attr = attr;
+ windata[win].rowdata = rowdata;
return 0;
}
-int display_reset_cursor(void)
+int display_reset_cursor(win)
{
- nrdata = 0;
+ windata[win].nrdata = 0;
werase(clock_pad);
return wmove(clock_pad, 0, 0);
}
-int display_print_line(int line, char *str, int bold, void *data)
+int display_print_line(int win, int line, char *str, int bold, void *data)
{
int attr = 0;
if (bold)
attr |= WA_BOLD;
- if (line == cursor)
+ if (line == windata[win].cursor)
attr |= WA_STANDOUT;
- if (display_set_row_data(line, data, attr))
+ if (display_set_row_data(win, line, data, attr))
return -1;
if (attr)
@@ -350,34 +358,50 @@ int display_print_line(int line, char *str, int bold, void *data)
return 0;
}
-int display_next_line(void)
+int display_next_line(int win)
{
+ int cursor = windata[win].cursor;
+ int nrdata = windata[win].nrdata;
+ int scrolling = windata[win].scrolling;
+ struct rowdata *rowdata = windata[win].rowdata;
+
if (cursor >= nrdata)
return cursor;
- display_clock_unselect(cursor, rowdata[cursor].attr);
+ display_unselect(win, cursor, rowdata[cursor].attr);
if (cursor < nrdata - 1) {
if (cursor >= (maxy - 4 + scrolling))
scrolling++;
cursor++;
}
- display_clock_select(cursor);
+ display_select(win, cursor);
+
+ windata[win].scrolling = scrolling;
+ windata[win].cursor = cursor;
return cursor;
}
-int display_prev_line(void)
+int display_prev_line(int win)
{
+ int cursor = windata[win].cursor;
+ int nrdata = windata[win].nrdata;
+ int scrolling = windata[win].scrolling;
+ struct rowdata *rowdata = windata[win].rowdata;
+
if (cursor >= nrdata)
return cursor;
- display_clock_unselect(cursor, rowdata[cursor].attr);
+ display_unselect(win, cursor, rowdata[cursor].attr);
if (cursor > 0) {
if (cursor <= scrolling)
scrolling--;
cursor--;
}
- display_clock_select(cursor);
+ display_select(win, cursor);
+
+ windata[win].scrolling = scrolling;
+ windata[win].cursor = cursor;
return cursor;
}
@@ -177,12 +177,12 @@ int keystroke_callback(bool *enter_hit, bool *findparent_ncurses,
if (options->selectedwindow == CLOCK) {
if (keystroke == KEY_DOWN) {
- display_next_line();
+ display_next_line(CLOCK);
*cont = true;
}
if (keystroke == KEY_UP) {
- display_prev_line();
+ display_prev_line(CLOCK);
*cont = true;
}
@@ -35,18 +35,18 @@ extern int print_clock_info(int hrow, int selected);
extern void print_string_val(char *name, char *val);
extern void print_clock_header(void);
-extern int display_print_line(int line, char *str, int bold, void *data);
+extern int display_print_line(int window, int line, char *str,
+ int bold, void *data);
-extern int display_refresh_pad(void);
-extern int display_reset_cursor(void);
-extern int display_next_line(void);
-extern int display_prev_line(void);
-
-extern void *display_get_row_data(void);
+extern int display_refresh_pad(int window);
+extern int display_reset_cursor(int window);
+extern int display_next_line(int window);
+extern int display_prev_line(int window);
+extern void *display_get_row_data(int window);
extern int clock_toggle_expanded(void);
-extern int display_clock_select(int line);
-extern int display_clock_unselect(int line, bool bold);
+extern int display_clock_select(int window, int line);
+extern int display_clock_unselect(int window, int line, bool bold);
extern void get_sensor_info(char *path, char *name, char *sensor, int verbose);
extern int read_and_print_sensor_info(int verbose);
That allows to keep track of the different selections from the different windows. Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org> --- clocks.c | 20 ++++++------ display.c | 96 ++++++++++++++++++++++++++++++++++++---------------------- powerdebug.c | 4 +- powerdebug.h | 18 +++++----- 4 files changed, 81 insertions(+), 57 deletions(-)