* Doxygen groups. Sorted the files into groups. so now we have a nice structure
[citadel.git] / webcit / fmt_date.c
index 640db83c2f1a698e21e78848ef334674005966bb..0475f91cf3b0c3a91c410078d5ed72874e769b19 100644 (file)
@@ -1,28 +1,26 @@
 /*
  * $Id$
- *
- * Miscellaneous routines 
  */
-
+/**
+ * \defgroup FormatDates Miscellaneous routines formating dates
+ * \ingroup Calendaring
+ */
+/*@{*/
 #include "webcit.h"
 #include "webserver.h"
 
-typedef unsigned char byte;
-
-#define FALSE 0
-#define TRUE 1
-
-char *ascmonths[] = {
-       "Jan", "Feb", "Mar", "Apr", "May", "Jun",
-       "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
-};
+typedef unsigned char byte; /**< a byte. */
+char *wdays[7];
+char *months[12];
 
-char *ascdays[] = {
-       "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
-};
+#define FALSE 0 /**< no. */
+#define TRUE 1 /**< yes. */
 
-/*
- * Format a date/time stamp for output 
+/**
+ * \brief Format a date/time stamp for output 
+ * \param buf the output buffer
+ * \param thetime time to convert to string 
+ * \param brief do we want compact view?????
  */
 void fmt_date(char *buf, time_t thetime, int brief)
 {
@@ -31,6 +29,22 @@ void fmt_date(char *buf, time_t thetime, int brief)
        time_t today_timet;
        int hour;
        char calhourformat[16];
+       static char *ascmonths[12] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL } ;
+
+       if (ascmonths[0] == NULL) {
+               ascmonths[0] = _("Jan");
+               ascmonths[1] = _("Feb");
+               ascmonths[2] = _("Mar");
+               ascmonths[3] = _("Apr");
+               ascmonths[4] = _("May");
+               ascmonths[5] = _("Jun");
+               ascmonths[6] = _("Jul");
+               ascmonths[7] = _("Aug");
+               ascmonths[8] = _("Sep");
+               ascmonths[9] = _("Oct");
+               ascmonths[10] = _("Nov");
+               ascmonths[11] = _("Dec");
+       };
 
        get_preference("calhourformat", calhourformat, sizeof calhourformat);
 
@@ -48,7 +62,7 @@ void fmt_date(char *buf, time_t thetime, int brief)
 
        if (brief) {
 
-               /* If date == today, show only the time */
+               /** If date == today, show only the time */
                if ((tm.tm_year == today_tm.tm_year)
                  &&(tm.tm_mon == today_tm.tm_mon)
                  &&(tm.tm_mday == today_tm.tm_mday)) {
@@ -65,7 +79,7 @@ void fmt_date(char *buf, time_t thetime, int brief)
                        }
                }
 
-               /* Otherwise, for messages up to 6 months old, show the
+               /** Otherwise, for messages up to 6 months old, show the
                 * month and day, and the time */
                else if (today_timet - thetime < 15552000) {
                        if (!strcasecmp(calhourformat, "24")) {
@@ -85,7 +99,7 @@ void fmt_date(char *buf, time_t thetime, int brief)
                        }
                }
 
