123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- program realtimeclock;
- {$mode objfpc}
- 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.
|