diff options
author | edwin <edwin@FreeBSD.org> | 2011-07-11 08:24:36 +0000 |
---|---|---|
committer | edwin <edwin@FreeBSD.org> | 2011-07-11 08:24:36 +0000 |
commit | 112905c461f125b28a3b0e16020035c04adc3d30 (patch) | |
tree | 7a456f1333e875ed0d2bb8c0c216475ed3839a0e /usr.bin | |
parent | 0c1f0ec6f5ccbe605aa365f372013e6b5ef9f248 (diff) | |
download | FreeBSD-src-112905c461f125b28a3b0e16020035c04adc3d30.zip FreeBSD-src-112905c461f125b28a3b0e16020035c04adc3d30.tar.gz |
Fix the interpreter for:
Jul/Sat+3 Every third saturday of July - Jul/Sat+3
which was able to be done via:
Jul/SatThird Every third saturday of July - Jul/SatThird
Add interpreters for:
SatFourth Every third saturday of each month - SatFourth
Sat+4 Every third saturday of each month - Sat+4
Sat Every saturday of each month - Sat
MFC after: 2 weeks
Diffstat (limited to 'usr.bin')
-rw-r--r-- | usr.bin/calendar/parsedata.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/usr.bin/calendar/parsedata.c b/usr.bin/calendar/parsedata.c index e3f9fab..fdbe44d 100644 --- a/usr.bin/calendar/parsedata.c +++ b/usr.bin/calendar/parsedata.c @@ -548,6 +548,24 @@ parsedaymonth(char *date, int *yearp, int *monthp, int *dayp, int *flags, continue; } + /* Every so-manied dayofweek of every month of the year */ + if (lflags == (F_DAYOFWEEK | F_MODIFIERINDEX | F_VARIABLE)) { + offset = indextooffset(modifierindex); + + for (m = 0; m < 12; m++) { + dow = first_dayofweek_of_month(year, m); + d = (idayofweek - dow + 8) % 7; + d += (offset - 1) * 7; + if (remember_ymd(year, m, d)) { + remember(&remindex, + yearp, monthp, dayp, edp, + year, m, d, NULL); + continue; + } + } + continue; + } + /* A certain dayofweek of a month */ if (lflags == (F_MONTH | F_DAYOFWEEK | F_MODIFIERINDEX | F_VARIABLE)) { @@ -918,6 +936,16 @@ indextooffset(char *s) int i; struct fixs *n; + if (s[0] == '+' || s[0] == '-') { + char ss[9]; + for (i = -100; i < 100; i++) { + sprintf(ss, "%s%d", (i > 0) ? "+" : "", i); + if (strcmp(ss, s) == 0) + return (i); + } + return (0); + } + for (i = 0; i < 6; i++) { if (strcasecmp(s, sequences[i]) == 0) { if (i == 5) |