VGA: Simplify vgafb_write/read_char.
Pass cursor position into vgafb_write_char and vgafb_read_char.
Don't pass count into vgafb_write_char.
Break text writing into separate function.
diff --git a/vgasrc/vga.c b/vgasrc/vga.c
index 9d7ca30..53e8dd8 100644
--- a/vgasrc/vga.c
+++ b/vgasrc/vga.c
@@ -218,7 +218,7 @@
break;
default:
- vgafb_write_char(cp.page, ca, 1);
+ vgafb_write_char(cp, ca);
cp.x++;
}
@@ -513,23 +513,33 @@
static void
handle_1008(struct bregs *regs)
{
- struct carattr ca = vgafb_read_char(regs->bh);
+ struct carattr ca = vgafb_read_char(get_cursor_pos(regs->bh));
regs->al = ca.car;
regs->ah = ca.attr;
}
static void
+write_chars(u8 page, struct carattr ca, u16 count)
+{
+ struct cursorpos cp = get_cursor_pos(page);
+ while (count--) {
+ vgafb_write_char(cp, ca);
+ cp.x++;
+ }
+}
+
+static void
handle_1009(struct bregs *regs)
{
struct carattr ca = {regs->al, regs->bl, 1};
- vgafb_write_char(regs->bh, ca, regs->cx);
+ write_chars(regs->bh, ca, regs->cx);
}
static void
handle_100a(struct bregs *regs)
{
struct carattr ca = {regs->al, regs->bl, 0};
- vgafb_write_char(regs->bh, ca, regs->cx);
+ write_chars(regs->bh, ca, regs->cx);
}