diff options
author | sobomax <sobomax@FreeBSD.org> | 2001-01-25 16:58:46 +0000 |
---|---|---|
committer | sobomax <sobomax@FreeBSD.org> | 2001-01-25 16:58:46 +0000 |
commit | 70c5ea5ee1c47566fdfe11eda7b0c27cc7c0e326 (patch) | |
tree | 8781e3769ac1234fdbe140937c74a56d25002a72 /lib | |
parent | 8926e07b424a3df32408a4cb747e17688f48f985 (diff) | |
download | FreeBSD-src-70c5ea5ee1c47566fdfe11eda7b0c27cc7c0e326.zip FreeBSD-src-70c5ea5ee1c47566fdfe11eda7b0c27cc7c0e326.tar.gz |
Don't hardcode geometry of VESA_800x600 raster text mode (80x25). Instead save
actual geometry before switching to the graphics mode.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libvgl/main.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/lib/libvgl/main.c b/lib/libvgl/main.c index c5b324c..d1cab57 100644 --- a/lib/libvgl/main.c +++ b/lib/libvgl/main.c @@ -57,6 +57,7 @@ static int VGLSwitchPending; static int VGLOnDisplay; static unsigned int VGLCurWindow; static int VGLInitDone = 0; +static struct winsize VGLOldWSize; void VGLEnd() @@ -79,8 +80,8 @@ struct vt_mode smode; ioctl(0, _IO('V', VGLOldMode - M_VESA_BASE), 0); if (VGLOldMode == M_VESA_800x600) { int size[3]; - size[0] = 80; - size[1] = 25; + size[0] = VGLOldWSize.ws_col; + size[1] = VGLOldWSize.ws_row; size[2] = 16; ioctl(0, KDRASTER, size); } @@ -144,6 +145,11 @@ VGLInit(int mode) if (ioctl(0, CONS_MODEINFO, &VGLModeInfo)) /* FBIO_MODEINFO */ return -1; + /* If current mode is VESA_800x600 then save its geometry to restore later */ + if ((VGLOldMode >= M_VESA_BASE) && (VGLOldMode == M_VESA_800x600)) + if (ioctl(0, TIOCGWINSZ, &VGLOldWSize)) + return -1; + VGLDisplay = (VGLBitmap *)malloc(sizeof(VGLBitmap)); if (VGLDisplay == NULL) return -2; |