mirror of
https://github.com/wiidev/usbloadergx.git
synced 2024-12-23 18:31:56 +01:00
120 lines
3.1 KiB
C
120 lines
3.1 KiB
C
|
/***************************************************************************
|
||
|
* Copyright (C) 2010
|
||
|
* by Dimok
|
||
|
*
|
||
|
* This software is provided 'as-is', without any express or implied
|
||
|
* warranty. In no event will the authors be held liable for any
|
||
|
* damages arising from the use of this software.
|
||
|
*
|
||
|
* Permission is granted to anyone to use this software for any
|
||
|
* purpose, including commercial applications, and to alter it and
|
||
|
* redistribute it freely, subject to the following restrictions:
|
||
|
*
|
||
|
* 1. The origin of this software must not be misrepresented; you
|
||
|
* must not claim that you wrote the original software. If you use
|
||
|
* this software in a product, an acknowledgment in the product
|
||
|
* documentation would be appreciated but is not required.
|
||
|
*
|
||
|
* 2. Altered source versions must be plainly marked as such, and
|
||
|
* must not be misrepresented as being the original software.
|
||
|
*
|
||
|
* 3. This notice may not be removed or altered from any source
|
||
|
* distribution.
|
||
|
*
|
||
|
* for WiiXplorer 2010
|
||
|
***************************************************************************/
|
||
|
#include <gctypes.h>
|
||
|
#include <time.h>
|
||
|
#include "timer.h"
|
||
|
|
||
|
bool TimePassed(int limit)
|
||
|
{
|
||
|
static time_t starttime = 0;
|
||
|
time_t timer = time(NULL);
|
||
|
|
||
|
if (starttime == 0)
|
||
|
starttime = timer;
|
||
|
|
||
|
if(difftime(timer, starttime) >= limit)
|
||
|
{
|
||
|
starttime = 0;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
#define PERIOD_4 (4 * 365 + 1)
|
||
|
#define PERIOD_100 (PERIOD_4 * 25 - 1)
|
||
|
#define PERIOD_400 (PERIOD_100 * 4 + 1)
|
||
|
void ConvertNTFSDate(u64 ulNTFSDate, TimeStruct * ptm)
|
||
|
{
|
||
|
unsigned year, mon, day, hour, min, sec;
|
||
|
u64 v64 = ulNTFSDate;
|
||
|
u8 ms[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
|
||
|
unsigned temp;
|
||
|
u32 v;
|
||
|
v64 /= 10000000;
|
||
|
sec = (unsigned)(v64 % 60);
|
||
|
v64 /= 60;
|
||
|
min = (unsigned)(v64 % 60);
|
||
|
v64 /= 60;
|
||
|
hour = (unsigned)(v64 % 24)+1;
|
||
|
v64 /= 24;
|
||
|
|
||
|
v = (u32)v64;
|
||
|
|
||
|
year = (unsigned)(1601 + v / PERIOD_400 * 400);
|
||
|
v %= PERIOD_400;
|
||
|
|
||
|
temp = (unsigned)(v / PERIOD_100);
|
||
|
if (temp == 4)
|
||
|
temp = 3;
|
||
|
year += temp * 100;
|
||
|
v -= temp * PERIOD_100;
|
||
|
|
||
|
temp = v / PERIOD_4;
|
||
|
if (temp == 25)
|
||
|
temp = 24;
|
||
|
year += temp * 4;
|
||
|
v -= temp * PERIOD_4;
|
||
|
|
||
|
temp = v / 365;
|
||
|
if (temp == 4)
|
||
|
temp = 3;
|
||
|
year += temp;
|
||
|
v -= temp * 365;
|
||
|
|
||
|
if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0))
|
||
|
ms[1] = 29;
|
||
|
for (mon = 1; mon <= 12; mon++)
|
||
|
{
|
||
|
unsigned s = ms[mon - 1];
|
||
|
if (v < s)
|
||
|
break;
|
||
|
v -= s;
|
||
|
}
|
||
|
day = (unsigned)v + 1;
|
||
|
|
||
|
ptm->tm_mday = (u32)day;
|
||
|
ptm->tm_mon = (u32)mon;
|
||
|
ptm->tm_year = (u32)year;
|
||
|
|
||
|
ptm->tm_hour = (u32)hour;
|
||
|
ptm->tm_min = (u32)min;
|
||
|
ptm->tm_sec = (u32)sec;
|
||
|
}
|
||
|
|
||
|
void ConvertDosDate(u64 ulDosDate, TimeStruct * ptm)
|
||
|
{
|
||
|
u32 uDate;
|
||
|
uDate = (u32)(ulDosDate>>16);
|
||
|
ptm->tm_mday = (u32)(uDate&0x1f) ;
|
||
|
ptm->tm_mon = (u32)((((uDate)&0x1E0)/0x20)) ;
|
||
|
ptm->tm_year = (u32)(((uDate&0x0FE00)/0x0200)+1980) ;
|
||
|
|
||
|
ptm->tm_hour = (u32) ((ulDosDate &0xF800)/0x800);
|
||
|
ptm->tm_min = (u32) ((ulDosDate&0x7E0)/0x20) ;
|
||
|
ptm->tm_sec = (u32) (2*(ulDosDate&0x1f)) ;
|
||
|
}
|