Lines Matching +full:0 +full:- +full:mon

1 /*-
2 * parsetime.c - parse time for at(1)
4 * SPDX-License-Identifier: BSD-2-Clause
8 * modifications for English-language times
71 SUN, MON, TUE, WED, THU, FRI, SAT enumerator
74 /* parse translation table - table driven parsers can be your FRIEND!
81 { "midnight", MIDNIGHT,0 }, /* 00:00:00 of today or tomorrow */
82 { "noon", NOON,0 }, /* 12:00:00 of today or tomorrow */
83 { "teatime", TEATIME,0 }, /* 16:00:00 of today or tomorrow */
84 { "am", AM,0 }, /* morning times for 0-12 clock */
85 { "pm", PM,0 }, /* evening times for 0-12 clock */
86 { "tomorrow", TOMORROW,0 }, /* execute 24 hours from time */
87 { "today", TODAY, 0 }, /* execute today - don't advance time */
88 { "now", NOW,0 }, /* opt prefix for PLUS */
90 { "minute", MINUTES,0 }, /* minutes multiplier */
92 { "hour", HOURS,0 }, /* hours ... */
94 { "day", DAYS,0 }, /* days ... */
96 { "week", WEEKS,0 }, /* week ... */
98 { "month", MONTHS,0 }, /* month ... */
100 { "year", YEARS,0 }, /* year ... */
102 { "jan", JAN,0 },
103 { "feb", FEB,0 },
104 { "mar", MAR,0 },
105 { "apr", APR,0 },
106 { "may", MAY,0 },
107 { "jun", JUN,0 },
108 { "jul", JUL,0 },
109 { "aug", AUG,0 },
110 { "sep", SEP,0 },
111 { "oct", OCT,0 },
112 { "nov", NOV,0 },
113 { "dec", DEC,0 },
114 { "january", JAN,0 },
115 { "february", FEB,0 },
116 { "march", MAR,0 },
117 { "april", APR,0 },
118 { "may", MAY,0 },
119 { "june", JUN,0 },
120 { "july", JUL,0 },
121 { "august", AUG,0 },
122 { "september", SEP,0 },
123 { "october", OCT,0 },
124 { "november", NOV,0 },
125 { "december", DEC,0 },
126 { "sunday", SUN, 0 },
127 { "sun", SUN, 0 },
128 { "monday", MON, 0 },
129 { "mon", MON, 0 },
130 { "tuesday", TUE, 0 },
131 { "tue", TUE, 0 },
132 { "wednesday", WED, 0 },
133 { "wed", WED, 0 },
134 { "thursday", THU, 0 },
135 { "thu", THU, 0 },
136 { "friday", FRI, 0 },
137 { "fri", FRI, 0 },
138 { "saturday", SAT, 0 },
139 { "sat", SAT, 0 },
144 static char **scp; /* scanner - pointer at arglist */
145 static char scc; /* scanner - count of remaining arguments */
146 static char *sct; /* scanner - next char pointer in current argument */
147 static int need; /* scanner - need to advance to next argument */
149 static char *sc_token; /* scanner - token buffer */
150 static size_t sc_len; /* scanner - length of token buffer */
151 static int sc_tokid; /* scanner - token id */
152 static int sc_tokplur; /* scanner - is token plural? */
164 for (i=0; i<(sizeof Specials/sizeof Specials[0]); i++) in parse_token()
165 if (strcasecmp(Specials[i].name, arg) == 0) { in parse_token()
170 /* not special - must be some random id */ in parse_token()
185 while (argc-- > 0) in init_scanner()
201 memset(sc_token, 0, sc_len); in token()
203 sc_tokplur = 0; in token()
204 idx = 0; in token()
214 scc--; in token()
215 need = 0; in token()
217 /* eat whitespace now - if we walk off the end of the argument, in token()
230 sc_token[0] = *sct++; in token()
234 if (isdigit(sc_token[0])) { in token()
237 sc_token[++idx] = 0; in token()
240 else if (isalpha(sc_token[0])) { in token()
243 sc_token[++idx] = 0; in token()
246 else if (sc_token[0] == ':' || sc_token[0] == '.') in token()
248 else if (sc_token[0] == '+') in token()
250 else if (sc_token[0] == '-') in token()
252 else if (sc_token[0] == '/') in token()
290 expectplur = (delay != 1 && delay != -1) ? 1 : 0; in plus_or_minus()
294 tm->tm_year += delay; in plus_or_minus()
297 tm->tm_mon += delay; in plus_or_minus()
302 tm->tm_mday += delay; in plus_or_minus()
305 tm->tm_hour += delay; in plus_or_minus()
308 tm->tm_min += delay; in plus_or_minus()
318 tm->tm_isdst = -1; in plus_or_minus()
319 if (mktime(tm) < 0) in plus_or_minus()
352 delay = -atoi(sc_token); in minus()
364 int hour, minute = 0; in tod()
370 /* first pick out the time of day - if it's 4 digits, we assume in tod()
398 hour = 0; in tod()
406 * if we've gone past that time - but if we're specifying a time plus in tod()
410 tm->tm_hour > hour) { in tod()
411 tm->tm_mday++; in tod()
412 tm->tm_wday++; in tod()
415 tm->tm_hour = hour; in tod()
416 tm->tm_min = minute; in tod()
417 if (tm->tm_hour == 24) { in tod()
418 tm->tm_hour = 0; in tod()
419 tm->tm_mday++; in tod()
428 assign_date(struct tm *tm, long mday, long mon, long year) in assign_date() argument
432 * Convert year into tm_year format (year - 1900). in assign_date()
435 if (year != -1) { in assign_date()
437 year -= 1900; /* convert from 4 digit year */ in assign_date()
447 year += (lt->tm_year / 100) * 100; in assign_date()
449 if (year == lt->tm_year - 1) year++; in assign_date()
450 else if (year < lt->tm_year) in assign_date()
455 if (year < 0 && in assign_date()
456 (tm->tm_mon > mon ||(tm->tm_mon == mon && tm->tm_mday > mday))) in assign_date()
457 year = tm->tm_year + 1; in assign_date()
459 tm->tm_mday = mday; in assign_date()
460 tm->tm_mon = mon; in assign_date()
462 if (year >= 0) in assign_date()
463 tm->tm_year = year; in assign_date()
479 long year= (-1); in month()
480 long mday = 0, wday, mon; in month() local
493 tm->tm_mday ++; in month()
494 tm->tm_wday ++; in month()
495 case TODAY: /* force ourselves to stay in today - no further processing */ in month()
503 mon = (sc_tokid-JAN); in month()
510 assign_date(tm, mday, mon, year); in month()
513 case SUN: case MON: case TUE: in month()
518 wday = (sc_tokid-SUN); in month()
520 mday = tm->tm_mday; in month()
524 if (wday < tm->tm_wday) in month()
525 mday += 7 - (tm->tm_wday - wday); in month()
527 mday += (wday - tm->tm_wday); in month()
529 tm->tm_wday = wday; in month()
531 assign_date(tm, mday, tm->tm_mon, tm->tm_year); in month()
538 mon = atol(sc_token); in month()
557 mday = mon; in month()
558 mon = x; in month()
563 year = (mon % 10000) - 1900; in month()
564 mon /= 10000; in month()
567 year = mon % 100; in month()
568 mon /= 100; in month()
570 mday = mon % 100; in month()
571 mon /= 100; in month()
576 mon--; in month()
577 if (mon < 0 || mon > 11 || mday < 1 || mday > 31) in month()
580 assign_date(tm, mday, mon, year); in month()
596 int hr = 0; in parsetime()
603 runtime.tm_sec = 0; in parsetime()
604 runtime.tm_isdst = 0; in parsetime()
609 init_scanner(argc-optind, argv+optind); in parsetime()
634 /* evil coding for TEATIME|NOON|MIDNIGHT - we've initialised in parsetime()
653 runtime.tm_min = 0; in parsetime()
664 runtime.tm_isdst = -1; in parsetime()
667 if (runtimer < 0) in parsetime()