From 90f83b6ce1b101090762ba4302e119dea3f00149 Mon Sep 17 00:00:00 2001 From: curt Date: Mon, 16 Jun 1997 19:24:19 +0000 Subject: [PATCH] Initial revision. --- Time/Makefile | 69 +++++++++++++++++++++++++++++++ Time/fg_timer.c | 108 ++++++++++++++++++++++++++++++++++++++++++++++++ Time/fg_timer.h | 50 ++++++++++++++++++++++ 3 files changed, 227 insertions(+) create mode 100644 Time/Makefile create mode 100644 Time/fg_timer.c create mode 100644 Time/fg_timer.h diff --git a/Time/Makefile b/Time/Makefile new file mode 100644 index 000000000..0e2309225 --- /dev/null +++ b/Time/Makefile @@ -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 index 000000000..84b3038e8 --- /dev/null +++ b/Time/fg_timer.c @@ -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 /* for timer routines */ +#include /* for printf() */ +#include /* for get/setitimer */ +#include /* 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(¤t); + 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 index 000000000..ae585cd5c --- /dev/null +++ b/Time/fg_timer.h @@ -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. +/* + */