From owner-freebsd-bugs@FreeBSD.ORG Thu Oct 15 14:23:24 2009 Return-Path: Delivered-To: freebsd-bugs@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DDACD1065670 for ; Thu, 15 Oct 2009 14:23:24 +0000 (UTC) (envelope-from walter.pelissero@iesy.net) Received: from mail01.ish.de (wsmip253.ish.de [80.69.98.253]) by mx1.freebsd.org (Postfix) with ESMTP id 74F828FC0C for ; Thu, 15 Oct 2009 14:23:24 +0000 (UTC) Received: from [81.210.218.206] (account walter.pelissero@iesy.net HELO zaphod.home.loc) by mail-fe-01.mail01.ish.de (CommuniGate Pro SMTP 5.2.12) with ESMTPSA id 295304575; Thu, 15 Oct 2009 16:13:17 +0200 Received: from zaphod.home.loc (localhost [127.0.0.1]) by zaphod.home.loc (8.14.3/8.14.1) with ESMTP id n9FE9Yqf000576; Thu, 15 Oct 2009 16:09:34 +0200 (CEST) (envelope-from wcp@zaphod.home.loc) Received: (from wcp@localhost) by zaphod.home.loc (8.14.3/8.13.3/Submit) id n9FE9Y0U000575; Thu, 15 Oct 2009 16:09:34 +0200 (CEST) (envelope-from wcp) From: "Walter C. Pelissero" MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <19159.11549.219908.921862@zaphod.home.loc> Date: Thu, 15 Oct 2009 16:09:33 +0200 To: FreeBSD-gnats-submit@FreeBSD.org, freebsd-bugs@FreeBSD.org, miwi@FreeBSD.org In-Reply-To: <200910131730.n9DHU0ic056348@freefall.freebsd.org> References: <200910131717.n9DHHcVs007584@zaphod.home.loc> <200910131730.n9DHU0ic056348@freefall.freebsd.org> X-Mailer: VM 8.0.9 under Emacs 23.1.50.1 (i386-unknown-freebsd7.2) X-Attribution: WP X-For-Spammers: blacklistme@pelissero.de X-MArch-Archive-ID: 107937 X-MArch-Processing-Time: 0.55s Cc: Subject: Re: kern/139576: blink screen too noisy X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: walter@pelissero.de List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 15 Oct 2009 14:23:24 -0000 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