From 0791eaabca0fb1ef8a8675e47d701bbcde4d4a3f Mon Sep 17 00:00:00 2001
From: Lukas Fleischer <calcurse@cryptocrack.de>
Date: Fri, 13 Apr 2012 19:19:48 +0200
Subject: Merge "%(start"{,str}")" and "%(end"{,str}")"

Add "default" and "epoch" extended formats for dates. "default" is the
same as "%H:%M", "epoch" prints the number of seconds since January 1,
1970.

Also, change the semantics of "%(start)" to return dates in default
format (same format that "%(startstr)" used to use before this patch).
The old "%(start)" behavior can be emulated by using "%(start:epoch)".
The same applies to "%(end)" and "%(endstr)".

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
---
 src/utils.c | 34 +++++++++++++---------------------
 1 file changed, 13 insertions(+), 21 deletions(-)

(limited to 'src')

diff --git a/src/utils.c b/src/utils.c
index 1c81f83..56295f6 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -53,10 +53,8 @@
 
 enum format_specifier {
   FS_STARTDATE,
-  FS_STARTDATESTR,
   FS_DURATION,
   FS_ENDDATE,
-  FS_ENDDATESTR,
   FS_MESSAGE,
   FS_NOTE,
   FS_NOTEFILE,
@@ -1092,15 +1090,17 @@ parse_fs (const char **s, char *extformat)
   switch (**s)
     {
     case 's':
+      strcpy (extformat, "epoch");
       return FS_STARTDATE;
     case 'S':
-      return FS_STARTDATESTR;
+      return FS_STARTDATE;
     case 'd':
       return FS_DURATION;
     case 'e':
+      strcpy (extformat, "epoch");
       return FS_ENDDATE;
     case 'E':
-      return FS_ENDDATESTR;
+      return FS_ENDDATE;
     case 'm':
       return FS_MESSAGE;
     case 'n':
@@ -1138,14 +1138,10 @@ parse_fs (const char **s, char *extformat)
 
       if (!strcmp (buf, "start"))
         return FS_STARTDATE;
-      else if (!strcmp (buf, "startstr"))
-        return FS_STARTDATESTR;
       else if (!strcmp (buf, "duration"))
         return FS_DURATION;
       else if (!strcmp (buf, "end"))
         return FS_ENDDATE;
-      else if (!strcmp (buf, "endstr"))
-        return FS_ENDDATESTR;
       else if (!strcmp (buf, "message"))
         return FS_MESSAGE;
       else if (!strcmp (buf, "noteid"))
@@ -1171,15 +1167,20 @@ print_date (long date, const char *extformat)
 {
   char buf[BUFSIZ];
 
-  if (extformat[0] != '\0')
+  if (!strcmp (extformat, "epoch"))
+    printf ("%ld", date);
+  else
     {
       time_t t = date;
       struct tm *lt = localtime ((time_t *)&t);
-      strftime (buf, BUFSIZ, extformat, lt);
+
+      if (extformat[0] == '\0' || !strcmp (extformat, "default"))
+        strftime (buf, BUFSIZ, "%H:%M", lt);
+      else
+        strftime (buf, BUFSIZ, extformat, lt);
+
       printf ("%s", buf);
     }
-  else
-    printf ("%ld", date);
 }
 
 /* Print a formatted appointment to stdout. */
@@ -1187,11 +1188,8 @@ void
 print_apoint (const char *format, long day, struct apoint *apt)
 {
   const char *p;
-  char str_start[HRMIN_SIZE], str_end[HRMIN_SIZE];
   char extformat[FS_EXT_MAXLEN];
 
-  apoint_sec2str (apt, day, str_start, str_end);
-
   for (p = format; *p; p++)
     {
       if (*p == '%') {
@@ -1201,18 +1199,12 @@ print_apoint (const char *format, long day, struct apoint *apt)
           case FS_STARTDATE:
             print_date (apt->start, extformat);
             break;
-          case FS_STARTDATESTR:
-            printf ("%s", str_start);
-            break;
           case FS_DURATION:
             printf ("%ld", apt->dur);
             break;
           case FS_ENDDATE:
             print_date (apt->start + apt->dur, extformat);
             break;
-          case FS_ENDDATESTR:
-            printf ("%s", str_end);
-            break;
           case FS_MESSAGE:
             printf ("%s", apt->mesg);
             break;
-- 
cgit v1.2.3-70-g09d2