On 3/21/11, Matthieu Herrb <matthieu.he...@laas.fr> wrote:
> rain(6) is useless. but still it should provide sane defaults
> ihmo. ok?

Or use sane defaults based on terminal speed;  like worms(8) does.

Index: rain.6
===================================================================
RCS file: /cvs/src/games/rain/rain.6,v
retrieving revision 1.14
diff -u -r1.14 rain.6
--- rain.6      31 May 2007 19:19:18 -0000      1.14
+++ rain.6      21 Mar 2011 07:39:02 -0000
@@ -43,11 +43,18 @@
 is modeled after the
 .Tn VAX/VMS
 program of the same name.
-To obtain the proper effect, either the terminal must be set for 9600 baud
-or the
-.Fl d
-option must be used to specify a delay, in milliseconds, between each update.
-A reasonable delay is 120; the default is 0.
+.Pp
+The options are as follows:
+.Bl -tag -width "-l length"
+.It Fl d Ar delay
+Specifies a delay, in milliseconds, between each update.
+This is useful for fast terminals.
+Reasonable values are around 20-200.
+The default is based on the terminal speed.
+If the terminal is 9600 baud or slower no delay is used.
+Otherwise, the delay is computed via the following formula:
+.Dl delay = speed / 9600 - 1.
+.El
 .Pp
 As with any
 .Xr curses 3
Index: rain.c
===================================================================
RCS file: /cvs/src/games/rain/rain.c,v
retrieving revision 1.15
diff -u -r1.15 rain.c
--- rain.c      27 Oct 2009 23:59:26 -0000      1.15
+++ rain.c      21 Mar 2011 07:31:37 -0000
@@ -40,6 +40,7 @@
 #include <signal.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <termios.h>
 #include <unistd.h>

 volatile sig_atomic_t sig_caught = 0;
@@ -55,6 +56,13 @@
        u_int delay = 0;
        int ch;
        int xpos[5], ypos[5];
+       struct termios term;
+       speed_t speed;
+
+       /* set default delay based on terminal baud rate */
+       if (tcgetattr(STDOUT_FILENO, &term) == 0 &&
+           (speed = cfgetospeed(&term)) > B9600)
+               delay = (speed / B9600) - 1;

        while ((ch = getopt(argc, argv, "d:h")) != -1)
                switch(ch) {

Reply via email to