-               /* older than 6 months, show only the date */
+               /** older than 6 months, show only the date */
                else {
                        sprintf(buf, "%s %d %d",
                                ascmonths[tm.tm_mon],
@@ -116,8 +130,10 @@ void fmt_date(char *buf, time_t thetime, int brief)
 
 
 
-/*
- * Format TIME ONLY for output 
+/**
+ * \brief Format TIME ONLY for output 
+ * \param buf the output buffer
+ * \param thetime time to format into buf
  */
 void fmt_time(char *buf, time_t thetime)
 {
@@ -150,29 +166,13 @@ void fmt_time(char *buf, time_t thetime)
 
 
 
-/*
- * Format a date/time stamp to the format used in HTTP headers
- */
-void httpdate(char *buf, time_t thetime)
-{
-       struct tm *tm;
-
-       buf[0] = 0;
-       tm = localtime(&thetime);
-
-       sprintf(buf, "%s, %02d %s %4d %02d:%02d:%02d",
-               ascdays[tm->tm_wday],
-               tm->tm_mday,
-               ascmonths[tm->tm_mon],
-               tm->tm_year + 1900, tm->tm_hour, tm->tm_min, tm->tm_sec);
-}
-
-
-/*
- * Break down the timestamp used in HTTP headers
+/**
+ * \brief Break down the timestamp used in HTTP headers
  * Should read rfc1123 and rfc850 dates OK
- * FIXME won't read asctime
+ * \todo FIXME won't read asctime
  * Doesn't understand timezone, but we only should be using GMT/UTC anyway
+ * \param buf time to parse
+ * \return the time found in buf
  */
 time_t httpdate_to_timestamp(const char *buf)
 {
@@ -181,7 +181,7 @@ time_t httpdate_to_timestamp(const char *buf)
        char *c;
        char tz[256];
 
-       /* Skip day of week, to number */
+       /** Skip day of week, to number */
        for (c = buf; *c != ' '; c++)
                ;
        c++;
@@ -191,62 +191,62 @@ time_t httpdate_to_timestamp(const char *buf)
        for (; *c != ' ' && *c != '-'; c++);
        c++;
 
-       /* Get month */
+       /** Get month */
        switch (*c) {
-       case 'A':       /* April, August */
+       case 'A':       /** April, August */
                tt.tm_mon = (c[1] == 'p') ? 3 : 7;
                break;
-       case 'D':       /* December */
+       case 'D':       /** December */
                tt.tm_mon = 11;
                break;
-       case 'F':       /* February */
+       case 'F':       /** February */
                tt.tm_mon = 1;
                break;
-       case 'M':       /* March, May */
+       case 'M':       /** March, May */
                tt.tm_mon = (c[2] == 'r') ? 2 : 4;
                break;
-       case 'J':       /* January, June, July */
+       case 'J':       /** January, June, July */
                tt.tm_mon = (c[2] == 'n') ? ((c[1] == 'a') ? 0 : 5) : 6;
                break;
-       case 'N':       /* November */
+       case 'N':       /** November */
                tt.tm_mon = 10;
                break;
-       case 'O':       /* October */
+       case 'O':       /** October */
                tt.tm_mon = 9;
                break;
-       case 'S':       /* September */
+       case 'S':       /** September */
                tt.tm_mon = 8;
                break;
        default:
                return 42;
-               break;  /* NOTREACHED */
+               break;  /** NOTREACHED */
        }
        c += 4;
 
        tt.tm_year = 0;
-       /* Get year */
+       /** Get year */
        tt.tm_year = atoi(c);
        for (; *c != ' '; c++);
        c++;
        if (tt.tm_year >= 1900)
                tt.tm_year -= 1900;
 
-       /* Get hour */
+       /** Get hour */
        tt.tm_hour = atoi(c);
        for (; *c != ':'; c++);
        c++;
 
-       /* Get minute */
+       /** Get minute */
        tt.tm_min = atoi(c);
        for (; *c != ':'; c++);
        c++;
 
-       /* Get second */
+       /** Get second */
        tt.tm_sec = atoi(c);
        for (; *c && *c != ' '; c++);
 
-       /* Got everything; let's go */
-       /* First, change to UTC */
+       /** Got everything; let's go */
+       /** First, change to UTC */
        if (getenv("TZ"))
                sprintf(tz, "TZ=%s", getenv("TZ"));
        else
@@ -258,3 +258,36 @@ time_t httpdate_to_timestamp(const char *buf)
        tzset();
        return t;
 }
+
+
+
+/**
+ * /brief Initialize the strings used to display months and weekdays.
+ */
+void initialize_months_and_days(void) {
+       wdays[0] = _("Sunday");
+       wdays[1] = _("Monday");
+       wdays[2] = _("Tuesday");
+       wdays[3] = _("Wednesday");
+       wdays[4] = _("Thursday");
+       wdays[5] = _("Friday");
+       wdays[6] = _("Saturday");
+
+       months[0] = _("January");
+       months[1] = _("February");
+       months[2] = _("March");
+       months[3] = _("April");
+       months[4] = _("May");
+       months[5] = _("June");
+       months[6] = _("July");
+       months[7] = _("August");
+       months[8] = _("September");
+       months[9] = _("October");
+       months[10] = _("November");
+       months[11] = _("December");
+}
+
+
+
+
+/*@}*/