summaryrefslogtreecommitdiff
path: root/packages/libndsfpc/examples/RealTimeClock/Watch/watch.pp
diff options
context:
space:
mode:
Diffstat (limited to 'packages/libndsfpc/examples/RealTimeClock/Watch/watch.pp')
-rw-r--r--packages/libndsfpc/examples/RealTimeClock/Watch/watch.pp120
1 files changed, 120 insertions, 0 deletions
diff --git a/packages/libndsfpc/examples/RealTimeClock/Watch/watch.pp b/packages/libndsfpc/examples/RealTimeClock/Watch/watch.pp
new file mode 100644
index 0000000000..70fea7d2d6
--- /dev/null
+++ b/packages/libndsfpc/examples/RealTimeClock/Watch/watch.pp
@@ -0,0 +1,120 @@
+program watch;
+
+uses
+ ctypes, nds9;
+
+var
+ hours, seconds, minutes: integer;
+ months: array [0..11] of pchar = ('January', 'February', 'March', 'April',
+ 'May', 'June', 'July', 'August',
+ 'September', 'October', 'November', 'December');
+
+ unixTime: time_t;
+ timeStruct: ptm;
+
+//function errno2: pcint; cdecl; external name 'errno';
+
+{ $define errno := __errno()^}
+
+
+//draw a watch hands
+procedure DrawQuad(x, y, width, height: cfloat);
+begin
+ 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();
+end;
+
+
+begin
+ //put 3D on top
+ lcdMainOnTop();
+
+ // Setup the Main screen for 3D
+ videoSetMode(MODE_0_3D);
+
+ // Reset the screen and setup the view
+ glInit();
+
+ // Set our viewport to be the same size as the screen
+ glViewport(0,0,255,191);
+
+ // Specify the Clear Color and Depth
+ glClearColor(0,0,0,31);
+ glClearDepth($7FFF);
+
+ consoleDemoInit();
+
+
+
+
+ //ds specific, several attributes can be set here
+ glPolyFmt(POLY_ALPHA(31) or POLY_CULL_NONE);
+
+ // Set the current matrix to be the model matrix
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ gluPerspective(70, 256.0 / 192.0, 0.1, 100);
+ gluLookAt( 0.0, 0.0, 3.0, //camera possition
+ 0.0, 0.0, 0.0, //look at
+ 0.0, 1.0, 0.0); //up
+
+ while true do
+ begin
+ unixTime := time(nil);
+ timeStruct := gmtime(ptime_t(@unixTime));
+
+ hours := timeStruct^.tm_hour;
+ minutes := timeStruct^.tm_min;
+ seconds := timeStruct^.tm_sec;
+
+ //Push our original Matrix onto the stack (save state)
+ glPushMatrix();
+
+ //draw second hand
+ glColor3f(0,0,1);
+ glRotateZ(-seconds * 360 / 60);
+ glTranslatef(0, 1.9, 0);
+ DrawQuad(0, 0, 0.2, 0.2);
+
+ // Pop our Matrix from the stack (restore state)
+ glPopMatrix(1);
+
+ //Push our original Matrix onto the stack (save state)
+ glPushMatrix();
+
+ //draw minute hand
+ glColor3f(0, 1, 0);
+ glRotateZ(-minutes * 360 / 60);
+ DrawQuad(0, 0, 0.2, 2);
+
+ // Pop our Matrix from the stack (restore state)
+ glPopMatrix(1);
+
+ //Push our original Matrix onto the stack (save state)
+ glPushMatrix();
+
+ //draw hourhand
+ glColor3f(1, 0, 0);
+ glRotateZ(-hours * 360 / 12);
+ DrawQuad(0, 0, 0.3, 1.8);
+
+ // Pop our Matrix from the stack (restore state)
+ glPopMatrix(1);
+
+ printf(#$1B'[2J%02i:%02i:%02i', hours, minutes, seconds);
+ printf(#10'%s %i %i', months[timeStruct^.tm_mon], timeStruct^.tm_mday, timeStruct^.tm_year +1900);
+
+ // flush to screen
+ glFlush(0);
+
+ swiWaitForVBlank();
+ end;
+
+end.