Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 19 Feb 2002 13:51:38 GMT
From:      Gavin Atkinson <gavin.atkinson@ury.york.ac.uk>
To:        FreeBSD-gnats-submit@freebsd.org
Subject:   bin/35113: grdc enhancement: countdown timer mode
Message-ID:  <200202191351.g1JDpcj00684@avcpc2.york.ac.uk>

next in thread | raw e-mail | index | archive | help

>Number:         35113
>Category:       bin
>Synopsis:       grdc enhancement: countdown timer mode
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Tue Feb 19 06:00:05 PST 2002
>Closed-Date:
>Last-Modified:
>Originator:     Gavin Atkinson
>Release:        FreeBSD 4.5-RELEASE i386
>Organization:
none
>Environment:
System: FreeBSD epsilon.ury.york.ac.uk 4.5-RELEASE FreeBSD 4.5-RELEASE #3: Wed Feb 13 10:15:50 GMT 2002 root@epsilon.ury.york.ac.uk:/usr/obj/usr/src/sys/EPSILON i386
>Description:
	grdc lacks a countdown timer. This patch adds it.
>How-To-Repeat:
	n/a
>Fix:

patch is against -CURRENT source.


--- /5.0/usr/src/games/grdc/grdc.c	Tue Sep 25 14:45:46 2001
+++ grdc.c	Tue Feb 19 09:21:04 2002
@@ -1,10 +1,13 @@
 /*
  * Grand digital clock for curses compatible terminals
  * Usage: grdc [-s] [n]   -- run for n seconds (default infinity)
+ *        grdc -t n       -- countdown n seconds
  * Flags: -s: scroll
+ *        -t: timer mode
  *
  * modified 10-18-89 for curses (jrl)
  * 10-18-89 added signal handling
+ * 02-18-02 added countdown timer mode
  *
  * $FreeBSD: src/games/grdc/grdc.c,v 1.9 2001/09/25 13:45:46 ru Exp $
  */
@@ -25,6 +28,7 @@
 
 /* it won't be */
 time_t now; /* yeah! */
+time_t end; /* for timer mode */
 struct tm *tm;
 
 short disp[11] = {
@@ -58,15 +62,18 @@
 int i, j, s, k;
 int n;
 int ch;
-int scrol;
+int scrol = 0;
+int timer = 0;
+int hour, minute, second;
 
-	scrol = 0;
-
-	while ((ch = getopt(argc, argv, "s")) != -1)
+	while ((ch = getopt(argc, argv, "st")) != -1)
 	switch (ch) {
 	case 's':
 		scrol = 1;
 		break;
+	case 't':
+		timer = 1;
+		break;
 	case '?':
 	default:
 		usage();
@@ -75,7 +82,7 @@
 	argc -= optind;
 	argv += optind;
 
-	if (argc > 1) {
+	if ((argc > 1) || (argc == 0 && timer)) {
 		usage();
 		/* NOTREACHED */
 	}
@@ -85,6 +92,9 @@
 	else
 		n = 0;
 
+	if (timer && n == 0)
+		return(0);
+
 	initscr();
 
 	signal(SIGINT,sighndl);
@@ -127,16 +137,30 @@
 
 		attrset(COLOR_PAIR(2));
 	}
+	time(&end);
+	end += n;
 	do {
 		mask = 0;
 		time(&now);
-		tm = localtime(&now);
-		set(tm->tm_sec%10, 0);
-		set(tm->tm_sec/10, 4);
-		set(tm->tm_min%10, 10);
-		set(tm->tm_min/10, 14);
-		set(tm->tm_hour%10, 20);
-		set(tm->tm_hour/10, 24);
+		if (!timer) {
+			tm = localtime(&now);
+			hour = tm->tm_hour;
+			minute = tm->tm_min;
+			second = tm->tm_sec;
+		} else {
+			n = end - now;
+			if (n <= 0)
+				break;
+			hour = (n/3600)%100;
+			minute = (n/60)%60;
+			second = n%60;
+		}
+		set(second%10, 0);
+		set(second/10, 4);
+		set(minute%10, 10);
+		set(minute/10, 14);
+		set(hour%10, 20);
+		set(hour/10, 24);
 		set(10, 7);
 		set(10, 17);
 		for(k=0; k<6; k++) {
@@ -229,6 +253,6 @@
 usage(void)
 {
 
-	(void)fprintf(stderr, "usage: grdc [-s] [n]\n");
+	(void)fprintf(stderr, "usage: grdc [-s] [n]\n       grdc -t n\n");
 	exit(1);
 }

--- /5.0/usr/src/games/grdc/grdc.6	Tue Sep 25 14:45:46 2001
+++ grdc.6	Tue Feb 19 09:27:42 2002
@@ -1,5 +1,5 @@
 .\" $FreeBSD: src/games/grdc/grdc.6,v 1.3 2001/09/25 13:45:46 ru Exp $
-.Dd September 25, 2001
+.Dd February 18, 2002
 .Dt GRDC 6
 .Sh NAME
 .Nm grdc
@@ -8,6 +8,9 @@
 .Nm
 .Op Fl s
 .Op Ar n
+.Nm
+.Fl t
+.Ar n
 .Sh DESCRIPTION
 .Nm
 runs a digital clock made of reverse-video blanks on a curses
@@ -17,13 +20,27 @@
 it stops after
 .Ar n
 seconds (default never).
+The clock can act as a countdown timer with the
+.Fl t
+flag,
+.Ar n
+specifies the number of seconds to time for.
 The optional
 .Fl s
 flag makes digits scroll as they change.
 In this curses mode implementation,
 the scrolling option has trouble keeping up.
+.Sh NOTES
+In countdown timer mode, the specifying of
+.Fl n
+> 360000 seconds (100 hours) will lead to the counter displaying
+incorrect remaining time, however it will time correctly, and
+display correctly when the remaining time becomes less than
+100 hours.
 .Sh AUTHORS
 .An -nosplit
 .An Amos Shapir ,
 modified for curses by
 .An John Lupien .
+Countdown timer mode by
+.An Gavin Atkinson .
>Release-Note:
>Audit-Trail:
>Unformatted:

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200202191351.g1JDpcj00684>