Annotation of 43BSD/contrib/notes/src/datein.c, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.