diff options
Diffstat (limited to 'main.c')
-rw-r--r-- | main.c | 45 |
1 files changed, 9 insertions, 36 deletions
diff --git a/main.c b/main.c index adc488a..64343bc 100644 --- a/main.c +++ b/main.c @@ -7,30 +7,10 @@ #include "doc.h" #include "net.h" #include "err.h" +#include "nav.h" /* pagination */ -size_t pg_lines() { - return 24; -} - -void pg_down(void) { - size_t lines = pg_lines(); - while (lines--) doc_print_line(); -} - -void pg_up(void) { - size_t lines = pg_lines() << 1; - while (lines--) doc_back_line(); - pg_down(); -} - -void pg_redraw(void) { - size_t lines = pg_lines(); - while (lines--) doc_back_line(); - pg_down(); -} - /* navigation */ int nav_to(const char *url) { @@ -56,7 +36,7 @@ struct cmd { /* cmd is mutated when trimming strings * returns whether to quit */ -int cmd_do(char *cmd) { +int cmd_do(char *cmd, struct nav_state *ns) { switch (*cmd) { case 'q': puts("goodbye!"); @@ -74,13 +54,13 @@ int cmd_do(char *cmd) { } break; case 'b': - pg_up(); + nav_pg_up(ns); break; case '\0': - pg_down(); + nav_pg_down(ns); break; case 'r': - pg_redraw(); + nav_redraw(ns); break; case 'g': if (nav_to(cmd + 1)) perr("navigation failure"); @@ -108,23 +88,16 @@ int cmd_get(char *buf, size_t n) { return !!fgets(buf, n, stdin); } -void init(void) { - doc_init(); -} - -void fini(void) { - doc_fini(); -} - int main(void) { + struct nav_state ns; char cmd_buf[1024]; - init(); - atexit(fini); + nav_init(&ns); while (cmd_get(cmd_buf, sizeof cmd_buf)) { cmd_trim(cmd_buf, sizeof cmd_buf); - if (cmd_do(cmd_buf)) { + if (cmd_do(cmd_buf, &ns)) { break; } } + nav_fini(&ns); return 0; } |