VGA: Move cursor setting out of biosfn_write_teletype.
Call set_cursor_pos in callers that need it.
diff --git a/vgasrc/vga.c b/vgasrc/vga.c
index 6f954f3..06b3993 100644
--- a/vgasrc/vga.c
+++ b/vgasrc/vga.c
@@ -206,12 +206,9 @@
return cp;
}
-static void
-biosfn_write_teletype(u8 page, struct carattr ca)
+static struct cursorpos
+write_teletype(struct cursorpos cp, struct carattr ca)
{
- // Get the cursor pos for the page
- struct cursorpos cp = get_cursor_pos(page);
-
switch (ca.car) {
case 7:
//FIXME should beep
@@ -244,24 +241,16 @@
cp.x++;
}
- cp = check_scroll(cp);
-
- // Set the cursor for the page
- set_cursor_pos(cp);
+ return check_scroll(cp);
}
static void
-biosfn_write_string(struct cursorpos cp, u8 flag, u8 attr, u16 count,
- u16 seg, u8 *offset_far)
+write_string(struct cursorpos cp, u8 flag, u8 attr, u16 count,
+ u16 seg, u8 *offset_far)
{
- // Read curs info for the page
- struct cursorpos oldcp = get_cursor_pos(cp.page);
-
// if row=0xff special case : use current cursor position
if (cp.y == 0xff)
- cp = oldcp;
-
- set_cursor_pos(cp);
+ cp = get_cursor_pos(cp.page);
while (count-- != 0) {
u8 car = GET_FARVAR(seg, *offset_far);
@@ -272,12 +261,11 @@
}
struct carattr ca = {car, attr, 1};
- biosfn_write_teletype(cp.page, ca);
+ cp = write_teletype(cp, ca);
}
- // Set back curs pos
- if ((flag & 0x01) == 0)
- set_cursor_pos(oldcp);
+ if (flag & 0x01)
+ set_cursor_pos(cp);
}
static void
@@ -601,7 +589,9 @@
// Ralf Brown Interrupt list is WRONG on bh(page)
// We do output only on the current page !
struct carattr ca = {regs->al, regs->bl, 0};
- biosfn_write_teletype(0xff, ca);
+ struct cursorpos cp = get_cursor_pos(0xff);
+ cp = write_teletype(cp, ca);
+ set_cursor_pos(cp);
}
static void
@@ -1004,8 +994,8 @@
{
// XXX - inline
struct cursorpos cp = {regs->dl, regs->dh, regs->bh};
- biosfn_write_string(cp, regs->al, regs->bl, regs->cx
- , regs->es, (void*)(regs->bp + 0));
+ write_string(cp, regs->al, regs->bl, regs->cx
+ , regs->es, (void*)(regs->bp + 0));
}