/**
 * @file timing.c
 * @author Joe Wingbermuehle
 * @date 2004-2006
 *
 * @brief Timing functions.
 *
 */

#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. */
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;

}




syntax highlighted by Code2HTML, v. 0.9.1