Serial console improvements, by Stefan Weil.

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2412 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
ths 2007-02-10 22:37:56 +00:00
parent dbcf5e82de
commit ed8276ac7e

View File

@ -533,21 +533,24 @@ static void console_show_cursor(TextConsole *s, int show)
int y, y1; int y, y1;
if (s == active_console) { if (s == active_console) {
int x = s->x;
if (x >= s->width) {
x = s->width - 1;
}
y1 = (s->y_base + s->y) % s->total_height; y1 = (s->y_base + s->y) % s->total_height;
y = y1 - s->y_displayed; y = y1 - s->y_displayed;
if (y < 0) if (y < 0)
y += s->total_height; y += s->total_height;
if (y < s->height) { if (y < s->height) {
c = &s->cells[y1 * s->width + s->x]; c = &s->cells[y1 * s->width + x];
if (show) { if (show) {
TextAttributes t_attrib = s->t_attrib_default; TextAttributes t_attrib = s->t_attrib_default;
t_attrib.invers = !(t_attrib.invers); /* invert fg and bg */ t_attrib.invers = !(t_attrib.invers); /* invert fg and bg */
vga_putcharxy(s->ds, s->x, y, c->ch, &t_attrib); vga_putcharxy(s->ds, x, y, c->ch, &t_attrib);
} else { } else {
vga_putcharxy(s->ds, s->x, y, c->ch, vga_putcharxy(s->ds, x, y, c->ch, &(c->t_attrib));
&(c->t_attrib));
} }
dpy_update(s->ds, s->x * FONT_WIDTH, y * FONT_HEIGHT, dpy_update(s->ds, x * FONT_WIDTH, y * FONT_HEIGHT,
FONT_WIDTH, FONT_HEIGHT); FONT_WIDTH, FONT_HEIGHT);
} }
} }
@ -796,8 +799,10 @@ static void console_putchar(TextConsole *s, int ch)
s->state = TTY_STATE_ESC; s->state = TTY_STATE_ESC;
break; break;
default: default:
if (s->x >= s->width - 1) { if (s->x >= s->width) {
break; /* line wrap */
s->x = 0;
console_put_lf(s);
} }
y1 = (s->y_base + s->y) % s->total_height; y1 = (s->y_base + s->y) % s->total_height;
c = &s->cells[y1 * s->width + s->x]; c = &s->cells[y1 * s->width + s->x];
@ -805,12 +810,6 @@ static void console_putchar(TextConsole *s, int ch)
c->t_attrib = s->t_attrib; c->t_attrib = s->t_attrib;
update_xy(s, s->x, s->y); update_xy(s, s->x, s->y);
s->x++; s->x++;
#if 0 /* line wrap disabled */
if (s->x >= s->width) {
s->x = 0;
console_put_lf(s);
}
#endif
break; break;
} }
break; break;