info-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

$DateLocal$


From: 鯉江英隆
Subject: $DateLocal$
Date: Fri, 15 Jun 2001 13:29:37 +0900

I implement $DateLocal$ keyword expansion using strftime().
Is this a bad idea?

--
KOIE Hidetaka <address@hidden>
Index: rcs.c
===================================================================
RCS file: /home2/cvsroot/ccvs/src/rcs.c,v
retrieving revision 1.248
diff -p -u -b -B -r1.248 rcs.c
--- rcs.c       7 Jun 2001 19:10:26 -0000       1.248
+++ rcs.c       15 Jun 2001 04:22:26 -0000
@@ -3355,6 +3355,7 @@ static const struct rcs_keyword keywords
 {
     { KEYWORD_INIT ("Author") },
     { KEYWORD_INIT ("Date") },
+    { KEYWORD_INIT ("DateLocal") },
     { KEYWORD_INIT ("Header") },
     { KEYWORD_INIT ("Id") },
     { KEYWORD_INIT ("Locker") },
@@ -3370,6 +3371,7 @@ enum keyword
 {
     KEYWORD_AUTHOR = 0,
     KEYWORD_DATE,
+    KEYWORD_DATELOCAL,
     KEYWORD_HEADER,
     KEYWORD_ID,
     KEYWORD_LOCKER,
@@ -3400,6 +3402,44 @@ printable_date (rcs_date)
     return xstrdup (buf);
 }
 
+static char *
+printable_date_local (rcs_date)
+     const char *rcs_date;
+{
+    int year, mon, mday, hour, min, sec;
+    char buf[100];
+
+    (void) sscanf (rcs_date, SDATEFORM, &year, &mon, &mday, &hour, &min,
+                  &sec);
+    if (year < 1900)
+       year += 1900;
+
+    {
+       time_t t;
+       struct tm gmt, local;
+       struct tm tm;
+       struct tm *ptm;
+
+       t = 0;
+       gmt = *gmtime(&t);
+       local = *localtime(&t);
+
+       memset(&tm, 0, sizeof tm);
+       tm.tm_year = year - 1900 + (local.tm_year - gmt.tm_year);
+       tm.tm_mon = mon - 1      + (local.tm_mon  - gmt.tm_mon);
+       tm.tm_mday = mday        + (local.tm_mday - gmt.tm_mday);
+       tm.tm_hour = hour        + (local.tm_hour - gmt.tm_hour);
+       tm.tm_min = min          + (local.tm_min  - gmt.tm_min);
+       tm.tm_sec = sec          + (local.tm_sec  - gmt.tm_sec);
+       t = mktime(&tm);
+       ptm = localtime(&t);
+        if (strftime (buf, sizeof buf, "%Y/%m/%d %H:%M:%S %Z", ptm) == 0)
+            return printable_date (rcs_date);
+    }
+
+    return xstrdup (buf);
+}
+
 /* Escape the characters in a string so that it can be included in an
    RCS value.  */
 
@@ -3601,6 +3641,11 @@ expand_keywords (rcs, ver, name, log, lo
 
            case KEYWORD_DATE:
                value = printable_date (ver->date);
+               free_value = 1;
+               break;
+
+           case KEYWORD_DATELOCAL:
+               value = printable_date_local (ver->date);
                free_value = 1;
                break;
 

reply via email to

[Prev in Thread] Current Thread [Next in Thread]