luxos/SysCore/lib/time.c

79 lines
2.4 KiB
C

#include <system.h>
#include <time.h>
const char* clock_month[] = {0,
"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"};
const char* clock_weekday[] = {0,
"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
unsigned char clock_months_len[] = {
0,
31, // January
28, // February
31, // March
30, // April
31, // May
30, // June
31, // July
31, // August
30, // September
31, // October
30, // November
31 // December
};
void _CLOCK_INC(TIME *tim)
{
// New minute
if (++tim->second > 59) {
tim->second = 0;
// New hour
if (++tim->minute > 59) {
tim->minute = 0;
tim->hour++;
if (tim->hour == 24) { // Midnight
tim->hour = 0;
// New day
tim->weekday = 1+(tim->weekday%7);
// Leap years
if ((tim->day==28) && (tim->month==2)) { tim->day++; return; }
// New month
if (++tim->day > clock_months_len[tim->month]) {
tim->day = 1;
// New year
if (++tim->month>12) {
tim->month = 1;
// New century
if (++tim->year > 99) { tim->year = 0; tim->century++;}
}
}
}
}
}
}
/* ASCTIME Formats: ****************************************************************
* 1 W = weekday, M = month, D = day, H = Hour, M = Minute, S = Second, Y = year) *
* A = AM/PM *
* 2 Use capital letter for one letter/digit; else, use lower *
* *
* Example: asctime (time, "Today is: %W3 %D2 %m") *
* Result: Today is: Mon 22 June *
************************************************************************************/
/*char* asctime (TIME time, char* format)
{
char str[100];
int l = strlen(format), i;
unsigned char special = 0;
for (i=0; i<l-1 && i<100; i++) {
if (format[i] == '%') switch (format[i+1]) {
case 'W':
}*/