86 lines
1.7 KiB
C
86 lines
1.7 KiB
C
/*
|
|
Copyright (C) 2016-2019 The University of Notre Dame
|
|
This software is distributed under the GNU General Public License.
|
|
See the file LICENSE for details.
|
|
*/
|
|
|
|
|
|
#include "library/syscalls.h"
|
|
#include "library/string.h"
|
|
#include "library/stdio.h"
|
|
#include "library/nwindow.h"
|
|
|
|
/*
|
|
Display time in a window
|
|
*/
|
|
|
|
void draw_clock( struct nwindow *nw, uint32_t hour, uint32_t minute, int timezone, int military, int x, int y, int padding, int r, int g, int b);
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
int timezone = 5;
|
|
int military = 0;
|
|
|
|
/* Get initial time */
|
|
struct rtc_time time;
|
|
syscall_system_rtc(&time);
|
|
|
|
/* Clock draw params */
|
|
int CLOCK_W = 55;
|
|
int CLOCK_H = 25;
|
|
int thickness = 4;
|
|
|
|
/* Set up window */
|
|
struct nwindow *nw = nw_create_default();
|
|
|
|
/* Run Clock */
|
|
while(nw_getchar(nw,0)!='q')
|
|
{
|
|
syscall_system_rtc(&time);
|
|
nw_clear(nw,0, 0, CLOCK_W, CLOCK_H);
|
|
draw_clock(nw,time.hour, time.minute, timezone, military, 0, 0, 2*thickness, 255, 255, 255);
|
|
syscall_process_sleep(2000);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
void draw_clock( struct nwindow *nw, uint32_t hour, uint32_t minute, int timezone, int military, int x, int y, int padding, int r, int g, int b)
|
|
{
|
|
char h_str[100];
|
|
char m_str[100];
|
|
char time[100] = "";
|
|
|
|
/* Configure time */
|
|
int tz_hour = (int)hour - timezone;
|
|
if (tz_hour < 0)
|
|
{
|
|
tz_hour += 24;
|
|
}
|
|
|
|
if (military == 0 && tz_hour > 12)
|
|
{
|
|
tz_hour -= 12;
|
|
}
|
|
|
|
uint_to_string((uint32_t) tz_hour, h_str);
|
|
uint_to_string(minute, m_str);
|
|
|
|
/* Format time string */
|
|
if (strlen(h_str) == 1)
|
|
{
|
|
strcat(time, " ");
|
|
}
|
|
strcat(time, (const char *) h_str);
|
|
strcat(time, ":");
|
|
if (strlen(m_str) == 1)
|
|
{
|
|
strcat(time, "0");
|
|
}
|
|
strcat(time, (const char *) m_str);
|
|
|
|
nw_fgcolor(nw,r,g,b);
|
|
nw_string(nw,x + padding, y + padding, time);
|
|
nw_flush(nw);
|
|
}
|