kern/139576: blink screen too noisy
Walter C. Pelissero
walter at pelissero.de
Thu Oct 15 14:23:24 UTC 2009
I've been reconsidering the modification, and I believe the border
blinking can be improved:
Index: syscons.c
===================================================================
RCS file: /repos/src/sys/dev/syscons/syscons.c,v
retrieving revision 1.453.2.4
diff -c -r1.453.2.4 syscons.c
*** syscons.c 4 May 2009 21:00:43 -0000 1.453.2.4
--- syscons.c 15 Oct 2009 14:00:32 -0000
***************
*** 3629,3636 ****
sc_switch_scr(scp->sc, scp->sc->delayed_next_scr - 1);
}
else {
! (*scp->rndr->draw)(scp, 0, scp->xsize*scp->ysize,
! scp->sc->blink_in_progress & 1);
scp->sc->blink_in_progress--;
timeout(blink_screen, scp, hz / 10);
}
--- 3629,3649 ----
sc_switch_scr(scp->sc, scp->sc->delayed_next_scr - 1);
}
else {
! int on = scp->sc->blink_in_progress & 1;
! vr_draw_t *draw = scp->rndr->draw;
!
! if (scp->sc->flags & SC_QUIET_BELL) {
! /* blink the screen border only */
! int i;
!
! (*draw)(scp, 0, scp->xsize + 1, on);
! (*draw)(scp, scp->xsize * (scp->ysize - 1) - 1,
! scp->xsize + 1, on);
! for (i = 2; i < scp->ysize - 1; ++i)
! (*draw)(scp, scp->xsize * i - 1, 2, on);
! } else
! /* blink the entire screen */
! (*draw)(scp, 0, scp->xsize * scp->ysize, on);
scp->sc->blink_in_progress--;
timeout(blink_screen, scp, hz / 10);
}
This version is neater (conforms to FreeBSD indentation standards) and
more efficient (it saves some calls to draw()).
Thus the proposed patch becomes the following:
Index: sys/dev/syscons/syscons.c
===================================================================
RCS file: /repos/src/sys/dev/syscons/syscons.c,v
retrieving revision 1.453.2.4
diff -u -r1.453.2.4 syscons.c
--- sys/dev/syscons/syscons.c 4 May 2009 21:00:43 -0000 1.453.2.4
+++ sys/dev/syscons/syscons.c 15 Oct 2009 13:57:05 -0000
@@ -3629,8 +3629,21 @@
sc_switch_scr(scp->sc, scp->sc->delayed_next_scr - 1);
}
else {
- (*scp->rndr->draw)(scp, 0, scp->xsize*scp->ysize,
- scp->sc->blink_in_progress & 1);
+ int on = scp->sc->blink_in_progress & 1;
+ vr_draw_t *draw = scp->rndr->draw;
+
+ if (scp->sc->flags & SC_QUIET_BELL) {
+ /* blink the screen border only */
+ int i;
+
+ (*draw)(scp, 0, scp->xsize + 1, on);
+ (*draw)(scp, scp->xsize * (scp->ysize - 1) - 1,
+ scp->xsize + 1, on);
+ for (i = 2; i < scp->ysize - 1; ++i)
+ (*draw)(scp, scp->xsize * i - 1, 2, on);
+ } else
+ /* blink the entire screen */
+ (*draw)(scp, 0, scp->xsize * scp->ysize, on);
scp->sc->blink_in_progress--;
timeout(blink_screen, scp, hz / 10);
}
Index: sys/sys/consio.h
===================================================================
RCS file: /repos/src/sys/sys/consio.h,v
retrieving revision 1.18
diff -u -r1.18 consio.h
--- sys/sys/consio.h 27 Sep 2006 19:57:01 -0000 1.18
+++ sys/sys/consio.h 15 Oct 2009 13:57:33 -0000
@@ -113,6 +113,7 @@
/* set the bell type to audible or visual */
#define CONS_VISUAL_BELL (1 << 0)
#define CONS_QUIET_BELL (1 << 1)
+#define CONS_BORDER_BELL (CONS_VISUAL_BELL | CONS_QUIET_BELL)
#define CONS_BELLTYPE _IOW('c', 8, int)
/* set the history (scroll back) buffer size (in lines) */
Index: usr.sbin/kbdcontrol/kbdcontrol.1
===================================================================
RCS file: /repos/src/usr.sbin/kbdcontrol/kbdcontrol.1,v
retrieving revision 1.42
diff -u -r1.42 kbdcontrol.1
--- usr.sbin/kbdcontrol/kbdcontrol.1 16 Nov 2006 13:43:05 -0000 1.42
+++ usr.sbin/kbdcontrol/kbdcontrol.1 15 Oct 2009 13:58:00 -0000
@@ -84,9 +84,11 @@
.Cm normal
which sets sound parameters back to normal values,
.Cm off
-which disables the bell entirely, or
+which disables the bell entirely,
.Cm visual
-which sets the bell to visual mode, i.e., flashes the screen instead.
+which sets the bell to visual mode, i.e., flashes the screen instead, or
+.Cm border
+which flashes just the border instead of the whole screen.
If
.Ar belltype
is preceded by the word
Index: usr.sbin/kbdcontrol/kbdcontrol.c
===================================================================
RCS file: /repos/src/usr.sbin/kbdcontrol/kbdcontrol.c,v
retrieving revision 1.51
diff -u -r1.51 kbdcontrol.c
--- usr.sbin/kbdcontrol/kbdcontrol.c 16 Nov 2006 12:27:51 -0000 1.51
+++ usr.sbin/kbdcontrol/kbdcontrol.c 15 Oct 2009 13:58:00 -0000
@@ -912,6 +912,8 @@
}
if (!strcmp(opt, "visual"))
bell |= CONS_VISUAL_BELL;
+ else if (!strcmp(opt, "border"))
+ bell |= CONS_BORDER_BELL;
else if (!strcmp(opt, "normal"))
duration = 5, pitch = 800;
else if (!strcmp(opt, "off"))
--
walter pelissero
http://www.pelissero.de
More information about the freebsd-bugs
mailing list