diff options
Diffstat (limited to 'sys/dev/cons')
-rw-r--r-- | sys/dev/cons/cons.c | 28 | ||||
-rw-r--r-- | sys/dev/cons/cons_ansi.c | 3 |
2 files changed, 14 insertions, 17 deletions
diff --git a/sys/dev/cons/cons.c b/sys/dev/cons/cons.c index ce2b154..0735f11 100644 --- a/sys/dev/cons/cons.c +++ b/sys/dev/cons/cons.c @@ -65,7 +65,6 @@ static struct cdevsw cons_cdevsw; static void cons_draw_cursor(struct cons_screen *scr, uint32_t color); static int cons_handle_special(struct cons_screen *scr, char c); -static void cons_clear_scr(struct cons_screen *scr, uint32_t bg); static uint32_t rgb_invert(uint32_t rgb) @@ -191,22 +190,14 @@ cons_handle_special(struct cons_screen *scr, char c) SHOW_CURSOR(scr); return 0; case ASCII_LF: - HIDE_CURSOR(scr); - /* Are we past screen width? */ if (scr->ch_row >= scr->nrows - 1) { cons_clear_scr(scr, scr->bg); - cons_flush(scr); - scr->ch_col = 0; - scr->ch_row = 0; - - /* Update cursor */ - scr->curs_row = 0; - scr->curs_col = 0; - SHOW_CURSOR(scr); return 0; } + HIDE_CURSOR(scr); + /* Make a newline */ cons_flush(scr); ++scr->ch_row; @@ -255,18 +246,25 @@ cons_draw_cursor(struct cons_screen *scr, uint32_t color) * @scr: Screen to clear. * @bg: Color to clear it to. */ -static void +void cons_clear_scr(struct cons_screen *scr, uint32_t bg) { struct fbdev fbdev = scr->fbdev; - struct cons_buf *bp; + + cons_flush(scr); + HIDE_CURSOR(scr); + + scr->ch_col = 0; + scr->ch_row = 0; + scr->curs_col = 0; + scr->curs_row = 0; for (size_t i = 0; i < fbdev.height * fbdev.pitch; ++i) { scr->fb_mem[i] = bg; } - bp = scr->ob[scr->nrows - 1]; - bp->flags |= CONS_BUF_CLEAN; + SHOW_CURSOR(scr); + } /* diff --git a/sys/dev/cons/cons_ansi.c b/sys/dev/cons/cons_ansi.c index 4403f9c..ab1f22a 100644 --- a/sys/dev/cons/cons_ansi.c +++ b/sys/dev/cons/cons_ansi.c @@ -90,8 +90,7 @@ ansi_feed(struct ansi_state *statep, char c) return c; case 2: if (c == 'H') { - cons_reset_cursor(&g_root_scr); - ansi_reset(statep); + cons_clear_scr(&g_root_scr, g_root_scr.bg); return ANSI_UPDATE_CURSOR; } break; |