diff options
author | Jesse Luehrs <doy@tozt.net> | 2014-04-25 01:46:23 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2014-04-25 01:46:23 -0400 |
commit | c55dd7f8ddf70d45fac028050fef94b1638c402b (patch) | |
tree | 47267c67a4e50632e1d64e1aa7f37f9a5f012ea5 /src/screen.c | |
parent | 95892504bf2fc1f9ce860b85e37277c320658407 (diff) | |
download | runes-c55dd7f8ddf70d45fac028050fef94b1638c402b.tar.gz runes-c55dd7f8ddf70d45fac028050fef94b1638c402b.zip |
implement the alternate screen
Diffstat (limited to 'src/screen.c')
-rw-r--r-- | src/screen.c | 46 |
1 files changed, 38 insertions, 8 deletions
diff --git a/src/screen.c b/src/screen.c index 810423e..4fde589 100644 --- a/src/screen.c +++ b/src/screen.c @@ -338,26 +338,56 @@ void runes_screen_reset_inverse(RunesTerm *t) void runes_screen_use_alternate_buffer(RunesTerm *t) { - UNUSED(t); - fprintf(stderr, "use_alternate_buffer nyi\n"); + RunesScreen *scr = &t->scr; + int i; + + if (scr->alternate) { + return; + } + + runes_screen_save_cursor(t); + + scr->alternate = scr->rows; + + scr->rows = calloc(scr->max.row, sizeof(struct runes_row)); + for (i = 0; i < scr->max.row; ++i) { + scr->rows[i].cells = calloc( + scr->max.col, sizeof(struct runes_cell)); + } } void runes_screen_use_normal_buffer(RunesTerm *t) { - UNUSED(t); - fprintf(stderr, "use_normal_buffer nyi\n"); + RunesScreen *scr = &t->scr; + int i; + + if (!scr->alternate) { + return; + } + + for (i = 0; i < scr->max.row; ++i) { + free(scr->rows[i].cells); + } + free(scr->rows); + + scr->rows = scr->alternate; + scr->alternate = NULL; + + runes_screen_restore_cursor(t); } void runes_screen_save_cursor(RunesTerm *t) { - UNUSED(t); - fprintf(stderr, "save_cursor nyi\n"); + RunesScreen *scr = &t->scr; + + scr->saved = scr->cur; } void runes_screen_restore_cursor(RunesTerm *t) { - UNUSED(t); - fprintf(stderr, "restore_cursor nyi\n"); + RunesScreen *scr = &t->scr; + + scr->cur = scr->saved; } void runes_screen_show_cursor(RunesTerm *t) |