aboutsummaryrefslogtreecommitdiff
path: root/screen.c
diff options
context:
space:
mode:
Diffstat (limited to 'screen.c')
-rw-r--r--screen.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/screen.c b/screen.c
index bcd7f611..b78bc6c1 100644
--- a/screen.c
+++ b/screen.c
@@ -1,4 +1,4 @@
-/* $Id: screen.c,v 1.6 2007-08-27 10:08:44 nicm Exp $ */
+/* $Id: screen.c,v 1.7 2007-08-27 11:21:05 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -621,15 +621,16 @@ screen_sequence(struct screen *s, u_char *ptr)
void
screen_write_character(struct screen *s, u_char ch)
{
+ if (s->cx > screen_last_x(s)) {
+ s->cx = 0;
+ screen_cursor_down_scroll(s, 1);
+ }
+
s->grid_data[s->cy][s->cx] = ch;
s->grid_attr[s->cy][s->cx] = s->attr;
s->grid_colr[s->cy][s->cx] = s->colr;
s->cx++;
- if (s->cx > screen_last_x(s)) {
- s->cx = 0;
- screen_cursor_down_scroll(s, 1);
- }
}
/* Move cursor up and scroll if necessary. */
@@ -647,7 +648,7 @@ screen_cursor_up_scroll(struct screen *s, u_int ny)
void
screen_cursor_down_scroll(struct screen *s, u_int ny)
{
- if (screen_last_y(s) - s->cy < ny) {
+ if (s->cy + ny > screen_last_y(s)) {
screen_scroll_up(s, ny - (screen_last_y(s) - s->cy));
s->cy = screen_last_y(s);
} else