[comp.sys.sun] Ringing the bell in calentool

cls7i@astsun2.acc.virginia.edu (Craig Sarazin) (01/13/89)

I recently asked if anyone knew how to make calentool ring the bell when
it notifies you of appointments.  Calentool is a very useful utility for
keeping track of appointments.  I received a number of replies.  Bill
Randle <billr%saab.cna.tek.com@relay.cs.net>, who has made many very
useful improvements to calentool, told me that later versions of calentool
include a "-b" option which beeps the bell and sends a message to the
console reminding you of an upcoming appointment (at the same time that
the icon reverse video's). Randle also said that he will be posting a new
version of calentool in the not too distant future with lots more bells
and whistles.

The simplest, most robust patch to Version 1.4 of calentool which makes
the bell ring when the icon changes to reverse came from John Scott
<scott@dg-rtp.dg.com>.  The rest of this message lists the changes to the
calentool.c file needed to make this changes.

Many thanks to John Scott, Bill Randle, and many other people who offered
suggestions and advise.

Craig Sarazin                            cls7i@virginia (BITNET)
Dept. of Astronomy                       cls7i@virginia.edu
University of Virginia

Differences to calentool.c, version 1.4
*************************************************************************
0a1
> /*    Modified Oct 21, 1988 to ring bell at appointment */
94a96
> int inverted = 0;
434a437
>               inverted = 0;
435a439,444
>         /* ring bell twice */
>         if (!inverted) {
>              RINGER(); RINGER();
>              inverted++;
>         }
>
439a449,471
> }
> #include <sundev/kbd.h>
> #include <sundev/kbio.h>
> RINGER()
> {
>     struct timeval timer;
>     register int kbd, op;
>     int cmd;
>
>     timer.tv_sec = 0;
>     if ((kbd = open("/dev/kbd", 1)) > -1) {
>         cmd = KBD_CMD_BELL;
>         timer.tv_usec = 100000;
>
>         ioctl(kbd, KIOCCMD, &cmd);
>         select(32, 0,0,0, &timer);
>         cmd = KBD_CMD_NOBELL;
>         ioctl(kbd, KIOCCMD, &cmd);
>
>         timer.tv_usec = 333333;
>         select(32, 0,0,0, &timer);
>     close(kbd);
>     }