Annotation of 43BSDTahoe/new/notes/src/datein.c, revision 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.