summaryrefslogtreecommitdiff
path: root/sys/src/cmd/cwfs/time.c
diff options
context:
space:
mode:
authorTaru Karttunen <taruti@taruti.net>2011-03-30 15:46:40 +0300
committerTaru Karttunen <taruti@taruti.net>2011-03-30 15:46:40 +0300
commite5888a1ffdae813d7575f5fb02275c6bb07e5199 (patch)
treed8d51eac403f07814b9e936eed0c9a79195e2450 /sys/src/cmd/cwfs/time.c
Import sources from 2011-03-30 iso image
Diffstat (limited to 'sys/src/cmd/cwfs/time.c')
-rwxr-xr-xsys/src/cmd/cwfs/time.c117
1 files changed, 117 insertions, 0 deletions
diff --git a/sys/src/cmd/cwfs/time.c b/sys/src/cmd/cwfs/time.c
new file mode 100755
index 000000000..ad7f7ddec
--- /dev/null
+++ b/sys/src/cmd/cwfs/time.c
@@ -0,0 +1,117 @@
+#include "all.h"
+
+Timet
+toytime(void)
+{
+ return time(nil);
+}
+
+void
+datestr(char *s, Timet t)
+{
+ Tm *tm;
+
+ tm = localtime(t);
+ sprint(s, "%.4d%.2d%.2d", tm->year+1900, tm->mon+1, tm->mday);
+}
+
+void
+prdate(void)
+{
+ print("%T\n", time(nil));
+}
+
+static void
+ct_numb(char *cp, int n)
+{
+ if(n >= 10)
+ cp[0] = (n/10)%10 + '0';
+ else
+ cp[0] = ' ';
+ cp[1] = n%10 + '0';
+}
+
+int
+Tfmt(Fmt* fmt)
+{
+ char s[30];
+ char *cp;
+ Timet t;
+ Tm *tm;
+
+ t = va_arg(fmt->args, Timet);
+ if(t == 0)
+ return fmtstrcpy(fmt, "The Epoch");
+
+ tm = localtime(t);
+ strcpy(s, "Day Mon 00 00:00:00 1900");
+ cp = &"SunMonTueWedThuFriSat"[tm->wday*3];
+ s[0] = cp[0];
+ s[1] = cp[1];
+ s[2] = cp[2];
+ cp = &"JanFebMarAprMayJunJulAugSepOctNovDec"[tm->mon*3];
+ s[4] = cp[0];
+ s[5] = cp[1];
+ s[6] = cp[2];
+ ct_numb(s+8, tm->mday);
+ ct_numb(s+11, tm->hour+100);
+ ct_numb(s+14, tm->min+100);
+ ct_numb(s+17, tm->sec+100);
+ if(tm->year >= 100) {
+ s[20] = '2';
+ s[21] = '0';
+ }
+ ct_numb(s+22, tm->year+100);
+
+ return fmtstrcpy(fmt, s);
+}
+
+/*
+ * compute the next time after t
+ * that has hour hr and is not on
+ * day in bitpattern --
+ * for automatic dumps
+ */
+Timet
+nextime(Timet t, int hr, int day)
+{
+ int nhr;
+ Tm *tm;
+
+ if(hr < 0 || hr >= 24)
+ hr = 5;
+ if((day&0x7f) == 0x7f)
+ day = 0;
+ for (;;) {
+ tm = localtime(t);
+ t -= tm->sec;
+ t -= tm->min*60;
+ nhr = tm->hour;
+ do {
+ t += 60*60;
+ nhr++;
+ } while(nhr%24 != hr);
+ tm = localtime(t);
+ if(tm->hour != hr) {
+ t += 60*60;
+ tm = localtime(t);
+ if(tm->hour != hr) {
+ t -= 60*60;
+ tm = localtime(t);
+ }
+ }
+ if(day & (1<<tm->wday))
+ t += 12*60*60;
+ else
+ return t;
+ }
+}
+
+/*
+ * delay for l milliseconds more or less.
+ */
+void
+delay(int l)
+{
+ sleep(l);
+}