SCCS-vsn: usr.bin/vacation/vacation.c 3.3
# include <pwd.h>
# include <stdio.h>
# include <sysexits.h>
# include <pwd.h>
# include <stdio.h>
# include <sysexits.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.
# 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;
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 == '-')
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);
-# define ONEWEEK (60L*60L*24L*7L)
-
bool
knows(user)
char *user;
bool
knows(user)
char *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);
}
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);
+}