|
|
/*===========================================================================*/ /* Copyright (c) 1987 - 1988, Future Soft Engineering, Inc. */ /* Houston, Texas */ /*===========================================================================*/
#include "winrev.h"
#include <windows.h>
#include "port1632.h"
#include "dcrc.h"
#include "dynacomm.h"
#include <io.h> /* 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
|