diff --git a/cgminer.c b/cgminer.c index f09d6244..a7c5d495 100644 --- a/cgminer.c +++ b/cgminer.c @@ -1162,7 +1162,10 @@ WINDOW *mainwin, *statuswin, *logwin; #endif double total_secs = 0.1; static char statusline[256]; +/* logstart is where the log window should start */ static int devcursor, logstart, logcursor; +/* statusy is where the status window goes up to in cases where it won't fit at startup */ +static int statusy; struct cgpu_info gpus[MAX_GPUDEVICES]; /* Maximum number apparently possible */ struct cgpu_info *cpus; @@ -1255,7 +1258,7 @@ static void curses_print_status(void) wclrtoeol(statuswin); mvwprintw(statuswin, 5, 0, " Block: %s... Started: %s", current_hash, blocktime); mvwhline(statuswin, 6, 0, '-', 80); - mvwhline(statuswin, logstart - 1, 0, '-', 80); + mvwhline(statuswin, statusy - 1, 0, '-', 80); mvwprintw(statuswin, devcursor - 1, 1, "[P]ool management %s[S]ettings [D]isplay options [Q]uit", have_opencl ? "[G]PU management " : ""); } @@ -1273,10 +1276,11 @@ static void curses_print_devstatus(int thr_id) char logline[255]; cgpu->utility = cgpu->accepted / ( total_secs ? total_secs : 1 ) * 60; - if (total_devices > 14) - return; - mvwprintw(statuswin, devcursor + cgpu->cgminer_id, 0, " %s %d: ", cgpu->api->name, cgpu->device_id); + /* Check this isn't out of the window size */ + if (wmove(statuswin,devcursor + cgpu->cgminer_id, 0) == ERR) + return; + wprintw(statuswin, " %s %d: ", cgpu->api->name, cgpu->device_id); if (cgpu->api->get_statline_before) { logline[0] = '\0'; cgpu->api->get_statline_before(logline, cgpu); @@ -1293,10 +1297,10 @@ static void curses_print_devstatus(int thr_id) wprintw(statuswin, "REST "); else wprintw(statuswin, "%5.1f", cgpu->rolling); - adj_width(cgpu->accepted, &awidth); - adj_width(cgpu->rejected, &rwidth); - adj_width(cgpu->hw_errors, &hwwidth); - adj_width(cgpu->utility, &uwidth); + adj_width(cgpu->accepted, &awidth); + adj_width(cgpu->rejected, &rwidth); + adj_width(cgpu->hw_errors, &hwwidth); + adj_width(cgpu->utility, &uwidth); wprintw(statuswin, "/%5.1fMh/s | A:%*d R:%*d HW:%*d U:%*.2f/m", cgpu->total_mhashes / total_secs, awidth, cgpu->accepted, @@ -1325,16 +1329,31 @@ static void print_status(int thr_id) static inline bool change_logwinsize(void) { int x, y, logx, logy; + bool ret = false; getmaxyx(mainwin, y, x); - getmaxyx(logwin, logy, logx); + if (x < 80 || y < 25) + return ret; + + if (y > statusy + 2 && statusy < logstart) { + if (y - 2 < logstart) + statusy = y - 2; + else + statusy = logstart; + logcursor = statusy + 1; + mvwin(logwin, logcursor, 0); + wresize(statuswin, statusy, x); + ret = true; + } + y -= logcursor; + getmaxyx(logwin, logy, logx); /* Detect screen size change */ - if ((x != logx || y != logy) && x >= 80 && y >= 25) { + if (x != logx || y != logy) { wresize(logwin, y, x); - return true; + ret = true; } - return false; + return ret; } static void check_winsizes(void) @@ -1345,7 +1364,12 @@ static void check_winsizes(void) int y, x; x = getmaxx(statuswin); - wresize(statuswin, logstart, x); + if (logstart > LINES - 2) + statusy = LINES - 2; + else + statusy = logstart; + logcursor = statusy + 1; + wresize(statuswin, statusy, x); getmaxyx(mainwin, y, x); y -= logcursor; wresize(logwin, y, x); @@ -4365,6 +4389,7 @@ void enable_curses(void) { cbreak(); noecho(); curses_active = true; + statusy = logstart; unlock_curses(); } #endif @@ -4613,18 +4638,7 @@ int main(int argc, char *argv[]) load_temp_cutoffs(); - if (total_devices <= 14) { - logstart += total_devices; - } else { - applog(LOG_NOTICE, "Too many devices exist for per-device status lines"); - for (i = 0; i < total_devices; ++i) { - struct cgpu_info *cgpu = devices[i]; - - applog(LOG_NOTICE, "%s%d: %s", cgpu->api->name, cgpu->device_id, - cgpu->deven == DEV_ENABLED? "Enabled" : "Disabled"); - } - applog(LOG_NOTICE, "%d devices found, disabling per-device status lines", total_devices); - } + logstart += total_devices; logcursor = logstart + 1; #ifdef HAVE_CURSES