亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? time.c

?? wince3.0的源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
 *		Core DLL filetime / systemtime code
 *
 *		Copyright (c) 1995-2000 Microsoft Corporation.  All rights reserved.
 *
 * Module Name:
 *
 *		time.c
 *
 * Abstract:
 *
 *		This file implements Core DLL system and file time functions
 *
 * Revision History:
 *
 */

#include <windows.h>
#include <memory.h>
#include <notify.h>

extern BOOL IsAPIReady(DWORD hAPI);

#define WEEKDAY_OF_1601	1

#define IsLeapYear(Y) (!((Y)%4) && (((Y)%100) || !((Y)%400)))

#define NumberOfLeapYears(Y) ((Y)/4 - (Y)/100 + (Y)/400)

#define ElapsedYearsToDays(Y) ((Y)*365 + NumberOfLeapYears(Y))

#define MaxDaysInMonth(Y,M) (IsLeapYear(Y) ? \
	LeapYearDaysBeforeMonth[(M) + 1] - LeapYearDaysBeforeMonth[M] : \
    NormalYearDaysBeforeMonth[(M) + 1] - NormalYearDaysBeforeMonth[M])

const WORD LeapYearDaysBeforeMonth[13] = {
    0,                                 // January
    31,                                // February
    31+29,                             // March
    31+29+31,                          // April
    31+29+31+30,                       // May
    31+29+31+30+31,                    // June
    31+29+31+30+31+30,                 // July
    31+29+31+30+31+30+31,              // August
    31+29+31+30+31+30+31+31,           // September
    31+29+31+30+31+30+31+31+30,        // October
    31+29+31+30+31+30+31+31+30+31,     // November
    31+29+31+30+31+30+31+31+30+31+30,  // December
    31+29+31+30+31+30+31+31+30+31+30+31};

const WORD NormalYearDaysBeforeMonth[13] = {
    0,                                 // January
    31,                                // February
    31+28,                             // March
    31+28+31,                          // April
    31+28+31+30,                       // May
    31+28+31+30+31,                    // June
    31+28+31+30+31+30,                 // July
    31+28+31+30+31+30+31,              // August
    31+28+31+30+31+30+31+31,           // September
    31+28+31+30+31+30+31+31+30,        // October
    31+28+31+30+31+30+31+31+30+31,     // November
    31+28+31+30+31+30+31+31+30+31+30,  // December
    31+28+31+30+31+30+31+31+30+31+30+31};

const BYTE LeapYearDayToMonth[366] = {
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  // January
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,        // February
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,  // March
     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,     // April
     4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,  // May
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,     // June
     6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,  // July
     7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,  // August
     8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,     // September
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,  // October
    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,     // November
    11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11}; // December

const BYTE NormalYearDayToMonth[365] = {
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  // January
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,           // February
     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,  // March
     3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,     // April
     4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,  // May
     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,     // June
     6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,  // July
     7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,  // August
     8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,     // September
     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,  // October
    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,     // November
    11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11}; // December

/*
	@doc BOTH EXTERNAL
	
	@func LONG | CompareFileTime | Compares two 64-bit file times.
    @parm CONST FILETIME * | lpFileTime1 | address of first file time
    @parm CONST FILETIME * | lpFileTime2 | address of second file time
 
	@devnote CHOOSE COMM TAG FOR ONLY ONE OF THE FOLLOWING:
	@comm Follows the Win32 reference description without restrictions or modifications. 

*/
LONG WINAPI CompareFileTime(const FILETIME *lpft1, const FILETIME *lpft2) {
	if (lpft1->dwHighDateTime < lpft2->dwHighDateTime)
		return -1;
	else if (lpft1->dwHighDateTime > lpft2->dwHighDateTime)
		return 1;
	else if (lpft1->dwLowDateTime < lpft2->dwLowDateTime)
		return -1;
	else if (lpft1->dwLowDateTime > lpft2->dwLowDateTime)
		return 1;
	return 0;
}

