summaryrefslogtreecommitdiff
path: root/apps/gui
diff options
context:
space:
mode:
authorBrandon Low <lostlogic@rockbox.org>2006-03-18 22:42:02 +0000
committerBrandon Low <lostlogic@rockbox.org>2006-03-18 22:42:02 +0000
commitddf7c70a453465f387df2affa6c3a560e0920b11 (patch)
tree456e916b3b4b10a519cf77de40774a6446c65d4a /apps/gui
parent169cd33b3707ecfaea288c67dd39e586da93d795 (diff)
downloadrockbox-ddf7c70a453465f387df2affa6c3a560e0920b11.zip
rockbox-ddf7c70a453465f387df2affa6c3a560e0920b11.tar.gz
rockbox-ddf7c70a453465f387df2affa6c3a560e0920b11.tar.bz2
rockbox-ddf7c70a453465f387df2affa6c3a560e0920b11.tar.xz
Real Time Clock support in the WPS
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@9105 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/gui')
-rw-r--r--apps/gui/gwps-common.c139
1 files changed, 139 insertions, 0 deletions
diff --git a/apps/gui/gwps-common.c b/apps/gui/gwps-common.c
index 1b0f44f..b250674 100644
--- a/apps/gui/gwps-common.c
+++ b/apps/gui/gwps-common.c
@@ -23,6 +23,7 @@
#include <stdlib.h>
#include "system.h"
#include "settings.h"
+#include "rtc.h"
#include "audio.h"
#include "status.h"
#include "power.h"
@@ -913,6 +914,144 @@ static char* get_tag(struct wps_data* wps_data,
return buf;
}
break;
+#ifdef CONFIG_RTC
+ case 'c': /* Real Time Clock display */
+ *flags |= WPS_REFRESH_DYNAMIC;
+ {
+ int value;
+ char *format = 0;
+ char *bufptr = buf;
+ struct tm* tm = get_time();
+ int i;
+ for (i=1;/*break*/;i++) {
+ switch(tag[i])
+ {
+ case 'a': /* abbreviated weekday name (Sun..Sat) */
+ value = tm->tm_wday;
+ if (value > 6 || value < 0) continue;
+ value = snprintf(
+ bufptr,buf_size,"%s",str(dayname[value]));
+ bufptr += value;
+ buf_size -= value;
+ continue;
+ case 'b': /* abbreviated month name (Jan..Dec) */
+ value = tm->tm_mon;
+ if (value > 11 || value < 0) continue;
+ value = snprintf(
+ bufptr,buf_size,"%s",str(monthname[value]));
+ bufptr += value;
+ buf_size -= value;
+ continue;
+ case 'd': /* day of month (01..31) */
+ value = tm->tm_mday;
+ if (value > 31 || value < 1) continue;
+ format = "%02d";
+ break;
+ case 'e': /* day of month, blank padded ( 1..31) */
+ value = tm->tm_mday;
+ if (value > 31 || value < 1) continue;
+ format = "%2d";
+ break;
+ case 'H': /* hour (00..23) */
+ value = tm->tm_hour;
+ if (value > 23) continue;
+ format = "%02d";
+ break;
+ case 'k': /* hour ( 0..23) */
+ value = tm->tm_hour;
+ if (value > 23) continue;
+ format = "%2d";
+ break;
+ case 'I': /* hour (01..12) */
+ value = tm->tm_hour;
+ if (value > 23) continue;
+ value %= 12;
+ if (value == 0) value = 12;
+ format = "%02d";
+ break;
+ case 'l': /* hour ( 1..12) */
+ value = tm->tm_hour;
+ if (value > 23 || value < 0) continue;
+ value %= 12;
+ if (value == 0) value = 12;
+ format = "%2d";
+ break;
+ case 'm': /* month (01..12) */
+ value = tm->tm_mon;
+ if (value > 11 || value < 0) continue;
+ value++;
+ format = "%02d";
+ break;
+ case 'M': /* minute (00..59) */
+ value = tm->tm_min;
+ if (value > 59 || value < 0) continue;
+ format = "%02d";
+ break;
+ case 'S': /* second (00..59) */
+ value = tm->tm_sec;
+ if (value > 59 || value < 0) continue;
+ format = "%02d";
+ break;
+ case 'y': /* last two digits of year (00..99) */
+ value = tm->tm_year;
+ value %= 100;
+ format = "%02d";
+ break;
+ case 'Y': /* year (1970...) */
+ value = tm->tm_year;
+ if (value > 199 || value < 100) continue;
+ value += 1900;
+ format = "%04d";
+ break;
+ case 'p': /* upper case AM or PM indicator */
+ if (tm->tm_hour/12 == 0) format = "AM";
+ else format = "PM";
+ snprintf(bufptr,buf_size,"%s",format);
+ bufptr += 2;
+ buf_size -= 2;
+ continue;
+ case 'P': /* lower case am or pm indicator */
+ if (tm->tm_hour/12 == 0) format = "am";
+ else format = "pm";
+ snprintf(bufptr,buf_size,"%s",format);
+ bufptr += 2;
+ buf_size -= 2;
+ continue;
+ case 'u': /* day of week (1..7); 1 is Monday */
+ value = tm->tm_wday;
+ if (value < 0 || value > 6) continue;
+ value++;
+ format = "%1d";
+ break;
+ case 'w': /* day of week (0..6); 0 is Sunday */
+ value = tm->tm_wday;
+ if (value < 0 || value > 6) continue;
+ format = "%1d";
+ break;
+ default:
+ if (tag[i] == 'c') {
+ i++;
+ value = -1;
+ break;
+ } else if (tag[i] == '\n') {
+ value = -1;
+ break;
+ }
+ snprintf(bufptr,buf_size,"%c",tag[i]);
+ bufptr++;
+ buf_size--;
+ continue;
+ } /* switch */
+ if (value < 0) break;
+
+ value = snprintf(bufptr, buf_size, format, value);
+ bufptr += value;
+ buf_size -= value;
+ } /* while */
+ *tag_len = i;
+ return buf;
+ }
+#endif /* CONFIG_RTC */
}
return NULL;
}