]> git.mxchange.org Git - flightgear.git/blobdiff - Time/fg_timer.c
Minor changes to compile with rsxnt/win32.
[flightgear.git] / Time / fg_timer.c
index 84b3038e8b24b371026d7c8c029f40b1fb91853d..71a196019b95186a0b5ec584fd36c9a78470a2d2 100644 (file)
 
 #include <signal.h>    /* for timer routines */
 #include <stdio.h>     /* for printf() */
-#include <time.h>      /* for get/setitimer */
-#include <sys/timeb.h> /* for ftime() and struct timeb */
+#include <sys/time.h>  /* for get/setitimer, gettimeofday, struct timeval */
+#include <unistd.h>
 
 
 #include "fg_timer.h"
 
 
 unsigned long int fgSimTime;
-static struct itimerval t, ot;
-static void (*callbackfunc)();
+
+#ifdef HAVE_ITIMER
+  static struct itimerval t, ot;
+  static void (*callbackfunc)(int multi_loop);
 
 
 /* This routine catches the SIGALRM */
@@ -45,7 +47,9 @@ void fgTimerCatch() {
 
     /* printf("In fgTimerCatch()\n"); */
 
-    callbackfunc();
+    /* -1 tells the routine to use default interval rather than something
+       dynamically calculated based on frame rate */
+    callbackfunc(-1); 
 
     signal(SIGALRM, fgTimerCatch);
 }
@@ -76,33 +80,46 @@ void fgTimerInit(float dt, void (*f)()) {
     }
 }
 
+#endif HAVE_ITIMER
 
 /* This function returns the number of milleseconds since the last
    time it was called. */
 int fgGetTimeInterval() {
-    static struct timeb last;
-    static struct timeb current;
+    static struct timeval last;
+    static struct timeval current;
+    static struct timezone tz;
     static int inited = 0;
 
     int interval;
 
     if ( ! inited ) {
        inited = 1;
-       ftime(&last);
+       gettimeofday(&last, &tz);
        interval = 0;
     } else {
-       ftime(&current);
-       interval = 1000 * (current.time - last.time) + 
-           (current.millitm - last.millitm);
+       gettimeofday(&current, &tz);
+       interval = 1000000 * (current.tv_sec - last.tv_sec) + 
+           (current.tv_usec - last.tv_usec);
+       interval /= 1000;  /* convert back to milleseconds */
+       last = current;
     }
 
-    last = current;
     return(interval);
 }
 
 
 /* $Log$
-/* Revision 1.1  1997/06/16 19:24:20  curt
-/* Initial revision.
+/* Revision 1.4  1997/06/25 15:39:49  curt
+/* Minor changes to compile with rsxnt/win32.
 /*
+ * Revision 1.3  1997/06/17 16:52:04  curt
+ * Timer interval stuff now uses gettimeofday() instead of ftime()
+ *
+ * Revision 1.2  1997/06/17 03:41:10  curt
+ * Nonsignal based interval timing is now working.
+ * This would be a good time to look at cleaning up the code structure a bit.
+ *
+ * Revision 1.1  1997/06/16 19:24:20  curt
+ * Initial revision.
+ *
  */