void mul64_32_64(const FILETIME *lpnum1, DWORD num2, LPFILETIME lpres) {
	__int64 num1;
	num1 = (__int64)lpnum1->dwLowDateTime * (__int64)num2;
	num1 += ((__int64)lpnum1->dwHighDateTime * (__int64)num2)<<32;
	lpres->dwHighDateTime = (DWORD)(num1>>32);
	lpres->dwLowDateTime = (DWORD)(num1&0xffffffff);
}

void add64_32_64(const FILETIME *lpnum1, DWORD num2, LPFILETIME lpres) {
	DWORD bottom = lpnum1->dwLowDateTime + num2;
	lpres->dwHighDateTime = lpnum1->dwHighDateTime +
		(bottom < lpnum1->dwLowDateTime ? 1 : 0);
	lpres->dwLowDateTime = bottom;
}

#ifdef THUMB
#pragma optimize("",off)
#endif
void add64_64_64(const FILETIME *lpnum1, LPFILETIME lpnum2, LPFILETIME lpres) {
	__int64 num1, num2;
	num1 = (((__int64)lpnum1->dwHighDateTime)<<32)+(__int64)lpnum1->dwLowDateTime;
	num2 = (((__int64)lpnum2->dwHighDateTime)<<32)+(__int64)lpnum2->dwLowDateTime;
	num1 += num2;
	lpres->dwHighDateTime = (DWORD)(num1>>32);
	lpres->dwLowDateTime = (DWORD)(num1&0xffffffff);
}

void sub64_64_64(const FILETIME *lpnum1, LPFILETIME lpnum2, LPFILETIME lpres) {
	__int64 num1, num2;
	num1 = (((__int64)lpnum1->dwHighDateTime)<<32)+(__int64)lpnum1->dwLowDateTime;
	num2 = (((__int64)lpnum2->dwHighDateTime)<<32)+(__int64)lpnum2->dwLowDateTime;
	num1 -= num2;
	lpres->dwHighDateTime = (DWORD)(num1>>32);
	lpres->dwLowDateTime = (DWORD)(num1&0xffffffff);
}
#ifdef THUMB
#pragma optimize("",on)
#endif

// Unsigned divide
// Divides a 64 bit number by a *31* bit number.  Doesn't work for 32 bit divisors!

void div64_32_64(const FILETIME *lpdividend, DWORD divisor, LPFILETIME lpresult) {
	DWORD bitmask;
	DWORD top;
	FILETIME wholetop = *lpdividend;
	top = 0;
	lpresult->dwHighDateTime = 0;
	for (bitmask = 0x80000000; bitmask; bitmask >>= 1) {
		top = (top<<1) + ((wholetop.dwHighDateTime&bitmask) ? 1 : 0);
		if (top >= divisor) {
			top -= divisor;
			lpresult->dwHighDateTime |= bitmask;
		}
	}
	lpresult->dwLowDateTime = 0;
	for (bitmask = 0x80000000; bitmask; bitmask >>= 1) {
		top = (top<<1) + ((wholetop.dwLowDateTime&bitmask) ? 1 : 0);
		if (top >= divisor) {
			top -= divisor;
			lpresult->dwLowDateTime |= bitmask;
		}
	}
}

void DaysAndFractionToTime(ULONG ElapsedDays, ULONG Milliseconds, LPFILETIME lpTime) {
	lpTime->dwLowDateTime = ElapsedDays;
	lpTime->dwHighDateTime = 0;
	// Get number of milliseconds from days
	mul64_32_64(lpTime,86400000,lpTime);
	// Add in number of milliseconds
	add64_32_64(lpTime,Milliseconds,lpTime);
	// Convert to 100ns periods
	mul64_32_64(lpTime,10000,lpTime);
}

