#include "math.h" #include #include #include "ui.h" const char *uload = "█"; PROGRESS_BAR* new_progress_bar(WINDOW* scr, float total) { PROGRESS_BAR *bar = (PROGRESS_BAR*)malloc(sizeof(PROGRESS_BAR)); bar->scr = scr; bar->total = total; bar->current = 0; int x, y; int hx, hy; getmaxyx(scr, y, x); hx = x/2; hy = y/2; wmove(scr, hy-1, 0); wprintw(scr, uload); wmove(scr, hy, hx-4); wprintw(scr, "000%%"); wmove(scr, hy+1, hx); wprintw(scr, "%.0f/%.0f", 0.0, total); return bar; } void bar_step(PROGRESS_BAR* bar, float step){ bar->current += step; int x, y; int hx, hy; getmaxyx(bar->scr, y, x); hx = x/2; hy = y/2; float total = (bar->current/bar->total); wmove(bar->scr, hy-1, 0); for (int i = 0; i < ((float)x*total); i++) wprintw(bar->scr, uload); wmove(bar->scr, hy, hx-4); wprintw(bar->scr,"%03.0f%% ", total*100); int len = floor(log10(abs((int)bar->total))) + 3; wmove(bar->scr, hy+1, hx - len); wprintw(bar->scr, "%.0f/%.0f", bar->current, bar->total); wmove(bar->scr,0,0); wrefresh(bar->scr); }