From 83503e67222b293cf9faa34a7ea92264a2833797 Mon Sep 17 00:00:00 2001 From: verdant Date: Tue, 21 Jul 2026 19:06:09 +0800 Subject: Implement main application loop --- main.c | 170 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 170 insertions(+) create mode 100644 main.c (limited to 'main.c') diff --git a/main.c b/main.c new file mode 100644 index 0000000..ad8c088 --- /dev/null +++ b/main.c @@ -0,0 +1,170 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "display.h" +#include "err.h" +#include "log.h" +#include "mem.h" +#include "stat.h" +#include "version.h" +#include "wm.h" +/* #define PROC_PATH_VERSION "/proc/version" */ +/* #define PROC_PATH_MEMINFO "/proc/meminfo" */ + +/* typedef struct { */ +/* WINDOW* w; */ +/* char name[32]; */ +/* int starty; */ +/* int startx; */ +/* int height; */ +/* int width; */ +/* } win_info; */ + +/* int w_count = 0; */ + +/* int find_w_by_name(const char* name) { */ +/* for (int i = 0; i < w_count; i++) { */ +/* if (strcmp(windows[i].name, name) != 0) continue; */ + +/* return i; */ +/* } */ + +/* return -1; */ +/* } */ +/* void draw_bar(WINDOW* w, const char* label, int maxx, int y, int x, */ +/* unsigned long total, unsigned long ava) { */ +/* int ava_to_draw_x = maxx - STAT_INFO_WIDTH - BAR_LABEL_WIDTH; */ +/* int total_hashes = get_bar_ticks(ava_to_draw_x, total, ava); */ +/* char hashes[2048] = {0}; */ + +/* init_pair(COLOR_PAIR_PROGRESS, COLOR_GREEN, COLOR_BLACK); */ + +/* if (total_hashes > ava_to_draw_x) total_hashes = ava_to_draw_x; */ +/* memset(hashes, '#', total_hashes); */ +/* hashes[total_hashes] = '\0'; */ + +/* mvwprintw(w, y, x, "%-*s [", 4, label); */ +/* wprintw_colorful(w, COLOR_PAIR_PROGRESS, "%.*s", total_hashes, hashes); + */ + +/* int remaining_spaces = ava_to_draw_x - total_hashes; */ +/* if (remaining_spaces > 0) { */ +/* wprintw(w, "%*s", remaining_spaces, ""); */ +/* } */ + +/* waddch(w, ']'); */ + +/* wrefresh(w); */ +/* } */ + +/* WINDOW* fm_w_init(WINDOW* root_win, int maxy, int maxx) { */ +/* int stat_w_w, stat_w_h, fm_w, fm_h, fm_l_startx, fm_starty, fm_r_startx; + */ + +/* int i = find_w_by_name("stat"); */ +/* if (i == -1) { */ +/* die("Cannot find window \"stat\""); */ +/* } */ +/* stat_w_w = windows[i].width; */ +/* stat_w_h = windows[i].height; */ + +/* fm_w = maxx / 2; */ +/* fm_h = maxy - stat_w_h; */ +/* fm_starty = stat_w_h - STAT_BAR_HEIGHT; */ + +/* fm_l_startx = 0; */ +/* fm_r_startx = maxx / 2; */ +/* WINDOW* fm_l = derwin(root_win, fm_h, fm_w, fm_starty, 0); */ +/* return fm_l; */ +/* } */ + +/* void fm_load_dir(const char* path) { */ +/* DIR* dir = opendir(path); */ +/* log_write(LOG_INFO, "fm_load_dir: dir = %s", dir); */ +/* struct dirent* entry; */ + +/* if (!dir) die("Cannot open dir"); */ + +/* while ((entry = readdir(dir)) != NULL) { */ +/* log_write(LOG_INFO, "%s", entry->d_name); */ +/* } */ + +/* closedir(dir); */ +/* } */ + +/* char* get_cwd() { */ +/* static char cwd[PATH_MAX]; */ +/* if (getcwd(cwd, sizeof(cwd)) != NULL) { */ +/* return cwd; */ +/* } */ + +/* die("Cannot get current working directory"); */ +/* return NULL; */ +/* } */ + +int main() { + /* char* cwd; */ + int ch; + log_init(); + + terminal* t = ncurses_init(); + stat* s = stat_init(); + stat_get_sysver(s); + stat_get_diskinfo(s); + stat_get_meminfo(s); + stat_get_cpuinfo(s); + log_write(LOG_INFO, "Terminal maxx = %d, maxy = %d", t->maxy, t->maxx); + + draw_stat_bar(t, s->sysver); + + keypad(ROOT_WIN, TRUE); + + int stat_w_h = t->maxy / 8 < 4 ? 4 : t->maxy / 8; + + window* stat_w = wm_create_new_w(t, "stat", stat_w_h, t->maxx, 0, 0); + + /* cwd = get_cwd(); */ + + timeout(100); + while ((ch = getch()) != 'q') { + stat_get_meminfo(s); + stat_get_diskinfo(s); + + int sw_y, sw_x; + getmaxyx(stat_w->win, sw_y, sw_x); + wclear(stat_w->win); + wborder(stat_w->win, ' ', ' ', ' ', '-', ' ', ' ', '-', '-'); + stat_calc_cpuocc(s); + stat_draw_cpu_bar(stat_w->win, sw_x, 0, 0, s); + stat_print_cpu_info(stat_w->win, 0, sw_x, s); + stat_draw_bar(stat_w->win, "Mem", sw_x, 1, 0, s->meminfo.mem_total, + s->meminfo.mem_available); + stat_print_info(stat_w->win, 1, sw_x, "Mem", s->meminfo.mem_total, + s->meminfo.mem_available); + + stat_draw_bar(stat_w->win, "Disk", sw_x, 2, 0, s->diskinfo.disk_total, + s->diskinfo.disk_available); + stat_print_info(stat_w->win, 2, sw_x, "Disk", s->diskinfo.disk_total, + s->diskinfo.disk_available); + if (ch == KEY_RESIZE) { + wclear(t->windows[wm_fd_w_by_name(t, "stat_bar")]->win); + getmaxyx(stdscr, t->maxy, t->maxx); + draw_stat_bar(t, s->sysver); + } + + wm_refresh_all(t); + } + + endwin(); + return 0; +} -- cgit v1.2.3