VOID TimeToDaysAndFraction(const FILETIME *lpTime, LPDWORD lpElapsedDays, LPDWORD lpMilliseconds) {
	FILETIME Temp, Temp2;
	// Convert 100ns periods to milliseconds
	Temp = *lpTime;
	div64_32_64(&Temp,10000,&Temp);
	// Get number of days
	div64_32_64(&Temp,86400000,&Temp2);
	*lpElapsedDays = Temp2.dwLowDateTime;
	mul64_32_64(&Temp2,86400000,&Temp2);
	sub64_64_64(&Temp,&Temp2,&Temp);
	*lpMilliseconds = Temp.dwLowDateTime;
}

ULONG ElapsedDaysToYears(ULONG ElapsedDays) {
    ULONG NumberOf400s;
    ULONG NumberOf100s;
    ULONG NumberOf4s;

    //  A 400 year time block is 146097 days
    NumberOf400s = ElapsedDays / 146097;
    ElapsedDays -= NumberOf400s * 146097;
    //  A 100 year time block is 36524 days
    //  The computation for the number of 100 year blocks is biased by 3/4 days per
    //  100 years to account for the extra leap day thrown in on the last year
    //  of each 400 year block.
	NumberOf100s = (ElapsedDays * 100 + 75) / 3652425;
    ElapsedDays -= NumberOf100s * 36524;
	//  A 4 year time block is 1461 days
    NumberOf4s = ElapsedDays / 1461;
    ElapsedDays -= NumberOf4s * 1461;
	return (NumberOf400s * 400) + (NumberOf100s * 100) +
           (NumberOf4s * 4) + (ElapsedDays * 100 + 75) / 36525;
}

BOOL IsValidSystemTime(const SYSTEMTIME *lpst) {
	if ((lpst->wYear < 1601) ||
		(lpst->wMonth < 1) ||
		(lpst->wMonth > 12) ||
		(lpst->wDay < 1) ||
		(lpst->wDay > MaxDaysInMonth(lpst->wYear,lpst->wMonth-1)) ||
		(lpst->wHour > 23) ||
		(lpst->wMinute > 59) ||
		(lpst->wSecond > 59) ||
		(lpst->wMilliseconds > 999))
		return FALSE;
	return TRUE;
}

/*
	@doc BOTH EXTERNAL
	
	@func BOOL | SystemTimeToFileTime | Converts a system time to a file time. 
    @parm CONST SYSTEMTIME * | lpst | address of system time to convert 
    @parm LPFILETIME | lpft | address of buffer for converted file time 

	@comm Follows the Win32 reference description without restrictions or modifications. 
*/
BOOL WINAPI SystemTimeToFileTime(const SYSTEMTIME *lpst, LPFILETIME lpft) {
    ULONG ElapsedDays;
    ULONG ElapsedMilliseconds;

	if (!IsValidSystemTime(lpst))
		return FALSE;
    ElapsedDays = ElapsedYearsToDays(lpst->wYear - 1601);
	ElapsedDays += (IsLeapYear(lpst->wYear) ?
		LeapYearDaysBeforeMonth[lpst->wMonth-1] :
		NormalYearDaysBeforeMonth[lpst->wMonth-1]);
    ElapsedDays += lpst->wDay - 1;
    ElapsedMilliseconds = (((lpst->wHour*60) + lpst->wMinute)*60 +
	   lpst->wSecond)*1000 + lpst->wMilliseconds;
    DaysAndFractionToTime(ElapsedDays, ElapsedMilliseconds, lpft);
    return TRUE;
}

