]> git.lizzy.rs Git - plan9front.git/blobdiff - sys/src/cmd/date.c
aux/realemu: run cpuproc in same fd group as fileserver
[plan9front.git] / sys / src / cmd / date.c
index b9c1a5dca12d4eb504d7334a970030f97c5e8ce3..72ab6d83b553ff309a293828ff20b47051acaef4 100644 (file)
@@ -1,22 +1,23 @@
 #include <u.h>
 #include <libc.h>
 
-int uflg, nflg, iflg, tflg;
+static char *day[] = {
+       "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
+};
 
-static
-void
-numstr(char *cp, int n)
-{
-       cp[0] = (n/10)%10 + '0';
-       cp[1] = n%10 + '0';
-}
+static char *mon[] = {
+       "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul",
+       "Aug", "Sep", "Oct", "Nov", "Dec"
+};
+
+int uflg, nflg, iflg, tflg, mflg;
 
 char*
 isodate(Tm *t)
 {
-       static char c[25]; /* leave room to append isotime */
+       static char c[26]; /* leave room to append isotime */
        snprint(c, 11, "%04d-%02d-%02d", 
-               t->year +1900, t->mon + 1, t->mday);
+               t->year + 1900, t->mon + 1, t->mday);
        return c;
 }
 
@@ -38,7 +39,7 @@ isotime(Tm *t)
                        c[9] = '-';
                        tz = -tz;
                }
-               snprint(c+10, 5, "%02d%02d", tz / 60, tz % 60);
+               snprint(c+10, 6, "%02d:%02d", tz / 60, tz % 60);
        } else {
                c[9] = 'Z';
                c[10] = 0;
@@ -46,6 +47,23 @@ isotime(Tm *t)
        return d;
 }
 
+char *
+mailtime(Tm *t)
+{
+       static char c[64];
+       char *sgn;
+       int off;
+
+       sgn = "+";
+       if(t->tzoff < 0)
+               sgn = "";
+       off = (t->tzoff/3600)*100 + (t->tzoff/60)%60;
+       snprint(c, sizeof(c), "%s, %.2d %s %.4d %.2d:%.2d:%.2d %s%.4d",
+               day[t->wday], t->mday, mon[t->mon], t->year + 1900,
+               t->hour, t->min, t->sec, sgn, off);
+       return c;
+}
+
 void
 main(int argc, char *argv[])
 {
@@ -56,7 +74,8 @@ main(int argc, char *argv[])
        case 'u':       uflg = 1; break;
        case 't':       tflg = 1; /* implies -i */
        case 'i':       iflg = 1; break;
-       default:        fprint(2, "usage: date [-itun] [seconds]\n"); exits("usage");
+       case 'm':       mflg = 1; break;
+       default:        fprint(2, "usage: date [-itunm] [seconds]\n"); exits("usage");
        }ARGEND
 
        if(argc == 1)
@@ -66,17 +85,17 @@ main(int argc, char *argv[])
 
        if(nflg)
                print("%ld\n", now);
-       else if(iflg) {
+       else {
                tm = uflg ? gmtime(now) : localtime(now);
-               if(tflg)
-                       print("%s\n", isotime(tm));
-               else
-                       print("%s\n", isodate(tm));
-       } else {
-               if(uflg)
-                       print("%s", asctime(gmtime(now)));
+               if(iflg) {
+                       if(tflg)
+                               print("%s\n", isotime(tm));
+                       else
+                               print("%s\n", isodate(tm));
+               } else if(mflg)
+                       print("%s\n", mailtime(tm));
                else
-                       print("%s", ctime(now));
+                       print("%s", asctime(tm));
        }
        exits(0);
 }