/* Draw a frame */ static void frame(WINDOW *win, int starty, int startx, int endy, int endx, char *label) { if(opts->color) { init_pair(DEFAULT_COLOR, COLOR_BLACK, COLOR_WHITE); wattron(win, COLOR_PAIR(DEFAULT_COLOR)); } /* Horizontal lines */ mvwhline(win, starty, startx, 0, endx - startx); mvwhline(win, endy, startx, 0, endx - startx); /* Vertical lines */ mvwvline(win, starty, startx, 0, endy - starty); mvwvline(win, starty, endx - 1, 0, endy - starty); /* Corners */ mvwhline(win, starty, startx, ACS_ULCORNER, 1); mvwhline(win, endy, startx, ACS_LLCORNER, 1); mvwhline(win, starty, endx - 1, ACS_URCORNER, 1); mvwhline(win, endy, endx - 1, ACS_LRCORNER, 1); /* Title */ mvwprintwc(win, starty, startx + 2, DEFAULT_COLOR, "%s", label); if(opts->color) wattroff(win, COLOR_PAIR(DEFAULT_COLOR)); }
/* Draw an usage bar in System tab */ static void draw_bar(WINDOW *win, const SizeInfo info, Labels *data, int bar) { int i, line, color, bar_count, adjust = 0; static int before = 0; const int val = 39, start = 46, end = info.width - 3, size = end - start; double percent; if((bar == SWAP && data->m_data->swap_total == 0) || (bar != SWAP && data->m_data->mem_total == 0)) return; line = bar - USED + LINE_8; color = YELLOW_BAR_COLOR + bar - USED; before = (bar == USED) ? 0 : before; percent = (double) data->m_data->mem_usage[bar - USED] / ((bar == SWAP) ? data->m_data->swap_total : data->m_data->mem_total); bar_count = (int) roundf(percent * (size - 1)); if(0.0 < percent && bar_count < 1) { bar_count = 1; adjust = 1; } /* Write percentage + delimiters */ mvwprintwc(win, line, val, LABEL_VALUE_COLOR, "%.2f%%", percent * 100); mvwprintwc(win, line, start, DEFAULT_COLOR, "["); mvwprintwc(win, line, end, DEFAULT_COLOR, "]"); /* Clean existing bar */ for(i = 0; i < size - 1; i++) mvwprintwc(win, line, start + 1 + i, DEFAULT_COLOR, " "); /* Draw bar */ for(i = 0; i < bar_count; i++) { if(opts->color) mvwprintwc(win, line, start + 1 + before + i, color, " "); else mvwprintw(win, line, start + 1 + before + i, "|"); } before += bar_count - adjust; }
/* The main window (title, tabs, footer) */ static void main_win(WINDOW *win, const SizeInfo info, Labels *data) { int i, cpt = 2; if(opts->color) { init_pair(DEFAULT_COLOR, COLOR_BLACK, COLOR_WHITE); wattrset(win, COLOR_PAIR(DEFAULT_COLOR)); } wclrscr(win); box(win, 0 , 0); mvwprintwc(win, TITLE_LINE, info.width / 2 - strlen(PRGNAME) / 2, TITLE_COLOR, PRGNAME); mvwprintwc(win, HEADER_LINE, 2, DEFAULT_COLOR, PRGNAME); mvwprintwc(win, HEADER_LINE, info.width / 2, DEFAULT_COLOR, data->tab_about[VERSIONSTR]); for(i = 1; i < info.width - 1; i++) mvwprintwc(win, TABS_LINE, i, INACTIVE_TAB_COLOR, " "); for(i = NO_CPU; i <= NO_ABOUT; i++) { if(i == page && opts->color) mvwprintwc(win, TABS_LINE, cpt, ACTIVE_TAB_COLOR, data->objects[i]); else if(i == page && !opts->color) mvwprintw(win, TABS_LINE, cpt++, "[%s]", data->objects[i]); else mvwprintwc(win, TABS_LINE, cpt, INACTIVE_TAB_COLOR, data->objects[i]); cpt += strlen(data->objects[i]) + 2; } wrefresh(win); }
/* Draw an usage bar in System tab */ static void draw_bar(WINDOW *win, const SizeInfo info, Labels *data, int bar) { int i, line, color, bar_count; const int val = 39, start = 46, end = info.width - 3, size = end - start; static double before; double percent; line = bar - USED + LINE_8; color = YELLOW_BAR_COLOR + bar - USED; before = (bar == USED || bar == SWAP) ? 0 : before; percent = (double) strtol(data->tab_system[VALUE][bar], NULL, 10) / strtol(strstr(data->tab_system[VALUE][bar], "/ ") + 2, NULL, 10); percent = (isnan(percent)) ? 0.00 : percent; bar_count = (int) roundf(percent * (size - 1)); bar_count = (0.0 < percent && bar_count < 1) ? 1 : bar_count; /* Write percentage + delimiters */ mvwprintwc(win, line, val, LABEL_VALUE_COLOR, "%.2f%%", percent * 100); mvwprintwc(win, line, start, DEFAULT_COLOR, "["); mvwprintwc(win, line, end, DEFAULT_COLOR, "]"); /* Clean existing bar */ for(i = 0; i < size - 1; i++) mvwprintwc(win, line, start + 1 + i, DEFAULT_COLOR, " "); /* Draw bar */ for(i = 0; i < bar_count; i++) { if(opts->color) mvwprintwc(win, line, start + 1 + before * size + i, color, " "); else mvwprintw(win, line, start + 1 + before * size + i, "|"); } before += percent; }
/* About tab */ static void ntab_about(WINDOW *win, const SizeInfo info, Labels *data) { char *part2 = strdup(data->tab_about[DESCRIPTION]); const char *part1 = strsep(&part2, "\n"); /* About CPU-X frame */ frame(win, LINE_0, info.start, LINE_5, info.width - 1, ""); mvwprintwc(win, LINE_2, 4, DEFAULT_COLOR, "%s", part1); mvwprintwc(win, LINE_3, 4, DEFAULT_COLOR, "%s", part2); frame(win, LINE_6, info.start, LINE_10, info.width - 1, data->objects[FRAMABOUT]); mvwprintwc(win, LINE_7, 20, DEFAULT_COLOR, "%s", data->tab_about[VERSIONSTR]); mvwprintwc(win, LINE_8, 20, DEFAULT_COLOR, "%s", data->tab_about[AUTHOR]); mvwprintwc(win, LINE_9, 20, DEFAULT_COLOR, "%s", data->tab_about[SITE]); frame(win, LINE_11, info.start, LINE_16, info.width - 1, data->objects[FRAMLICENSE]); mvwprintwc(win, LINE_12, 20, DEFAULT_COLOR, "%s", data->tab_about[COPYRIGHT]); mvwprintwc(win, LINE_14, 6, DEFAULT_COLOR, "%s", data->tab_about[LICENSE]); mvwprintwc(win, LINE_15, 10, DEFAULT_COLOR, "%s", data->tab_about[NOWARRANTY]); wrefresh(win); }
/* About tab */ static void ntab_about(WINDOW *win, const SizeInfo info, Labels *data) { char *part2 = strdup(data->objects[LABDESCRIPTION]); const char *part1 = strsep(&part2, "\n"); /* About CPU-X frame */ frame(win, LINE_0, info.start, LINE_5, info.width - 1, ""); mvwprintwc(win, LINE_2, 4, DEFAULT_COLOR, "%s", part1); mvwprintwc(win, LINE_3, 4, DEFAULT_COLOR, "%s", part2); frame(win, LINE_6, info.start, LINE_10, info.width - 1, data->objects[FRAMABOUT]); mvwprintwc(win, LINE_7, 20, DEFAULT_COLOR, "%s", data->objects[LABVERSION]); mvwprintwc(win, LINE_8, 20, DEFAULT_COLOR, "%s", data->objects[LABAUTHOR]); mvwprintwc(win, LINE_9, 20, DEFAULT_COLOR, "%s", "GitHub : https://github.com/X0rg"); frame(win, LINE_11, info.start, LINE_16, info.width - 1, data->objects[FRAMLICENSE]); mvwprintwc(win, LINE_12, 20, DEFAULT_COLOR, "%s", PRGCPYR); mvwprintwc(win, LINE_14, 4, DEFAULT_COLOR, "%s", data->objects[LABLICENSE]); mvwprintwc(win, LINE_15, 30, DEFAULT_COLOR, "%s", "GPLv3"); wrefresh(win); }
/* Display active Test in Caches tab */ static void print_activetest(WINDOW *win, Labels *data) { if(HAS_BANDWIDTH) mvwprintwc(win, LINE_16, 12, DEFAULT_COLOR, "%s", data->w_data->test_name[opts->bw_test]); }
/* Display active Core in CPU tab */ static void print_activecore(WINDOW *win) { char buff[16]; sprintf(buff, _("Core #%i"), opts->selected_core); mvwprintwc(win, LINE_17, 4, DEFAULT_COLOR, buff); }