#include <nds.h>
#include <stdio.h>
#include <time.h>
const char* months[12] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
const char* weekDays[7] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
const u16 daysAtStartOfMonthLUT[12] =
{
0 %7,
31 %7,
59 %7,
90 %7,
120 %7,
151 %7,
181 %7,
212 %7,
243 %7,
273 %7,
304 %7,
334 %7
};
#define isLeapYear(year) (((year)%4) == 0)
uint getDayOfWeek(uint day, uint month, uint year)
{
day += 2*(3-((year/100)%4));
year %= 100;
day += year + (year/4);
day += daysAtStartOfMonthLUT[month] - (isLeapYear(year) && (month <= 1));
return day % 7;
}
void init3D();
void update3D(int hours, int seconds, int minutes);
int main()
{
int hours, seconds, minutes, day, month, year;
consoleDemoInit();
init3D();
while(true)
{
time_t unixTime = time(NULL);
struct tm* timeStruct = gmtime((const time_t *)&unixTime);
hours = timeStruct->tm_hour;
minutes = timeStruct->tm_min;
seconds = timeStruct->tm_sec;
day = timeStruct->tm_mday;
month = timeStruct->tm_mon;
year = timeStruct->tm_year +1900;
printf("\x1b[2J%02i:%02i:%02i", hours, minutes, seconds);
printf("\n%s %s %i %i", weekDays[getDayOfWeek(day, month, year)], months[month], day, year);
update3D(hours, seconds, minutes);
swiWaitForVBlank();
}
return 0;
}
void DrawQuad(float x, float y, float width, float height)
{
glBegin(GL_QUADS);
glVertex3f(x - width / 2, y, 0);
glVertex3f(x + width / 2, y, 0);
glVertex3f(x + width / 2, y + height, 0);
glVertex3f(x - width / 2, y + height, 0);
glEnd();
}
void init3D()
{
lcdMainOnTop();
videoSetMode(MODE_0_3D);
glInit();
glViewport(0,0,255,191);
glClearColor(0,0,0,31);
glClearDepth(0x7FFF);
glPolyFmt(POLY_ALPHA(31) | POLY_CULL_NONE);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(70, 256.0 / 192.0, 0.1, 100);
gluLookAt( 0.0, 0.0, 3.0,
0.0, 0.0, 0.0,
0.0, 1.0, 0.0);
}
void update3D(int hours, int seconds, int minutes)
{
glPushMatrix();
glColor3f(0,0,1);
glRotateZ(-seconds * 360 / 60);
glTranslatef(0,1.9,0);
DrawQuad(0,0,.2,.2);
glPopMatrix(1);
glPushMatrix();
glColor3f(0,1,0);
glRotateZ(-minutes * 360 / 60);
DrawQuad(0,0,.2,2);
glPopMatrix(1);
glPushMatrix();
glColor3f(1,0,0);
glRotateZ(-hours * 360 / 12);
DrawQuad(0,0,.3,1.8);
glPopMatrix(1);
glFlush(0);
}