summaryrefslogtreecommitdiffstats
path: root/lib/libvgl
diff options
context:
space:
mode:
authoryokota <yokota@FreeBSD.org>1999-08-28 02:39:10 +0000
committeryokota <yokota@FreeBSD.org>1999-08-28 02:39:10 +0000
commitd2b10320f08c5ea24be9ccdabd470fd8dcb308fe (patch)
treedaff993d3862dd0dd2b3bf15c2b2e2f5a92494fb /lib/libvgl
parentfeebbc0f37eba2f9055ad7728e4bd8cfe03c50ff (diff)
downloadFreeBSD-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.c17
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();
}
OpenPOWER on IntegriCloud