From 031c4891b0be5abaa4ce86c9cad45388c11f9293 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sat, 7 May 2016 19:13:25 -0400 Subject: use pointer indirection to separate source files even more --- src/term.c | 60 +++++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 45 insertions(+), 15 deletions(-) (limited to 'src/term.c') diff --git a/src/term.c b/src/term.c index b764ad0..1b038a4 100644 --- a/src/term.c +++ b/src/term.c @@ -1,44 +1,74 @@ +#include #include #include "runes.h" +#include "config.h" +#include "display.h" +#include "pty-unix.h" +#include "window-xlib.h" + +static void runes_term_init_loop(RunesTerm *t, RunesLoop *loop); + void runes_term_init(RunesTerm *t, RunesLoop *loop, int argc, char *argv[]) { int width, height; - memset((void *)t, 0, sizeof(*t)); + t->config = calloc(1, sizeof(RunesConfig)); + runes_config_init(t->config, argc, argv); + + t->display = calloc(1, sizeof(RunesDisplay)); + runes_display_init(t->display, t->config->font_name); + + t->w = calloc(1, sizeof(RunesWindowBackend)); + runes_window_backend_init(t->w); + + t->pty = calloc(1, sizeof(RunesPtyBackend)); + runes_pty_backend_init(t->pty); - runes_config_init(t, argc, argv); - runes_display_init(t); + t->scr = calloc(1, sizeof(VT100Screen)); + vt100_screen_init(t->scr); runes_window_backend_create_window(t, argc, argv); runes_pty_backend_spawn_subprocess(t); - - vt100_screen_init(&t->scr); - vt100_screen_set_scrollback_length(&t->scr, t->config.scrollback_length); + vt100_screen_set_scrollback_length(t->scr, t->config->scrollback_length); runes_window_backend_get_size(t, &width, &height); runes_term_set_window_size(t, width, height); t->loop = loop; - runes_window_backend_init_loop(t, loop); - runes_pty_backend_init_loop(t, loop); + runes_term_init_loop(t, loop); } void runes_term_set_window_size(RunesTerm *t, int xpixel, int ypixel) { - int row = ypixel / t->display.fonty, col = xpixel / t->display.fontx; + int row = ypixel / t->display->fonty, col = xpixel / t->display->fontx; runes_display_set_window_size(t, xpixel, ypixel); runes_pty_backend_set_window_size(t, row, col, xpixel, ypixel); - vt100_screen_set_window_size(&t->scr, row, col); + vt100_screen_set_window_size(t->scr, row, col); } void runes_term_cleanup(RunesTerm *t) { - runes_config_cleanup(t); - runes_display_cleanup(t); - vt100_screen_cleanup(&t->scr); - runes_window_backend_cleanup(t); - runes_pty_backend_cleanup(t); + vt100_screen_cleanup(t->scr); + free(t->scr); + + runes_pty_backend_cleanup(t->pty); + free(t->pty); + + runes_window_backend_cleanup(t->w); + free(t->w); + + runes_display_cleanup(t->display); + free(t->display); + + runes_config_cleanup(t->config); + free(t->config); +} + +static void runes_term_init_loop(RunesTerm *t, RunesLoop *loop) +{ + runes_window_backend_init_loop(t, loop); + runes_pty_backend_init_loop(t, loop); } -- cgit v1.2.3-54-g00ecf