]> git.mxchange.org Git - flightgear.git/commitdiff
Initial revision.
authorcurt <curt>
Mon, 16 Jun 1997 19:24:19 +0000 (19:24 +0000)
committercurt <curt>
Mon, 16 Jun 1997 19:24:19 +0000 (19:24 +0000)
Time/Makefile [new file with mode: 0644]
Time/fg_timer.c [new file with mode: 0644]
Time/fg_timer.h [new file with mode: 0644]

diff --git a/Time/Makefile b/Time/Makefile
new file mode 100644 (file)
index 0000000..0e23092
--- /dev/null
@@ -0,0 +1,69 @@
+#---------------------------------------------------------------------------
+# Makefile
+#
+# Written by Curtis Olson, started May 1997.
+#
+# Copyright (C) 1997  Curtis L. Olson  - curt@infoplane.com
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+# $Id$
+# (Log is kept at end of this file)
+#---------------------------------------------------------------------------
+
+
+TARGET = libtimer.a
+
+CFILES = fg_timer.c
+HFILES = fg_timer.h
+OFILES = $(CFILES:.c=.o)
+
+CC = gcc
+CFLAGS = -g -Wall
+# CFLAGS = -O2 -Wall
+
+AR = ar
+
+INCLUDES = 
+
+LIBS = 
+
+
+#---------------------------------------------------------------------------
+# Primary Targets
+#---------------------------------------------------------------------------
+
+$(TARGET): $(OFILES)
+       $(AR) rv $(TARGET) $(OFILES)
+
+all: $(TARGET)
+
+clean:
+       rm -f *.o $(TARGET) *~ core
+
+
+#---------------------------------------------------------------------------
+# Secondary Targets
+#---------------------------------------------------------------------------
+
+fg_timer.o: fg_timer.c fg_timer.h
+       $(CC) $(CFLAGS) $(INCLUDES) -c fg_timer.c
+
+
+#---------------------------------------------------------------------------
+# $Log$
+# Revision 1.1  1997/06/16 19:24:19  curt
+# Initial revision.
+#
diff --git a/Time/fg_timer.c b/Time/fg_timer.c
new file mode 100644 (file)
index 0000000..84b3038
--- /dev/null
@@ -0,0 +1,108 @@
+/**************************************************************************
+ * fg_timer.c -- time handling routines
+ *
+ * Written by Curtis Olson, started June 1997.
+ *
+ * Copyright (C) 1997  Curtis L. Olson  - curt@infoplane.com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * $Id$
+ * (Log is kept at end of this 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 "fg_timer.h"
+
+
+unsigned long int fgSimTime;
+static struct itimerval t, ot;
+static void (*callbackfunc)();
+
+
+/* This routine catches the SIGALRM */
+void fgTimerCatch() {
+    /* ignore any SIGALRM's until we come back from our EOM iteration */
+    signal(SIGALRM, SIG_IGN);
+
+    /* printf("In fgTimerCatch()\n"); */
+
+    callbackfunc();
+
+    signal(SIGALRM, fgTimerCatch);
+}
+
+
+/* this routine initializes the interval timer to generate a SIGALRM after
+ * the specified interval (dt) */
+void fgTimerInit(float dt, void (*f)()) {
+    int terr;
+    int isec;
+    float usec;
+
+    callbackfunc = f;
+
+    isec = (int) dt;
+    usec = 1000000* (dt - (float) isec);
+
+    t.it_interval.tv_sec = isec;
+    t.it_interval.tv_usec = usec;
+    t.it_value.tv_sec = isec;
+    t.it_value.tv_usec = usec;
+    /* printf("fgTimerInit() called\n"); */
+    fgTimerCatch();   /* set up for SIGALRM signal catch */
+    terr = setitimer( ITIMER_REAL, &t, &ot );
+    if (terr) {
+       printf("Error returned from setitimer");
+       exit(0);
+    }
+}
+
+
+/* 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 int inited = 0;
+
+    int interval;
+
+    if ( ! inited ) {
+       inited = 1;
+       ftime(&last);
+       interval = 0;
+    } else {
+       ftime(&current);
+       interval = 1000 * (current.time - last.time) + 
+           (current.millitm - last.millitm);
+    }
+
+    last = current;
+    return(interval);
+}
+
+
+/* $Log$
+/* Revision 1.1  1997/06/16 19:24:20  curt
+/* Initial revision.
+/*
+ */
diff --git a/Time/fg_timer.h b/Time/fg_timer.h
new file mode 100644 (file)
index 0000000..ae585cd
--- /dev/null
@@ -0,0 +1,50 @@
+/**************************************************************************
+ * fg_timer.h -- time handling routines
+ *
+ * Written by Curtis Olson, started June 1997.
+ *
+ * Copyright (C) 1997  Curtis L. Olson  - curt@infoplane.com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * $Id$
+ * (Log is kept at end of this file)
+ **************************************************************************/
+
+
+#ifndef FG_TIMER_H
+#define FG_TIMER_H
+
+
+extern unsigned long int fgSimTime;
+
+/* this routine initializes the interval timer to generate a SIGALRM
+ * after the specified interval (dt) the function f() will be called
+ * at each signal */
+void fgTimerInit(float dt, void (*f)());
+
+/* This function returns the number of milleseconds since the last
+   time it was called. */
+int fgGetTimeInterval();
+
+
+#endif FG_TIMER_H
+
+
+/* $Log$
+/* Revision 1.1  1997/06/16 19:24:20  curt
+/* Initial revision.
+/*
+ */