#ifndef TIME_H_INCLUDED
#define TIME_H_INCLUDED

#include <time.h>
#include <winsock.h>


/* Windows CE does not have "getenv()" */
#define getenv(s)	NULL

struct timezone {
     int tz_minuteswest; /* minutes W of Greenwich */
     int tz_dsttime;     /* type of dst correction */
};

#ifdef __cplusplus
extern "C" {
#endif

_inline int gettimeofday(struct timeval *tv, struct timezone *tz)
{
	FILETIME        ft;
	SYSTEMTIME      st;
	LARGE_INTEGER   li;
	__int64         t;
	DWORD dwTick;

	GetSystemTime(&st);
	dwTick = GetTickCount();			// ToDo: キャリブレーション

	SystemTimeToFileTime(&st,&ft);
	li.LowPart  = ft.dwLowDateTime;
	li.HighPart = ft.dwHighDateTime;
	t  = li.QuadPart;					// 100ナノ秒単位
	t -= 116444736000000000i64;			// 1601/1/1 から 1970/1/1 までの経過時間
										//   = 370 (years)
										//     * 365.25 (days/year)
										//     * 24 (hr/day)
										//     * 60 (min/hr)
										//     * 60 (sec/min)
										//     * 10,000,000 (100ナノ秒単位）

	t /= 10;							// 100ナノ秒から1マイクロ秒単位に変換する

	tv->tv_sec  = (long) (t / 1000000);								// 秒
	tv->tv_usec = (long) (t % 1000000) + (dwTick % 1000) * 1000;	// マイクロ秒;
	return 0;
}

#ifdef __cplusplus
}
#endif

#endif
