|
|
1.1 ! root 1: /* gtime.c - inverse gmtime */ ! 2: ! 3: #ifndef lint ! 4: static char *rcsid = "$Header: /f/osi/psap/RCS/gtime.c,v 7.0 89/11/23 22:12:37 mrose Rel $"; ! 5: #endif ! 6: ! 7: /* ! 8: * $Header: /f/osi/psap/RCS/gtime.c,v 7.0 89/11/23 22:12:37 mrose Rel $ ! 9: * ! 10: * ! 11: * $Log: gtime.c,v $ ! 12: * Revision 7.0 89/11/23 22:12:37 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: #ifdef notdef ! 36: #include <sys/timeb.h> ! 37: #endif ! 38: ! 39: /* DATA */ ! 40: ! 41: /* gtime(): the inverse of localtime(). ! 42: This routine was supplied by Mike Accetta at CMU many years ago. ! 43: */ ! 44: ! 45: int dmsize[] = { ! 46: 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ! 47: }; ! 48: ! 49: #define dysize(y) \ ! 50: (((y) % 4) ? 365 : (((y) % 100) ? 366 : (((y) % 400) ? 365 : 366))) ! 51: ! 52: #define YEAR(y) ((y) >= 100 ? (y) : (y) + 1900) ! 53: ! 54: /* */ ! 55: ! 56: long gtime (tm) ! 57: register struct tm *tm; ! 58: { ! 59: register int i, ! 60: sec, ! 61: mins, ! 62: hour, ! 63: mday, ! 64: mon, ! 65: year; ! 66: register long result; ! 67: #ifdef notdef ! 68: long local; ! 69: struct timeb tb; ! 70: #endif ! 71: ! 72: if ((sec = tm -> tm_sec) < 0 || sec > 59 ! 73: || (mins = tm -> tm_min) < 0 || mins > 59 ! 74: || (hour = tm -> tm_hour) < 0 || hour > 24 ! 75: || (mday = tm -> tm_mday) < 1 || mday > 31 ! 76: || (mon = tm -> tm_mon + 1) < 1 || mon > 12) ! 77: return ((long) NOTOK); ! 78: if (hour == 24) { ! 79: hour = 0; ! 80: mday++; ! 81: } ! 82: year = YEAR (tm -> tm_year); ! 83: ! 84: result = 0L; ! 85: for (i = 1970; i < year; i++) ! 86: result += dysize (i); ! 87: if (dysize (year) == 366 && mon >= 3) ! 88: result++; ! 89: while (--mon) ! 90: result += dmsize[mon - 1]; ! 91: result += mday - 1; ! 92: result = 24 * result + hour; ! 93: result = 60 * result + mins; ! 94: result = 60 * result + sec; ! 95: ! 96: #ifdef notdef ! 97: (void) ftime (&tb); ! 98: result += 60 * tb.timezone; ! 99: local = result; ! 100: if ((tm = localtime (&local)) && tm -> tm_isdst) ! 101: result -= 60 * 60; ! 102: #endif ! 103: ! 104: return result; ! 105: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.