aboutsummaryrefslogtreecommitdiff
path: root/src/timing.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/timing.c')
-rw-r--r--src/timing.c71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/timing.c b/src/timing.c
new file mode 100644
index 0000000..047d919
--- /dev/null
+++ b/src/timing.c
@@ -0,0 +1,71 @@
+/****************************************************************************
+ * Timing functions.
+ * Copyright (C) 2004 Joe Wingbermuehle
+ ****************************************************************************/
+
+#include "jwm.h"
+#include "timing.h"
+
+static const unsigned long MAX_TIME_SECONDS = 60;
+
+/****************************************************************************
+ * Get the current time in milliseconds since midnight 1970-01-01 UTC.
+ ****************************************************************************/
+void GetCurrentTime(TimeType *t) {
+ struct timeval val;
+ gettimeofday(&val, NULL);
+ t->seconds = val.tv_sec;
+ t->ms = val.tv_usec / 1000;
+}
+
+/****************************************************************************
+ * Get the absolute difference between two times in milliseconds.
+ * If the difference is larger than a MAX_TIME_SECONDS, then
+ * MAX_TIME_SECONDS will be returned.
+ * Note that the times must be normalized.
+ ****************************************************************************/
+unsigned long GetTimeDifference(const TimeType *t1, const TimeType *t2) {
+ unsigned long deltaSeconds;
+ int deltaMs;
+
+ if(t1->seconds > t2->seconds) {
+ deltaSeconds = t1->seconds - t2->seconds;
+ deltaMs = t1->ms - t2->ms;
+ } else if(t1->seconds < t2->seconds) {
+ deltaSeconds = t2->seconds - t1->seconds;
+ deltaMs = t2->ms - t1->ms;
+ } else if(t1->ms > t2->ms) {
+ deltaSeconds = 0;
+ deltaMs = t1->ms - t2->ms;
+ } else {
+ deltaSeconds = 0;
+ deltaMs = t2->ms - t1->ms;
+ }
+
+ if(deltaSeconds > MAX_TIME_SECONDS) {
+ return MAX_TIME_SECONDS * 1000;
+ } else {
+ return deltaSeconds * 1000 + deltaMs;
+ }
+
+}
+
+/****************************************************************************
+ * Get the current time.
+ * Not reenterent.
+ ****************************************************************************/
+const char *GetTimeString(const char *format) {
+
+ static char str[80];
+ time_t t;
+
+ Assert(format);
+
+ time(&t);
+ strftime(str, sizeof(str), format, localtime(&t));
+
+ return str;
+
+}
+
+