|
|
1.1 ! root 1: #include "parms.h" ! 2: #include "structs.h" ! 3: ! 4: #ifdef RCSIDENT ! 5: static char rcsid[] = "$Header: datein.c,v 1.7.0.1 85/07/31 14:12:38 notes Rel $"; ! 6: #endif RCSIDENT ! 7: ! 8: /* ! 9: * getdate - parses the date handed as a string. Format is assumed ! 10: * to be that of CTIME(III). ! 11: * Ray Essick Feb 1982 ! 12: * ! 13: * Augmented to understand about lots of different formats - ! 14: * and make use of the getdate(III) routine to parse an ! 15: * almost arbitrary date. ! 16: * ! 17: * If the routine is unable to parse a time, the current time ! 18: * is returned. If the parsed time is in the future, the ! 19: * current time is returned. ! 20: * ! 21: * Returns: 0 succesfully parsed past date ! 22: * -1 unsucessful parse ! 23: * returned current time ! 24: * -2 unsuccessful parse ! 25: * returned a future time ! 26: * ! 27: */ ! 28: ! 29: extern char *mnames[]; ! 30: ! 31: parsetime (line, date) ! 32: char *line; ! 33: struct when_f *date; ! 34: { ! 35: char month[100]; ! 36: char weekday[100]; /* day of week */ ! 37: char zonename[100]; /* time zone */ ! 38: int day, ! 39: hour, ! 40: min, ! 41: sec, ! 42: year; ! 43: int count; ! 44: long timenow; /* current time */ ! 45: long xtime; /* parsed time */ ! 46: struct when_f now; /* in structure */ ! 47: ! 48: ! 49: gettime (date); /* load current */ ! 50: gettime (&now); /* load current */ ! 51: time (&timenow); /* seconds GMT */ ! 52: ! 53: #ifdef notdef ! 54: /* ! 55: * apparently there are other formats close enough to ctime ! 56: * to fool the sscanf() call into thinking it has succeeded ! 57: * when in fact it hasn't. So we just fall directly ! 58: * into the getdate() call. ! 59: */ ! 60: ! 61: /* ! 62: * First, let's see if the string is CTIME(III) format. ! 63: */ ! 64: if (sscanf (line, "%s %s %hd %hd:%hd:%hd %hd", weekday, month, ! 65: &day, &hour, &min, &sec, &year) == 7) ! 66: { /* yay! */ ! 67: ! 68: for (count = 12; count > 0; count--) ! 69: if (strcmp (mnames[count], month) == 0) ! 70: break; ! 71: date -> w_month = count; /* place what we got */ ! 72: date -> w_day = day; ! 73: date -> w_hours = hour; ! 74: date -> w_mins = min; ! 75: date -> w_year = year; ! 76: date -> w_gmttime = 0; ! 77: /* ! 78: * We should check that it isn't in the future here ! 79: */ ! 80: return 0; ! 81: } ! 82: ! 83: #endif ! 84: ! 85: /* ! 86: * Ok, now it's time to call in the big artillery -- GETDATE ! 87: */ ! 88: ! 89: xtime = getdate (line, (struct timeb *) NULL); /* parse */ ! 90: if (xtime < 0) /* success? */ ! 91: return (-1); /* failure */ ! 92: maketime (date, (long) xtime); /* encode */ ! 93: if (xtime > timenow) /* future shock */ ! 94: return (-2); ! 95: return (0); ! 96: ! 97: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.