aboutsummaryrefslogtreecommitdiffstats
path: root/vgasrc
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2009-05-26 00:47:32 -0400
committerKevin O'Connor <kevin@koconnor.net>2009-05-26 00:47:32 -0400
commit116a044f454800f8551f67577388c0ba6ee1fbca (patch)
tree4952b98e15ada066739532e6a488b657a17e5554 /vgasrc
parent82221b2bf19d69dc0bd76e72043abeb2136227c4 (diff)
downloadseabios-116a044f454800f8551f67577388c0ba6ee1fbca.tar.gz
VGA: Move cursor setting out of biosfn_write_teletype.
Call set_cursor_pos in callers that need it.
Diffstat (limited to 'vgasrc')
-rw-r--r--vgasrc/vga.c38
1 files changed, 14 insertions, 24 deletions
diff --git a/vgasrc/vga.c b/vgasrc/vga.c
index 6f954f37..06b3993d 100644
--- a/vgasrc/vga.c
+++ b/vgasrc/vga.c
@@ -206,12 +206,9 @@ check_scroll(struct cursorpos cp)
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 @@ biosfn_write_teletype(u8 page, struct carattr ca)
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 @@ biosfn_write_string(struct cursorpos cp, u8 flag, u8 attr, u16 count,
}
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 @@ handle_100e(struct bregs *regs)
// 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 @@ handle_1013(struct bregs *regs)
{
// 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));
}