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