/*
	@doc BOTH EXTERNAL
	
	@func BOOL | FileTimeToSystemTime | Converts a 64-bit file time to system time format. 
    @parm CONST FILETIME * | lpFileTime | pointer to file time to convert 
    @parm LPSYSTEMTIME | lpSystemTime | pointer to structure to receive system time  

	@comm Follows the Win32 reference description without restrictions or modifications. 

*/
BOOL WINAPI FileTimeToSystemTime(const FILETIME *lpft, LPSYSTEMTIME lpst) {
    ULONG Days;
	ULONG Years;
	ULONG Minutes;
	ULONG Seconds;
    ULONG Milliseconds;

    TimeToDaysAndFraction(lpft, &Days, &Milliseconds );
    lpst->wDayOfWeek = (WORD)((Days + WEEKDAY_OF_1601) % 7);
	Years = ElapsedDaysToYears(Days);
    Days = Days - ElapsedYearsToDays(Years);
    if (IsLeapYear(Years + 1)) {
        lpst->wMonth = (WORD)(LeapYearDayToMonth[Days] + 1);
        Days = Days - LeapYearDaysBeforeMonth[lpst->wMonth-1];
    } else {
        lpst->wMonth = (WORD)(NormalYearDayToMonth[Days] + 1);
        Days = Days - NormalYearDaysBeforeMonth[lpst->wMonth-1];
    }
	Seconds = Milliseconds/1000;
    lpst->wMilliseconds = (WORD)(Milliseconds % 1000);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区在线免费观看视频| 日韩视频在线你懂得| 国产免费久久精品| 成人综合日日夜夜| 国产精品二区一区二区aⅴ污介绍| 不卡一区二区中文字幕| 国产精品久久久久一区二区三区| 成人18精品视频| 亚洲综合一区在线| 欧美一区二区三区四区在线观看| 久久不见久久见中文字幕免费| 久久综合久久鬼色中文字| 国产宾馆实践打屁股91| 亚洲天堂久久久久久久| 欧美日韩中文另类| 麻豆极品一区二区三区| 久久精品一区四区| 色女孩综合影院| 青青草伊人久久| 国产精品―色哟哟| 欧美日韩在线一区二区| 韩国理伦片一区二区三区在线播放| 国产拍揄自揄精品视频麻豆| 欧美在线视频日韩| 国产自产视频一区二区三区| 亚洲女厕所小便bbb| 欧美一区二区三区四区久久 | 亚洲男人电影天堂| 欧美日韩色一区| 国产精品一区二区久久精品爱涩| 日韩理论电影院| 日韩美一区二区三区| 91色porny| 极品尤物av久久免费看| 亚洲黄色录像片| 日本一区二区三区高清不卡| 99vv1com这只有精品| 日本不卡视频在线| 亚洲欧美另类在线| 久久综合999| 欧美色图一区二区三区| 国产精品一二三区| 日韩av午夜在线观看| 国产精品久久久久影视| 日韩欧美一区中文| 在线视频你懂得一区二区三区| 狠狠色狠狠色综合系列| 亚洲成a人v欧美综合天堂下载| 中文字幕不卡在线观看| 欧美一卡在线观看| 91高清视频免费看| av不卡免费电影| 国产精品一线二线三线精华| 亚洲1区2区3区4区| 日韩理论片在线| 国产亚洲一二三区| 欧美成人乱码一区二区三区| 欧美色视频在线| 色先锋久久av资源部| 国产专区欧美精品| 亚洲欧美一区二区三区国产精品 | 五月激情综合婷婷| 亚洲婷婷综合久久一本伊一区| 欧美精品一区二区久久久| 69堂精品视频| 欧美日韩中文字幕精品| 一本到不卡精品视频在线观看| 成人亚洲精品久久久久软件| 国产在线精品一区在线观看麻豆| 日日摸夜夜添夜夜添精品视频 | 亚洲高清不卡在线| 综合久久久久久| 国产精品对白交换视频| 国产精品美女视频| 国产精品婷婷午夜在线观看| 国产蜜臀av在线一区二区三区| 久久综合成人精品亚洲另类欧美| 日韩美女天天操| 精品国产制服丝袜高跟| 日韩视频一区二区三区在线播放| 在线不卡免费欧美| 欧美一区二区三区电影| 日韩欧美一卡二卡| 久久综合九色综合欧美就去吻| 欧美大片在线观看一区二区| 精品少妇一区二区三区在线播放| 精品国产一区二区三区av性色 | 亚洲激情图片小说视频| 亚洲理论在线观看| 亚洲精品一二三| 亚洲综合自拍偷拍| 亚洲国产视频a| 人妖欧美一区二区| 国内精品视频666| 国产成人鲁色资源国产91色综 | 色悠悠久久综合| 欧美在线一区二区| 这里是久久伊人| 精品三级在线看| 国产精品久久久久久亚洲伦| 亚洲精品视频免费观看| 日本成人在线视频网站| 91香蕉视频在线| 在线亚洲高清视频| 6080日韩午夜伦伦午夜伦| 精品日韩在线观看| 成人免费一区二区三区在线观看| 日韩一区在线看| 日日夜夜一区二区| 国产福利一区二区| 欧美性一二三区| 欧美成人精品二区三区99精品| 中文字幕av一区二区三区免费看 | 国产精品系列在线播放| 色老综合老女人久久久| 日韩免费观看高清完整版在线观看| 亚洲国产精品国自产拍av| 亚洲视频在线一区二区| 麻豆精品在线观看| 成人精品亚洲人成在线| 欧美日韩aaaaa| 国产亚洲精品资源在线26u| 亚洲色图制服丝袜| 久久精品免费观看| 色综合久久中文字幕| 欧美电视剧免费全集观看| 亚洲女同一区二区| 国产精品中文字幕欧美| 欧美日韩精品欧美日韩精品一| 久久天天做天天爱综合色| 亚洲一区二区视频在线| 粗大黑人巨茎大战欧美成人| 日韩一区二区三区av| 国产精品麻豆久久久| 捆绑紧缚一区二区三区视频| 色噜噜夜夜夜综合网| 国产欧美一区二区精品忘忧草 | 蜜桃av一区二区三区| 日本精品一级二级| 国产亚洲欧美在线| 日本欧美一区二区三区| 91麻豆国产福利精品| 久久久精品国产99久久精品芒果| 亚洲午夜av在线| 9i在线看片成人免费| 国产色综合久久| 激情欧美日韩一区二区| 欧美顶级少妇做爰| 亚洲一区二区av在线| 91网站黄www| 亚洲国产成人私人影院tom| 久久99这里只有精品| 777午夜精品免费视频| 一区二区在线观看免费视频播放| 成人高清视频在线| 国产欧美一区二区精品仙草咪| 另类小说欧美激情| 欧美一区二区三区在| 天天色综合成人网| 欧美午夜精品免费| 亚洲精品日韩一| 色猫猫国产区一区二在线视频| 国产精品乱码人人做人人爱 | 成人黄色在线看| 国产亚洲精品aa| 国产精品99久久久久久似苏梦涵| 欧美成人一区二区三区| 美国毛片一区二区| 日韩一区二区三区免费看| 日韩精品一级二级| 日韩欧美亚洲一区二区| 麻豆精品视频在线| 精品国产乱子伦一区| 99精品视频在线免费观看| 亚洲国产精品99久久久久久久久 | 久久精品国产一区二区| 日韩欧美国产精品一区| 久久精品久久久精品美女| 欧美sm极限捆绑bd| 国产精品1区2区3区在线观看| 国产拍欧美日韩视频二区| 成人激情午夜影院| 一区二区三区日韩| 这里只有精品视频在线观看| 日日骚欧美日韩| 久久综合色婷婷| 99久久久国产精品免费蜜臀| 一区二区三区不卡视频| 欧美一区二区三区四区在线观看| 裸体一区二区三区| 国产女主播视频一区二区| av电影在线观看完整版一区二区| 亚洲欧美日韩国产综合在线| 在线观看免费一区| 麻豆精品视频在线| 国产精品久久久久四虎| 精品视频一区 二区 三区| 麻豆精品国产传媒mv男同| 欧美国产一区二区在线观看 | 国产一区二区h|