Annotation of 43BSDReno/contrib/isode-beta/psap/ut2tm.c, revision 1.1

1.1     ! root        1: /* ut2tm.c - time string to tm */
        !             2: 
        !             3: #ifndef        lint
        !             4: static char *rcsid = "$Header: /f/osi/psap/RCS/ut2tm.c,v 7.0 89/11/23 22:13:56 mrose Rel $";
        !             5: #endif
        !             6: 
        !             7: /* 
        !             8:  * $Header: /f/osi/psap/RCS/ut2tm.c,v 7.0 89/11/23 22:13:56 mrose Rel $
        !             9:  *
        !            10:  *
        !            11:  * $Log:       ut2tm.c,v $
        !            12:  * Revision 7.0  89/11/23  22:13:56  mrose
        !            13:  * Release 6.0
        !            14:  * 
        !            15:  */
        !            16: 
        !            17: /*
        !            18:  *                               NOTICE
        !            19:  *
        !            20:  *    Acquisition, use, and distribution of this module and related
        !            21:  *    materials are subject to the restrictions of a license agreement.
        !            22:  *    Consult the Preface in the User's Manual for the full terms of
        !            23:  *    this agreement.
        !            24:  *
        !            25:  */
        !            26: 
        !            27: 
        !            28: /* LINTLIBRARY */
        !            29: 
        !            30: #include <stdio.h>
        !            31: #include "psap.h"
        !            32: #ifdef OSX
        !            33: #include <sys/time.h>
        !            34: #endif
        !            35: 
        !            36: 
        !            37: #define        UNYEAR(y)       ((y) < 1900 || (y) > 1999 ? (y) : (y) - 1900)
        !            38: 
        !            39: extern int dmsize[];
        !            40: 
        !            41: /*  */
        !            42: 
        !            43: struct tm *ut2tm (ut)
        !            44: register UTC   ut;
        !            45: {
        !            46:     static struct tm   tms;
        !            47:     register struct tm *tm = &tms;
        !            48: 
        !            49:     bzero ((char *) tm, sizeof *tm);
        !            50: 
        !            51:     tm -> tm_sec = ut -> ut_sec;
        !            52:     tm -> tm_min = ut -> ut_min;
        !            53:     tm -> tm_hour = ut -> ut_hour;
        !            54:     tm -> tm_mday = ut -> ut_mday;
        !            55:     tm -> tm_mon = ut -> ut_mon - 1;
        !            56:     tm -> tm_year = UNYEAR (ut -> ut_year);
        !            57:     tm -> tm_wday = makewkday (ut);
        !            58:     tm -> tm_yday = tm -> tm_isdst = 0;
        !            59: 
        !            60:     tm -> tm_hour -= ut -> ut_zone / 60, tm -> tm_min -= ut -> ut_zone % 60;
        !            61:     if (tm -> tm_min < 0)
        !            62:        tm -> tm_hour--, tm -> tm_min += 60;
        !            63:     else
        !            64:        if (tm -> tm_min > 59)
        !            65:            tm -> tm_hour++, tm -> tm_min -= 60;
        !            66: 
        !            67: /* this ignores odditites in February... */
        !            68:     if (tm -> tm_hour < 0) {
        !            69:        tm -> tm_mday++, tm -> tm_hour += 24;
        !            70:        if (tm -> tm_mday > dmsize[tm -> tm_mon]) {
        !            71:            tm -> tm_mon++, tm -> tm_mday = 1;
        !            72:            if (tm -> tm_mon > 11)
        !            73:                tm -> tm_year++, tm -> tm_mon = 0;
        !            74:        }
        !            75:        
        !            76:     }
        !            77:     else
        !            78:        if (tm -> tm_hour > 23) {
        !            79:            tm -> tm_mday--, tm -> tm_hour -= 24;
        !            80:            if (tm -> tm_mday < 1) {
        !            81:                tm -> tm_mday = dmsize[--tm -> tm_mon];
        !            82:                if (tm -> tm_mon < 0)
        !            83:                    tm -> tm_year--, tm -> tm_mon = 11;
        !            84:            }
        !            85:        }
        !            86: 
        !            87:     return tm;
        !            88: }
        !            89: 
        !            90: /*  */
        !            91: 
        !            92: #define        dysize(y)       \
        !            93:        (((y) % 4) ? 365 : (((y) % 100) ? 366 : (((y) % 400) ? 365 : 366)))
        !            94: 
        !            95: #define        YEAR(y)         ((y) >= 100 ? (y) : (y) + 1900)
        !            96: 
        !            97: 
        !            98: static  int makewkday (ut)
        !            99: UTC     ut;
        !           100: {
        !           101:     int     d,
        !           102:            mon,
        !           103:            year;
        !           104: 
        !           105:     mon = ut -> ut_mon;
        !           106:     year = YEAR (ut -> ut_year);
        !           107:     d = 4 + year + (year + 3) / 4;
        !           108: 
        !           109:     if (year > 1800) {
        !           110:        d -= (year - 1701) / 100;
        !           111:        d += (year - 1601) / 400;
        !           112:     }
        !           113:     if (year > 1752)
        !           114:        d += 3;
        !           115:     if (dysize (year) == 366 && mon > 3)
        !           116:        d++;
        !           117:     while (--mon)
        !           118:        d += dmsize[mon - 1];
        !           119:     d += ut -> ut_mday - 1;
        !           120: 
        !           121:     return (d % 7);
        !           122: }

unix.superglobalmegacorp.com

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