diff options
author | yokota <yokota@FreeBSD.org> | 1999-08-28 02:39:10 +0000 |
---|---|---|
committer | yokota <yokota@FreeBSD.org> | 1999-08-28 02:39:10 +0000 |
commit | d2b10320f08c5ea24be9ccdabd470fd8dcb308fe (patch) | |
tree | daff993d3862dd0dd2b3bf15c2b2e2f5a92494fb /lib/libvgl | |
parent | feebbc0f37eba2f9055ad7728e4bd8cfe03c50ff (diff) | |
download | FreeBSD-src-d2b10320f08c5ea24be9ccdabd470fd8dcb308fe.zip FreeBSD-src-d2b10320f08c5ea24be9ccdabd470fd8dcb308fe.tar.gz |
- Handle the signal SIGTERM.
- Slightly rearrange VGLCheckSwitch() to ensure the display content
will be correctly restored when switching back to the vty where
the vgl program is running.
- VGLEnd() should clear the screen only when the vty is in the
foreground.
Discussed with: sos
Diffstat (limited to 'lib/libvgl')
-rw-r--r-- | lib/libvgl/main.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/lib/libvgl/main.c b/lib/libvgl/main.c index 3e0a512..fc13f46 100644 --- a/lib/libvgl/main.c +++ b/lib/libvgl/main.c @@ -54,13 +54,11 @@ struct vt_mode smode; if (!VGLInitDone) return; -/* - while (!VGLOnDisplay) pause(); - VGLCheckSwitch();; -*/ - outb(0x3c4, 0x02); - outb(0x3c5, 0x0f); - bzero(VGLMem, 64*1024); + if (VGLOnDisplay && !VGLSwitchPending) { + outb(0x3c4, 0x02); + outb(0x3c5, 0x0f); + bzero(VGLMem, 64*1024); + } if (VGLOldMode >= M_VESA_BASE) { /* ugly, but necessary */ ioctl(0, _IO('V', VGLOldMode - M_VESA_BASE), 0); @@ -110,6 +108,7 @@ VGLInit(int mode) signal(SIGUSR1, VGLSwitch); signal(SIGINT, VGLAbort); + signal(SIGTERM, VGLAbort); signal(SIGSEGV, VGLAbort); signal(SIGBUS, VGLAbort); @@ -192,7 +191,7 @@ VGLInit(int mode) void VGLCheckSwitch() { - if (VGLSwitchPending) { + while (VGLSwitchPending) { int i; VGLSwitchPending = 0; @@ -236,8 +235,8 @@ VGLCheckSwitch() ioctl(0, VT_RELDISP, VT_TRUE); VGLDisplay->Bitmap = VGLBuf; VGLDisplay->Type = MEMBUF; + while (!VGLOnDisplay) pause(); } } - while (!VGLOnDisplay) pause(); } |