/*===========================================================================*/ /* Copyright (c) 1987 - 1988, Future Soft Engineering, Inc. */ /* Houston, Texas */ /*===========================================================================*/ #include "winrev.h" #include #include "port1632.h" #include "dcrc.h" #include "dynacomm.h" #include /* added for get_osfhandle crt -sdj*/ static INT dayTable[2][13] = { {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} }; /*-------------- >>> Routines Specific to Windows Start Here <<< ------------*/ /*---------------------------------------------------------------------------*/ /* getDateTime() - Set a long int to number of elapsed seconds since [scf] */ /* January 1, 1904. (Mimic the MAC funtion) */ /*---------------------------------------------------------------------------*/ VOID getDateTime (LONG *elapsedSecs) { DOSTIME present; readDateTime (&present); date2secs (&present, elapsedSecs); } /*---------------------------------------------------------------------------*/ /* date2secs() - Convert a date found in DOSTIME struct to elapsed seconds */ /* since January 1, 1904. (Mimic the MAC) [scf] */ /*---------------------------------------------------------------------------*/ VOID date2secs (DOSTIME *date, LONG *elapsedSecs) { #ifdef ORGCODE INT year; INT month; INT leapYear; #else WORD year; WORD month; WORD leapYear; #endif *elapsedSecs = 0l; for (year = 1904; year < date->yy; year++) { leapYear = year % 4 == 0 && year % 100 != 0 || year % 400 == 0; for (month = 1; month <= 12; month++) *elapsedSecs += (LONG) dayTable[leapYear][month] * SECS_IN_A_DAY; } leapYear = date->yy % 4 == 0 && date->yy % 100 != 0 || date->yy % 400 == 0; for (month = 1; month < date->mm; month++) *elapsedSecs += (LONG) dayTable[leapYear][month] * SECS_IN_A_DAY; *elapsedSecs += (LONG) (date->dd-1) *SECS_IN_A_DAY; *elapsedSecs += (LONG) date->hour *60*60; *elapsedSecs += (LONG) date->minute * 60; *elapsedSecs += (LONG) date->second; } /*---------------------------------------------------------------------------*/ /* secs2date() - Sets DOSTIME struct (except dayOfWeek) according to the */ /* number of elapsed seconds since January 1, 1904. [scf] */ /*---------------------------------------------------------------------------*/ VOID secs2date (LONG secs, DOSTIME *date) { register INT year; INT month; INT day; INT hour; INT minute; INT leapYear; INT daysPerYear[2]; DWORD usecs; daysPerYear[0] = DAYS_IN_A_YEAR; daysPerYear[1] = DAYS_IN_A_YEAR + (leapYear = 1); usecs = (DWORD) secs; year = 1904; while (usecs >= (DWORD) daysPerYear[leapYear] * SECS_IN_A_DAY) { usecs -= (DWORD) daysPerYear[leapYear] * SECS_IN_A_DAY; year++; leapYear = (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) ? 1 : 0; } secs = (LONG) usecs; for (month = 1; secs >= (LONG) dayTable[leapYear][month] *SECS_IN_A_DAY; month++) secs -= (LONG) dayTable[leapYear][month] *SECS_IN_A_DAY; for (day = 1; secs >= SECS_IN_A_DAY; day++) secs -= SECS_IN_A_DAY; for (hour = 0; secs >= 60*60; hour++) secs -= 60 * 60; for (minute = 0; secs >= 60; minute++) secs -= 60; date->yy = (WORD)year; date->mm = (WORD)month; date->dd = (WORD)day; date->dayOfWeek = DONTCARE; date->hour = (WORD)hour; date->minute = (WORD)minute; date->second = (INT) secs; } VOID readDateTime(DOSTIME *pDosTime) { SYSTEMTIME NtSystemTime; /************ typedef struct _SYSTEMTIME { WORD wYear; WORD wMonth; WORD wDayOfWeek; WORD wDay; WORD wHour; WORD wMinute; WORD wSecond; WORD wMilliseconds; } SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME; ***************/ /******************** typedef struct { WORD hour; WORD minute; WORD second; WORD dayOfWeek; WORD mm; WORD dd; WORD yy; } DOSTIME; *************************/ DEBOUT("readDateTime:%s\n","Calling GetSystemTime()"); // GetSystemTime(&NtSystemTime); // -sdj this time will not make sense, have to use // -sdj GetLocalTime instead, this is due to Zone,Bias,UTC and all // -sdj the other complicated things I have to learn sometime! GetLocalTime(&NtSystemTime); pDosTime->hour = NtSystemTime.wHour; pDosTime->minute = NtSystemTime.wMinute; pDosTime->second = NtSystemTime.wSecond; pDosTime->dayOfWeek = NtSystemTime.wDayOfWeek; pDosTime->mm = NtSystemTime.wMonth; pDosTime->dd = NtSystemTime.wDay; pDosTime->yy = NtSystemTime.wYear; } VOID getFileDate(DOSTIME *pDosTime, int fh) { //BOOL bRc; //HANDLE hFile; //FILETIME CrTime,AccTime,WrTime; SYSTEMTIME SysTime; DEBOUT("getFileDate: UNDEF!! %s\n","converting the crt fh to os fh using get_osfhandle"); /* hFile = get_osfhandle(fh); */ DEBOUT("getFileDate: UNDEF!! got os fh as %lx\n", hFile); /* DEBOUT("getFileDate: %s\n","calling GetFileTime , for LastWrTime"); */ /* bRc = GetFileTime(hFile,&CrTime,&AccTime,&WrTime); */ /* DEBOUT("getFileDate: GetFileTime Rc= %lx\n conv to SystemTime",bRc); */ /* bRc = FileTimeToSystemTime(&WrTime,&SysTime); */ /* DEBOUT("getFileDate: FileTimeToSystemTime Rc= %lx\n store in DosTime",bRc); */ DEBOUT("getFileDate: HACK %s\n","calling sys time instead of filetime for now"); GetSystemTime(&SysTime); pDosTime->hour = SysTime.wHour; pDosTime->minute = SysTime.wMinute; pDosTime->second = SysTime.wSecond; pDosTime->dayOfWeek = SysTime.wDayOfWeek; pDosTime->mm = SysTime.wMonth; pDosTime->dd = SysTime.wDay; pDosTime->yy = SysTime.wYear; } #ifdef OLDCODE VOID lmovmem(LPSTR lpsrc,LPSTR lpdst, WORD wCount) { LPBYTE TmpSrc,TmpDst; WORD i; TmpSrc = (LPBYTE)lpsrc; TmpDst = (LPBYTE)lpdst; for (i=0; i< wCount; i++) { *TmpDst = *TmpSrc; TmpDst++;TmpSrc++; } } VOID lsetmem(LPSTR str,BYTE ch,WORD wCount) { WORD i; LPSTR tmp; tmp = str; for (i=0; i < wCount; i++) { *tmp = ch; tmp++; } } #endif