add -t flag to specify intermessage timeout
authorEric Allman <eric@ucbvax.Berkeley.EDU>
Fri, 16 Oct 1981 12:54:07 +0000 (04:54 -0800)
committerEric Allman <eric@ucbvax.Berkeley.EDU>
Fri, 16 Oct 1981 12:54:07 +0000 (04:54 -0800)
SCCS-vsn: usr.bin/vacation/vacation.c 3.3

usr/src/usr.bin/vacation/vacation.c

index cc495d6..a3d92f8 100644 (file)
@@ -1,10 +1,11 @@
 # include <pwd.h>
 # include <stdio.h>
 # include <sysexits.h>
 # include <pwd.h>
 # include <stdio.h>
 # include <sysexits.h>
+# include <ctype.h>
 # include "useful.h"
 # include "userdbm.h"
 
 # include "useful.h"
 # include "userdbm.h"
 
-static char    SccsId[] =      "@(#)vacation.c 3.2     %G%";
+static char    SccsId[] =      "@(#)vacation.c 3.3     %G%";
 
 /*
 **  VACATION -- return a message to the sender when on vacation.
 
 /*
 **  VACATION -- return a message to the sender when on vacation.
@@ -32,6 +33,10 @@ static char  SccsId[] =      "@(#)vacation.c 3.2     %G%";
 # define MAXLINE       256     /* max size of a line */
 # define MAXNAME       128     /* max size of one name */
 
 # define MAXLINE       256     /* max size of a line */
 # define MAXNAME       128     /* max size of one name */
 
+# define ONEWEEK       (60L*60L*24L*7L)
+
+long   Timeout = ONEWEEK;      /* timeout between notices per user */
+
 struct dbrec
 {
        long    sentdate;
 struct dbrec
 {
        long    sentdate;
@@ -49,6 +54,7 @@ main(argc, argv)
        extern char *newstr();
        extern char *getfrom();
        extern bool knows();
        extern char *newstr();
        extern char *getfrom();
        extern bool knows();
+       extern long convtime();
 
        /* process arguments */
        while (--argc > 0 && (p = *++argv) != NULL && *p == '-')
 
        /* process arguments */
        while (--argc > 0 && (p = *++argv) != NULL && *p == '-')
@@ -69,6 +75,10 @@ main(argc, argv)
                                syserr("Cannot create %s", buf);
                        exit(EX_OK);
 
                                syserr("Cannot create %s", buf);
                        exit(EX_OK);
 
+                 case 't':     /* set timeout */
+                       Timeout = convtime(++p);
+                       break;
+
                  default:
                        usrerr("Unknown flag -%s", p);
                        exit(EX_USAGE);
                  default:
                        usrerr("Unknown flag -%s", p);
                        exit(EX_USAGE);
@@ -164,8 +174,6 @@ getfrom()
 **             none.
 */
 
 **             none.
 */
 
-# define ONEWEEK       (60L*60L*24L*7L)
-
 bool
 knows(user)
        char *user;
 bool
 knows(user)
        char *user;
@@ -177,7 +185,7 @@ knows(user)
        k.dptr = user;
        k.dsize = strlen(user) + 1;
        d = fetch(k);
        k.dptr = user;
        k.dsize = strlen(user) + 1;
        d = fetch(k);
-       if (d.dptr == NULL || ((struct dbrec *) d.dptr)->sentdate + ONEWEEK < now)
+       if (d.dptr == NULL || ((struct dbrec *) d.dptr)->sentdate + Timeout < now)
                return (FALSE);
        return (TRUE);
 }
                return (FALSE);
        return (TRUE);
 }
@@ -285,3 +293,47 @@ syserr(f, p)
        fprintf(stderr, "\n");
        exit(EX_USAGE);
 }
        fprintf(stderr, "\n");
        exit(EX_USAGE);
 }
+\f/*
+**  CONVTIME -- convert time
+**
+**     Parameters:
+**             p -- pointer to ascii time.
+**
+**     Returns:
+**             time in seconds.
+**
+**     Side Effects:
+**             none.
+*/
+
+long
+convtime(p)
+       char *p;
+{
+       register long t;
+
+       t = 0;
+       while (isdigit(*p))
+               t = t * 10 + (*p++ - '0');
+       switch (*p)
+       {
+         case 'w':             /* weeks */
+               t *= 7;
+
+         case 'd':             /* days */
+         case '\0':
+         default:
+               t *= 24;
+
+         case 'h':             /* hours */
+               t *= 60;
+
+         case 'm':             /* minutes */
+               t *= 60;
+
+         case 's':             /* seconds */
+               break;
+       }
+
+       return (t);
+}