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 |
} |