ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/ermyth/libermyth/util/time.C
Revision: 1.1
Committed: Sat Sep 22 14:27:26 2007 UTC (16 years, 8 months ago) by pippijn
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Log Message:
split up ermyth into ermyth-modules, libermyth (currently just ermyth-util) and ermyth-core

File Contents

# Content
1 #include <svsconfig.h>
2 #include <libermyth.h>
3
4 #include <util/time.h>
5
6 #ifdef HAVE_GETTIMEOFDAY
7 /* starts a timer */
8 void
9 s_time (struct timeval *sttime)
10 {
11 gettimeofday (sttime, NULL);
12 }
13 #endif
14
15 #ifdef HAVE_GETTIMEOFDAY
16 /* ends a timer */
17 void
18 e_time (struct timeval sttime, struct timeval *ttime)
19 {
20 struct timeval now;
21
22 gettimeofday (&now, NULL);
23 timersub (&now, &sttime, ttime);
24 }
25 #endif
26
27 #ifdef HAVE_GETTIMEOFDAY
28 /* translates microseconds into miliseconds */
29 int
30 tv2ms (struct timeval *tv)
31 {
32 return (tv->tv_sec * 1000) + (int) (tv->tv_usec / 1000);
33 }
34 #endif
35
36 /* return the time elapsed since an event */
37 char *
38 time_ago (time_t event)
39 {
40 static char ret[128];
41 int years, weeks, days, hours, minutes, seconds;
42
43 event = NOW - event;
44 years = weeks = days = hours = minutes = seconds = 0;
45
46 while (event >= 60 * 60 * 24 * 365)
47 {
48 event -= 60 * 60 * 24 * 365;
49 years++;
50 }
51 while (event >= 60 * 60 * 24 * 7)
52 {
53 event -= 60 * 60 * 24 * 7;
54 weeks++;
55 }
56 while (event >= 60 * 60 * 24)
57 {
58 event -= 60 * 60 * 24;
59 days++;
60 }
61 while (event >= 60 * 60)
62 {
63 event -= 60 * 60;
64 hours++;
65 }
66 while (event >= 60)
67 {
68 event -= 60;
69 minutes++;
70 }
71
72 seconds = event;
73
74 if (years)
75 snprintf (ret, sizeof (ret), "%d year%s, %d week%s, %d day%s, %02d:%02d:%02d", years, years == 1 ? "" : "s", weeks, weeks == 1 ? "" : "s", days, days == 1 ? "" : "s", hours, minutes, seconds);
76 else if (weeks)
77 snprintf (ret, sizeof (ret), "%d week%s, %d day%s, %02d:%02d:%02d", weeks, weeks == 1 ? "" : "s", days, days == 1 ? "" : "s", hours, minutes, seconds);
78 else if (days)
79 snprintf (ret, sizeof (ret), "%d day%s, %02d:%02d:%02d", days, days == 1 ? "" : "s", hours, minutes, seconds);
80 else if (hours)
81 snprintf (ret, sizeof (ret), "%d hour%s, %d minute%s, %d second%s", hours, hours == 1 ? "" : "s", minutes, minutes == 1 ? "" : "s", seconds, seconds == 1 ? "" : "s");
82 else if (minutes)
83 snprintf (ret, sizeof (ret), "%d minute%s, %d second%s", minutes, minutes == 1 ? "" : "s", seconds, seconds == 1 ? "" : "s");
84 else
85 snprintf (ret, sizeof (ret), "%d second%s", seconds, seconds == 1 ? "" : "s");
86
87 return ret;
88 }
89
90 char *
91 timediff (time_t seconds)
92 {
93 static char buf[BUFSIZ];
94 long unsigned days, hours, minutes;
95
96 days = seconds / 86400;
97 seconds %= 86400;
98 hours = seconds / 3600;
99 hours %= 3600;
100 minutes = seconds / 60;
101 minutes %= 60;
102 seconds %= 60;
103
104 snprintf (buf, sizeof (buf), "%lu day%s, %lu:%02lu:%02lu", days, (days == 1) ? "" : "s", hours, minutes, (long unsigned) seconds);
105
106 return buf;
107 }