if (pcp->y > nbrows) {
pcp->y--;
- struct vgamode_s *vmode_g = get_current_mode();
- if (!vmode_g)
- return;
-
struct cursorpos dest = {0, 0, pcp->page};
struct cursorpos src = {0, 1, pcp->page};
struct cursorpos size = {GET_BDA(video_cols), nbrows};
- vgafb_move_chars(vmode_g, dest, src, size);
+ vgafb_move_chars(dest, src, size);
struct cursorpos clr = {0, nbrows, pcp->page};
struct carattr attr = {' ', 0, 0};
struct cursorpos clrsize = {GET_BDA(video_cols), 1};
- vgafb_clear_chars(vmode_g, clr, attr, clrsize);
+ vgafb_clear_chars(clr, attr, clrsize);
}
}
if (wincols <= 0 || winrows <= 0)
return;
- struct vgamode_s *vmode_g = get_current_mode();
- if (!vmode_g)
- return;
-
u8 page = GET_BDA(video_page);
int clearlines = regs->al, movelines = winrows - clearlines;
if (!clearlines || movelines <= 0) {
struct cursorpos clr = {ulx, uly, page};
struct carattr attr = {' ', regs->bh, 1};
struct cursorpos clrsize = {wincols, winrows};
- vgafb_clear_chars(vmode_g, clr, attr, clrsize);
+ vgafb_clear_chars(clr, attr, clrsize);
return;
}
struct cursorpos dest = {ulx, uly, page};
struct cursorpos src = {ulx, uly + clearlines, page};
struct cursorpos size = {wincols, movelines};
- vgafb_move_chars(vmode_g, dest, src, size);
+ vgafb_move_chars(dest, src, size);
struct cursorpos clr = {ulx, uly + movelines, page};
struct carattr attr = {' ', regs->bh, 1};
struct cursorpos clrsize = {wincols, clearlines};
- vgafb_clear_chars(vmode_g, clr, attr, clrsize);
+ vgafb_clear_chars(clr, attr, clrsize);
} else {
// Scroll down
struct cursorpos dest = {ulx, uly + clearlines, page};
struct cursorpos src = {ulx, uly, page};
struct cursorpos size = {wincols, movelines};
- vgafb_move_chars(vmode_g, dest, src, size);
+ vgafb_move_chars(dest, src, size);
struct cursorpos clr = {ulx, uly, page};
struct carattr attr = {' ', regs->bh, 1};
struct cursorpos clrsize = {wincols, clearlines};
- vgafb_clear_chars(vmode_g, clr, attr, clrsize);
+ vgafb_clear_chars(clr, attr, clrsize);
}
}
void init_gfx_op(struct gfx_op *op, struct vgamode_s *vmode_g);
void handle_gfx_op(struct gfx_op *op);
void *text_address(struct cursorpos cp);
-void vgafb_move_chars(struct vgamode_s *vmode_g, struct cursorpos dest
+void vgafb_move_chars(struct cursorpos dest
, struct cursorpos src, struct cursorpos movesize);
-void vgafb_clear_chars(struct vgamode_s *vmode_g, struct cursorpos dest
+void vgafb_clear_chars(struct cursorpos dest
, struct carattr ca, struct cursorpos movesize);
void vgafb_write_char(struct cursorpos cp, struct carattr ca);
struct carattr vgafb_read_char(struct cursorpos cp);
// Move characters on screen.
void
-vgafb_move_chars(struct vgamode_s *vmode_g, struct cursorpos dest
+vgafb_move_chars(struct cursorpos dest
, struct cursorpos src, struct cursorpos movesize)
{
+ struct vgamode_s *vmode_g = get_current_mode();
+ if (!vmode_g)
+ return;
+
if (GET_GLOBAL(vmode_g->memmodel) != MM_TEXT) {
gfx_move_chars(vmode_g, dest, src, movesize);
return;
// Clear are of screen.
void
-vgafb_clear_chars(struct vgamode_s *vmode_g, struct cursorpos dest
+vgafb_clear_chars(struct cursorpos dest
, struct carattr ca, struct cursorpos clearsize)
{
+ struct vgamode_s *vmode_g = get_current_mode();
+ if (!vmode_g)
+ return;
+
if (GET_GLOBAL(vmode_g->memmodel) != MM_TEXT) {
gfx_clear_chars(vmode_g, dest, ca, clearsize);
return;