Fog color fixes.
Separated out lighting calcs into their own file.
lib_LTLIBRARIES = libTime.la
libTime_la_SOURCES = \
- event.c event.h \
- fg_time.c fg_time.h \
- fg_timer.c fg_timer.h \
+ event.cxx event.hxx \
+ fg_time.cxx fg_time.hxx \
+ fg_timer.cxx fg_timer.hxx \
light.cxx light.hxx \
sunpos.cxx sunpos.hxx
lib_LTLIBRARIES = libTime.la
libTime_la_SOURCES = \
- event.c event.h \
- fg_time.c fg_time.h \
- fg_timer.c fg_timer.h \
+ event.cxx event.hxx \
+ fg_time.cxx fg_time.hxx \
+ fg_timer.cxx fg_timer.hxx \
light.cxx light.hxx \
sunpos.cxx sunpos.hxx
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CXXFLAGS)
LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CXXFLAGS)
CXXLINK = $(LIBTOOL) --mode=link $(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@
-CFLAGS = @CFLAGS@
-COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
-LINK = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(LDFLAGS) -o $@
DIST_COMMON = Makefile.am Makefile.in
+++ /dev/null
-/**************************************************************************
- * event.c -- Flight Gear periodic event scheduler
- *
- * Written by Curtis Olson, started December 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 <config.h>
-
-#include <string.h>
-#include <stdio.h>
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#if defined( HAVE_WINDOWS_H ) && defined(__MWERKS__)
-# include <windows.h> /* For Metrowerks environment */
-# include <winbase.h> /* There is no ANSI/MSL time function that */
- /* contains milliseconds */
-#endif
-
-#include "fg_time.h"
-
-#include <Debug/fg_debug.h>
-#include <Time/event.h>
-
-
-#define MAX_EVENTS 100 /* size of event table */
-#define MAX_RUN_QUEUE 100 /* size of run queue */
-
-
-struct fgEVENT {
- char description[256];
-
- void (*event)( void ); /* pointer to function */
- int status; /* status flag */
-
- long interval; /* interval in ms between each iteration of this event */
-
- fg_timestamp last_run;
- fg_timestamp current;
- fg_timestamp next_run;
-
- long cum_time; /* cumulative processor time of this event */
- long min_time; /* time of quickest execution */
- long max_time; /* time of slowest execution */
- long count; /* number of times executed */
-};
-
-
-/* Event table */
-struct fgEVENT events[MAX_EVENTS];
-int event_ptr;
-
-
-/* Run Queue */
-int queue[MAX_RUN_QUEUE];
-int queue_front;
-int queue_end;
-
-
-/* initialize the run queue */
-void initq( void ) {
- queue_front = queue_end = 0;
-}
-
-
-/* return queue empty status */
-int emptyq( void ) {
- if ( queue_front == queue_end ) {
- return(1);
- } else {
- return(0);
- }
-}
-
-
-/* return queue full status */
-int fullq( void ) {
- if ( (queue_end + 1) % MAX_RUN_QUEUE == queue_front ) {
- return(1);
- } else {
- return(0);
- }
-}
-
-
-/* add a member to the back of the queue */
-void addq(int ptr) {
- if ( !fullq() ) {
- queue[queue_end] = ptr;
- events[ptr].status = FG_EVENT_QUEUED;
-
- queue_end = (queue_end + 1) % MAX_RUN_QUEUE;
- } else {
- printf("RUN QUEUE FULL!!!\n");
- }
-
- /* printf("Queued function %d (%d %d)\n", ptr, queue_front, queue_end); */
-}
-
-
-/* remove a member from the front of the queue */
-int popq( void ) {
- int ptr;
-
- if ( emptyq() ) {
- printf("PANIC: RUN QUEUE IS EMPTY!!!\n");
- ptr = 0;
- } else {
- ptr = queue[queue_front];
- /* printf("Popped position %d = %d\n", queue_front, ptr); */
- queue_front = (queue_front + 1) % MAX_RUN_QUEUE;
- }
-
- return(ptr);
-}
-
-
-/* run a specified event */
-void fgEventRun(int ptr) {
- struct fgEVENT *e;
- long duration;
-
- e = &events[ptr];
-
- printf("Running %s\n", e->description);
-
- /* record starting time */
- timestamp(&(e->last_run));
-
- /* run the event */
- (*e->event)();
-
- /* increment the counter for this event */
- e->count++;
-
- /* update the event status */
- e->status = FG_EVENT_READY;
-
- /* calculate duration and stats */
- timestamp(&(e->current));
- duration = timediff(&(e->last_run), &(e->current));
-
- e->cum_time += duration;
-
- if ( duration < e->min_time ) {
- e->min_time = duration;
- }
-
- if ( duration > e->max_time ) {
- e->max_time = duration;
- }
-
- /* determine the next absolute run time */
- timesum(&(e->next_run), &(e->last_run), e->interval);
-}
-
-
-/* Initialize the scheduling subsystem */
-void fgEventInit( void ) {
- printf("Initializing event manager\n");
- event_ptr = 0;
- initq();
-}
-
-
-/* Register an event with the scheduler, returns a pointer into the
- * event table */
-int fgEventRegister(char *desc, void (*event)( void ), int status,
- int interval)
-{
- struct fgEVENT *e;
-
- e = &events[event_ptr];
-
- printf("Registering event: %s\n", desc);
-
- if ( strlen(desc) < 256 ) {
- strcpy(e->description, desc);
- } else {
- strncpy(e->description, desc, 255);
- e->description[255] = '\0';
- }
-
- e->event = event;
- e->status = status;
- e->interval = interval;
-
- e->cum_time = 0;
- e->min_time = 100000;
- e->max_time = 0;
- e->count = 0;
-
- /* Actually run the event */
- fgEventRun(event_ptr);
-
- event_ptr++;
-
- return(event_ptr - 1);
-}
-
-
-/* Update the scheduling parameters for an event */
-void fgEventUpdate( void ) {
-}
-
-
-/* Delete a scheduled event */
-void fgEventDelete( void ) {
-}
-
-
-/* Temporarily suspend scheduling of an event */
-void fgEventSuspend( void ) {
-}
-
-
-/* Resume scheduling and event */
-void fgEventResume( void ) {
-}
-
-
-/* Dump scheduling stats */
-void fgEventPrintStats( void ) {
- int i;
-
- if ( event_ptr > 0 ) {
- printf("\n");
- printf("Event Stats\n");
- printf("-----------\n");
-
- for ( i = 0; i < event_ptr; i++ ) {
- printf(" %-20s int=%.2fs cum=%ld min=%ld max=%ld count=%ld ave=%.2f\n",
- events[i].description,
- events[i].interval / 1000.0,
- events[i].cum_time,
- events[i].min_time, events[i].max_time, events[i].count,
- events[i].cum_time / (double)events[i].count);
- }
- printf("\n");
- }
-}
-
-
-/* Add pending jobs to the run queue and run the job at the front of
- * the queue */
-void fgEventProcess( void ) {
- fg_timestamp current;
- int i;
-
- fgPrintf(FG_EVENT, FG_DEBUG, "Processing events\n");
-
- /* get the current time */
- timestamp(¤t);
-
- fgPrintf(FG_EVENT, FG_DEBUG, " Current timestamp = %ld\n", current.seconds);
-
- /* printf("Checking if anything is ready to move to the run queue\n"); */
-
- /* see if anything else is ready to be placed on the run queue */
- for ( i = 0; i < event_ptr; i++ ) {
- if ( events[i].status == FG_EVENT_READY ) {
- fgPrintf(FG_EVENT, FG_DEBUG,
- " Item %d, current %d, next run @ %ld\n",
- i, current.seconds, events[i].next_run.seconds);
- if ( timediff(¤t, &(events[i].next_run)) <= 0) {
- addq(i);
- }
- }
- }
-
- /* Checking to see if there is anything on the run queue */
- /* printf("Checking to see if there is anything on the run queue\n"); */
- if ( !emptyq() ) {
- /* printf("Yep, running it\n"); */
- i = popq();
- fgEventRun(i);
- }
-}
-
-
-/* $Log$
-/* Revision 1.13 1998/04/18 04:14:08 curt
-/* Moved fg_debug.c to it's own library.
-/*
- * Revision 1.12 1998/04/09 18:40:13 curt
- * We had unified some of the platform disparate time handling code, and
- * there was a bug in timesum() which calculated a new time stamp based on
- * the current time stamp + offset. This hosed the periodic event processing
- * logic because you'd never arrive at the time the event was scheduled for.
- * Sky updates and lighting changes are handled via this event mechanism so
- * they never changed ... it is fixed now.
- *
- * Revision 1.11 1998/04/03 22:12:55 curt
- * Converting to Gnu autoconf system.
- * Centralized time handling differences.
- *
- * Revision 1.10 1998/03/14 00:28:34 curt
- * replaced a printf() with an fgPrintf().
- *
- * Revision 1.9 1998/01/31 00:43:44 curt
- * Added MetroWorks patches from Carmen Volpe.
- *
- * Revision 1.8 1998/01/27 00:48:05 curt
- * Incorporated Paul Bleisch's <bleisch@chromatic.com> new debug message
- * system and commandline/config file processing code.
- *
- * Revision 1.7 1998/01/19 19:27:19 curt
- * Merged in make system changes from Bob Kuehne <rpk@sgi.com>
- * This should simplify things tremendously.
- *
- * Revision 1.6 1998/01/19 18:40:39 curt
- * Tons of little changes to clean up the code and to remove fatal errors
- * when building with the c++ compiler.
- *
- * Revision 1.5 1998/01/06 01:20:27 curt
- * Tweaks to help building with MSVC++
- *
- * Revision 1.4 1997/12/31 17:46:50 curt
- * Tweaked fg_time.c to be able to use ftime() instead of gettimeofday()
- *
- * Revision 1.3 1997/12/30 22:22:42 curt
- * Further integration of event manager.
- *
- * Revision 1.2 1997/12/30 20:47:58 curt
- * Integrated new event manager with subsystem initializations.
- *
- * Revision 1.1 1997/12/30 04:19:22 curt
- * Initial revision.
- *
- */
--- /dev/null
+/**************************************************************************
+ * event.c -- Flight Gear periodic event scheduler
+ *
+ * Written by Curtis Olson, started December 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)
+ **************************************************************************/
+
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <string.h>
+#include <stdio.h>
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#if defined( HAVE_WINDOWS_H ) && defined(__MWERKS__)
+# include <windows.h> /* For Metrowerks environment */
+# include <winbase.h> /* There is no ANSI/MSL time function that */
+ /* contains milliseconds */
+#endif
+
+#include <Debug/fg_debug.h>
+
+#include "event.hxx"
+#include "fg_time.hxx"
+
+
+
+#define MAX_EVENTS 100 /* size of event table */
+#define MAX_RUN_QUEUE 100 /* size of run queue */
+
+
+struct fgEVENT {
+ char description[256];
+
+ void (*event)( void ); /* pointer to function */
+ int status; /* status flag */
+
+ long interval; /* interval in ms between each iteration of this event */
+
+ fg_timestamp last_run;
+ fg_timestamp current;
+ fg_timestamp next_run;
+
+ long cum_time; /* cumulative processor time of this event */
+ long min_time; /* time of quickest execution */
+ long max_time; /* time of slowest execution */
+ long count; /* number of times executed */
+};
+
+
+/* Event table */
+struct fgEVENT events[MAX_EVENTS];
+int event_ptr;
+
+
+/* Run Queue */
+int queue[MAX_RUN_QUEUE];
+int queue_front;
+int queue_end;
+
+
+/* initialize the run queue */
+void initq( void ) {
+ queue_front = queue_end = 0;
+}
+
+
+/* return queue empty status */
+int emptyq( void ) {
+ if ( queue_front == queue_end ) {
+ return(1);
+ } else {
+ return(0);
+ }
+}
+
+
+/* return queue full status */
+int fullq( void ) {
+ if ( (queue_end + 1) % MAX_RUN_QUEUE == queue_front ) {
+ return(1);
+ } else {
+ return(0);
+ }
+}
+
+
+/* add a member to the back of the queue */
+void addq(int ptr) {
+ if ( !fullq() ) {
+ queue[queue_end] = ptr;
+ events[ptr].status = FG_EVENT_QUEUED;
+
+ queue_end = (queue_end + 1) % MAX_RUN_QUEUE;
+ } else {
+ printf("RUN QUEUE FULL!!!\n");
+ }
+
+ /* printf("Queued function %d (%d %d)\n", ptr, queue_front, queue_end); */
+}
+
+
+/* remove a member from the front of the queue */
+int popq( void ) {
+ int ptr;
+
+ if ( emptyq() ) {
+ printf("PANIC: RUN QUEUE IS EMPTY!!!\n");
+ ptr = 0;
+ } else {
+ ptr = queue[queue_front];
+ /* printf("Popped position %d = %d\n", queue_front, ptr); */
+ queue_front = (queue_front + 1) % MAX_RUN_QUEUE;
+ }
+
+ return(ptr);
+}
+
+
+/* run a specified event */
+void fgEventRun(int ptr) {
+ struct fgEVENT *e;
+ long duration;
+
+ e = &events[ptr];
+
+ printf("Running %s\n", e->description);
+
+ /* record starting time */
+ timestamp(&(e->last_run));
+
+ /* run the event */
+ (*e->event)();
+
+ /* increment the counter for this event */
+ e->count++;
+
+ /* update the event status */
+ e->status = FG_EVENT_READY;
+
+ /* calculate duration and stats */
+ timestamp(&(e->current));
+ duration = timediff(&(e->last_run), &(e->current));
+
+ e->cum_time += duration;
+
+ if ( duration < e->min_time ) {
+ e->min_time = duration;
+ }
+
+ if ( duration > e->max_time ) {
+ e->max_time = duration;
+ }
+
+ /* determine the next absolute run time */
+ timesum(&(e->next_run), &(e->last_run), e->interval);
+}
+
+
+/* Initialize the scheduling subsystem */
+void fgEventInit( void ) {
+ printf("Initializing event manager\n");
+ event_ptr = 0;
+ initq();
+}
+
+
+/* Register an event with the scheduler, returns a pointer into the
+ * event table */
+int fgEventRegister(char *desc, void (*event)( void ), int status,
+ int interval)
+{
+ struct fgEVENT *e;
+
+ e = &events[event_ptr];
+
+ printf("Registering event: %s\n", desc);
+
+ if ( strlen(desc) < 256 ) {
+ strcpy(e->description, desc);
+ } else {
+ strncpy(e->description, desc, 255);
+ e->description[255] = '\0';
+ }
+
+ e->event = event;
+ e->status = status;
+ e->interval = interval;
+
+ e->cum_time = 0;
+ e->min_time = 100000;
+ e->max_time = 0;
+ e->count = 0;
+
+ /* Actually run the event */
+ fgEventRun(event_ptr);
+
+ event_ptr++;
+
+ return(event_ptr - 1);
+}
+
+
+/* Update the scheduling parameters for an event */
+void fgEventUpdate( void ) {
+}
+
+
+/* Delete a scheduled event */
+void fgEventDelete( void ) {
+}
+
+
+/* Temporarily suspend scheduling of an event */
+void fgEventSuspend( void ) {
+}
+
+
+/* Resume scheduling and event */
+void fgEventResume( void ) {
+}
+
+
+/* Dump scheduling stats */
+void fgEventPrintStats( void ) {
+ int i;
+
+ if ( event_ptr > 0 ) {
+ printf("\n");
+ printf("Event Stats\n");
+ printf("-----------\n");
+
+ for ( i = 0; i < event_ptr; i++ ) {
+ printf(" %-20s int=%.2fs cum=%ld min=%ld max=%ld count=%ld ave=%.2f\n",
+ events[i].description,
+ events[i].interval / 1000.0,
+ events[i].cum_time,
+ events[i].min_time, events[i].max_time, events[i].count,
+ events[i].cum_time / (double)events[i].count);
+ }
+ printf("\n");
+ }
+}
+
+
+/* Add pending jobs to the run queue and run the job at the front of
+ * the queue */
+void fgEventProcess( void ) {
+ fg_timestamp current;
+ int i;
+
+ fgPrintf(FG_EVENT, FG_DEBUG, "Processing events\n");
+
+ /* get the current time */
+ timestamp(¤t);
+
+ fgPrintf(FG_EVENT, FG_DEBUG, " Current timestamp = %ld\n", current.seconds);
+
+ /* printf("Checking if anything is ready to move to the run queue\n"); */
+
+ /* see if anything else is ready to be placed on the run queue */
+ for ( i = 0; i < event_ptr; i++ ) {
+ if ( events[i].status == FG_EVENT_READY ) {
+ fgPrintf(FG_EVENT, FG_DEBUG,
+ " Item %d, current %d, next run @ %ld\n",
+ i, current.seconds, events[i].next_run.seconds);
+ if ( timediff(¤t, &(events[i].next_run)) <= 0) {
+ addq(i);
+ }
+ }
+ }
+
+ /* Checking to see if there is anything on the run queue */
+ /* printf("Checking to see if there is anything on the run queue\n"); */
+ if ( !emptyq() ) {
+ /* printf("Yep, running it\n"); */
+ i = popq();
+ fgEventRun(i);
+ }
+}
+
+
+/* $Log$
+/* Revision 1.1 1998/04/24 00:52:26 curt
+/* Wrapped "#include <config.h>" in "#ifdef HAVE_CONFIG_H"
+/* Fog color fixes.
+/* Separated out lighting calcs into their own file.
+/*
+ * Revision 1.13 1998/04/18 04:14:08 curt
+ * Moved fg_debug.c to it's own library.
+ *
+ * Revision 1.12 1998/04/09 18:40:13 curt
+ * We had unified some of the platform disparate time handling code, and
+ * there was a bug in timesum() which calculated a new time stamp based on
+ * the current time stamp + offset. This hosed the periodic event processing
+ * logic because you'd never arrive at the time the event was scheduled for.
+ * Sky updates and lighting changes are handled via this event mechanism so
+ * they never changed ... it is fixed now.
+ *
+ * Revision 1.11 1998/04/03 22:12:55 curt
+ * Converting to Gnu autoconf system.
+ * Centralized time handling differences.
+ *
+ * Revision 1.10 1998/03/14 00:28:34 curt
+ * replaced a printf() with an fgPrintf().
+ *
+ * Revision 1.9 1998/01/31 00:43:44 curt
+ * Added MetroWorks patches from Carmen Volpe.
+ *
+ * Revision 1.8 1998/01/27 00:48:05 curt
+ * Incorporated Paul Bleisch's <bleisch@chromatic.com> new debug message
+ * system and commandline/config file processing code.
+ *
+ * Revision 1.7 1998/01/19 19:27:19 curt
+ * Merged in make system changes from Bob Kuehne <rpk@sgi.com>
+ * This should simplify things tremendously.
+ *
+ * Revision 1.6 1998/01/19 18:40:39 curt
+ * Tons of little changes to clean up the code and to remove fatal errors
+ * when building with the c++ compiler.
+ *
+ * Revision 1.5 1998/01/06 01:20:27 curt
+ * Tweaks to help building with MSVC++
+ *
+ * Revision 1.4 1997/12/31 17:46:50 curt
+ * Tweaked fg_time.c to be able to use ftime() instead of gettimeofday()
+ *
+ * Revision 1.3 1997/12/30 22:22:42 curt
+ * Further integration of event manager.
+ *
+ * Revision 1.2 1997/12/30 20:47:58 curt
+ * Integrated new event manager with subsystem initializations.
+ *
+ * Revision 1.1 1997/12/30 04:19:22 curt
+ * Initial revision.
+ *
+ */
+++ /dev/null
-/**************************************************************************
- * event.h -- Flight Gear periodic event scheduler
- *
- * Written by Curtis Olson, started December 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 _EVENT_H
-#define _EVENT_H
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-#define FG_EVENT_SUSP 0
-#define FG_EVENT_READY 1
-#define FG_EVENT_QUEUED 2
-
-
-/* Initialize the scheduling subsystem */
-void fgEventInit( void );
-
-/* Register an event with the scheduler, returns a pointer into the
- * event table */
-int fgEventRegister(char *desc, void (*event)( void ), int status,
- int interval);
-
-/* Update the scheduling parameters for an event */
-void fgEventUpdate( void );
-
-/* Delete a scheduled event */
-void fgEventDelete( void );
-
-/* Temporarily suspend scheduling of an event */
-void fgEventSuspend( void );
-
-/* Resume scheduling and event */
-void fgEventResume( void );
-
-/* Dump scheduling stats */
-void fgEventPrintStats( void );
-
-/* Add pending jobs to the run queue and run the job at the front of
- * the queue */
-void fgEventProcess( void );
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* _EVENT_H */
-
-
-/* $Log$
-/* Revision 1.4 1998/04/21 17:01:43 curt
-/* Fixed a problems where a pointer to a function was being passed around. In
-/* one place this functions arguments were defined as ( void ) while in another
-/* place they were defined as ( int ). The correct answer was ( int ).
-/*
-/* Prepairing for C++ integration.
-/*
- * Revision 1.3 1998/01/22 02:59:43 curt
- * Changed #ifdef FILE_H to #ifdef _FILE_H
- *
- * Revision 1.2 1998/01/19 18:40:39 curt
- * Tons of little changes to clean up the code and to remove fatal errors
- * when building with the c++ compiler.
- *
- * Revision 1.1 1997/12/30 04:19:22 curt
- * Initial revision.
- *
- */
--- /dev/null
+/**************************************************************************
+ * event.hxx -- Flight Gear periodic event scheduler
+ *
+ * Written by Curtis Olson, started December 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 _EVENT_HXX
+#define _EVENT_HXX
+
+
+#ifndef __cplusplus
+# error This library requires C++
+#endif
+
+
+#define FG_EVENT_SUSP 0
+#define FG_EVENT_READY 1
+#define FG_EVENT_QUEUED 2
+
+
+/* Initialize the scheduling subsystem */
+void fgEventInit( void );
+
+/* Register an event with the scheduler, returns a pointer into the
+ * event table */
+int fgEventRegister(char *desc, void (*event)( void ), int status,
+ int interval);
+
+/* Update the scheduling parameters for an event */
+void fgEventUpdate( void );
+
+/* Delete a scheduled event */
+void fgEventDelete( void );
+
+/* Temporarily suspend scheduling of an event */
+void fgEventSuspend( void );
+
+/* Resume scheduling and event */
+void fgEventResume( void );
+
+/* Dump scheduling stats */
+void fgEventPrintStats( void );
+
+/* Add pending jobs to the run queue and run the job at the front of
+ * the queue */
+void fgEventProcess( void );
+
+
+#endif /* _EVENT_HXX */
+
+
+/* $Log$
+/* Revision 1.1 1998/04/24 00:52:26 curt
+/* Wrapped "#include <config.h>" in "#ifdef HAVE_CONFIG_H"
+/* Fog color fixes.
+/* Separated out lighting calcs into their own file.
+/*
+ * Revision 1.4 1998/04/21 17:01:43 curt
+ * Fixed a problems where a pointer to a function was being passed around. In
+ * one place this functions arguments were defined as ( void ) while in another
+ * place they were defined as ( int ). The correct answer was ( int ).
+ *
+ * Prepairing for C++ integration.
+ *
+ * Revision 1.3 1998/01/22 02:59:43 curt
+ * Changed #ifdef FILE_H to #ifdef _FILE_H
+ *
+ * Revision 1.2 1998/01/19 18:40:39 curt
+ * Tons of little changes to clean up the code and to remove fatal errors
+ * when building with the c++ compiler.
+ *
+ * Revision 1.1 1997/12/30 04:19:22 curt
+ * Initial revision.
+ *
+ */
+++ /dev/null
-/**************************************************************************
- * fg_time.c -- data structures and routines for managing time related stuff.
- *
- * Written by Curtis Olson, started August 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 <config.h>
-
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-
-#ifdef HAVE_SYS_TIMEB_H
-# include <sys/timeb.h> /* for ftime() and struct timeb */
-#endif
-#ifdef HAVE_UNISTD_H
-# include <unistd.h> /* for gettimeofday() */
-#endif
-#ifdef HAVE_SYS_TIME_H
-# include <sys/time.h> /* for get/setitimer, gettimeofday, struct timeval */
-#endif
-
-#include <Debug/fg_debug.h>
-#include <Flight/flight.h>
-#include <Include/fg_constants.h>
-
-#include "fg_time.h"
-
-
-#define DEGHR(x) ((x)/15.)
-#define RADHR(x) DEGHR(x*RAD_TO_DEG)
-
-
-struct fgTIME cur_time_params;
-
-
-/* Initialize the time dependent variables */
-
-void fgTimeInit(struct fgTIME *t) {
- fgPrintf( FG_EVENT, FG_INFO, "Initializing Time\n");
-
- t->gst_diff = -9999.0;
- t->warp = (0) * 3600;
- t->warp_delta = 0;
-}
-
-
-/* Portability wrap to get current time. */
-void timestamp(fg_timestamp *timestamp) {
-#if defined( HAVE_GETTIMEOFDAY )
- struct timeval current;
- struct timezone tz;
- fg_timestamp currtime;
- gettimeofday(¤t, &tz);
- timestamp->seconds = current.tv_sec;
- timestamp->millis = current.tv_usec / 1000;
-#elif defined( HAVE_GETLOCALTIME )
- SYSTEMTIME current;
- GetLocalTime(¤t);
- timestamp->seconds = current.wSecond;
- timestamp->millis = current.wMilliseconds;
-#elif defined( HAVE_FTIME )
- struct timeb current;
- ftime(¤t);
- timestamp->seconds = current.time;
- timestamp->millis = current.millitm;
-#else
-# error Port me
-#endif
-}
-
-
-/* Return duration in millis from first to last */
-long timediff(fg_timestamp *first, fg_timestamp *last) {
- return 1000 * (last->seconds - first->seconds) +
- (last->millis - first->millis);
-}
-
-
-/* Return new timestamp given a time stamp and an interval to add in */
-void timesum(fg_timestamp *res, fg_timestamp *start, long millis) {
- res->seconds = start->seconds +
- ( start->millis + millis ) / 1000;
- res->millis = ( start->millis + millis ) % 1000;
-}
-
-
-/* given a date in months, mn, days, dy, years, yr, return the
- * modified Julian date (number of days elapsed since 1900 jan 0.5),
- * mjd. Adapted from Xephem. */
-
-double cal_mjd (int mn, double dy, int yr) {
- static double last_mjd, last_dy;
- double mjd;
- static int last_mn, last_yr;
- int b, d, m, y;
- long c;
-
- if (mn == last_mn && yr == last_yr && dy == last_dy) {
- mjd = last_mjd;
- return(mjd);
- }
-
- m = mn;
- y = (yr < 0) ? yr + 1 : yr;
- if (mn < 3) {
- m += 12;
- y -= 1;
- }
-
- if (yr < 1582 || (yr == 1582 && (mn < 10 || (mn == 10 && dy < 15)))) {
- b = 0;
- } else {
- int a;
- a = y/100;
- b = 2 - a + a/4;
- }
-
- if (y < 0) {
- c = (long)((365.25*y) - 0.75) - 694025L;
- } else {
- c = (long)(365.25*y) - 694025L;
- }
-
- d = (int)(30.6001*(m+1));
-
- mjd = b + c + d + dy - 0.5;
-
- last_mn = mn;
- last_dy = dy;
- last_yr = yr;
- last_mjd = mjd;
-
- return(mjd);
-}
-
-
-/* given an mjd, return greenwich mean siderial time, gst */
-
-double utc_gst (double mjd) {
- double gst;
- double day = floor(mjd-0.5)+0.5;
- double hr = (mjd-day)*24.0;
- double T, x;
-
- T = ((int)(mjd - 0.5) + 0.5 - J2000)/36525.0;
- x = 24110.54841 + (8640184.812866 + (0.093104 - 6.2e-6 * T) * T) * T;
- x /= 3600.0;
- gst = (1.0/SIDRATE)*hr + x;
-
- fgPrintf( FG_EVENT, FG_DEBUG, " gst => %.4f\n", gst);
-
- return(gst);
-}
-
-
-/* given Julian Date and Longitude (decimal degrees West) compute and
- * return Local Sidereal Time, in decimal hours.
- *
- * Provided courtesy of ecdowney@noao.edu (Elwood Downey)
- */
-
-double sidereal_precise (double mjd, double lng) {
- double gst;
- double lst;
-
- /* printf ("Current Lst on JD %13.5f at %8.4f degrees West: ",
- mjd + MJD0, lng); */
-
- /* convert to required internal units */
- lng *= DEG_TO_RAD;
-
- /* compute LST and print */
- gst = utc_gst (mjd);
- lst = gst - RADHR (lng);
- lst -= 24.0*floor(lst/24.0);
- /* printf ("%7.4f\n", lst); */
-
- /* that's all */
- return (lst);
-}
-
-
-/* return a courser but cheaper estimate of sidereal time */
-double sidereal_course(struct tm *gmt, time_t now, double lng) {
- time_t start, start_gmt;
- struct tm mt;
- long int offset;
- double diff, part, days, hours, lst;
-
- // ftime() needs a little extra help finding the current timezone
-#if defined( HAVE_GETTIMEOFDAY )
-#elif defined( HAVE_GETLOCALTIME )
-#elif defined( HAVE_FTIME )
- struct timeb current;
-#else
-# error Port me
-#endif
-
-#ifdef __CYGWIN32__
- int daylight;
- long int timezone;
-#endif /* WIN32 */
-
- /*
- printf(" COURSE: GMT = %d/%d/%2d %d:%02d:%02d\n",
- gmt->tm_mon, gmt->tm_mday, gmt->tm_year,
- gmt->tm_hour, gmt->tm_min, gmt->tm_sec);
- */
-
- mt.tm_mon = 2;
- mt.tm_mday = 21;
- mt.tm_year = gmt->tm_year;
- mt.tm_hour = 12;
- mt.tm_min = 0;
- mt.tm_sec = 0;
- mt.tm_isdst = -1; /* let the system determine the proper time zone */
-
- start = mktime(&mt);
-
- /* printf("start1 = %ld\n", start);
- fgPrintf( FG_EVENT, FG_DEBUG, "start2 = %s", ctime(&start));
- fgPrintf( FG_EVENT, FG_DEBUG, "start3 = %ld\n", start); */
-
-#ifndef __CYGWIN32__
- daylight = mt.tm_isdst;
-#else
- /* Yargs ... I'm just hardcoding this arbitrarily so it doesn't
- * jump around */
- daylight = 0;
- fgPrintf( FG_EVENT, FG_WARN,
- "no daylight savings info ... being hardcoded to %d\n", daylight);
-#endif
-
- // ftime() needs a little extra help finding the current timezone
-#if defined( HAVE_GETTIMEOFDAY )
-#elif defined( HAVE_GETLOCALTIME )
-#elif defined( HAVE_FTIME )
- ftime(¤t);
- timezone = current.timezone * 60;
-#else
-# error Port me
-#endif
-
- if ( daylight > 0 ) {
- daylight = 1;
- } else if ( daylight < 0 ) {
- fgPrintf( FG_EVENT, FG_WARN,
- "OOOPS, big time problem in fg_time.c, no daylight savings info.\n");
- }
-
- offset = -(timezone / 3600 - daylight);
-
- /* printf(" Raw time zone offset = %ld\n", timezone); */
- /* printf(" Daylight Savings = %d\n", daylight); */
-
- /* printf(" Local hours from GMT = %ld\n", offset); */
-
- start_gmt = start - timezone + (daylight * 3600);
-
- /* printf(" March 21 noon (CST) = %ld\n", start); */
- /* printf(" March 21 noon (GMT) = %ld\n", start_gmt); */
-
- diff = (now - start_gmt) / (3600.0 * 24.0);
-
- /* printf(" Time since 3/21/%2d GMT = %.2f\n", gmt->tm_year, diff); */
-
- part = fmod(diff, 1.0);
- days = diff - part;
- hours = gmt->tm_hour + gmt->tm_min/60.0 + gmt->tm_sec/3600.0;
-
- lst = (days - lng)/15.0 + hours - 12;
-
- while ( lst < 0.0 ) {
- lst += 24.0;
- }
-
- /* printf(" days = %.1f hours = %.2f lon = %.2f lst = %.2f\n",
- days, hours, lng, lst); */
-
- return(lst);
-}
-
-
-/* Update the time dependent variables */
-
-void fgTimeUpdate(fgFLIGHT *f, struct fgTIME *t) {
- double gst_precise, gst_course;
-
- fgPrintf( FG_EVENT, FG_BULK, "Updating time\n");
-
- /* get current Unix calendar time (in seconds) */
- t->warp += t->warp_delta;
- t->cur_time = time(NULL) + t->warp;
- fgPrintf( FG_EVENT, FG_BULK,
- " Current Unix calendar time = %ld warp = %ld delta = %ld\n",
- t->cur_time, t->warp, t->warp_delta);
-
- /* get GMT break down for current time */
- t->gmt = gmtime(&t->cur_time);
- fgPrintf( FG_EVENT, FG_BULK,
- " Current GMT = %d/%d/%2d %d:%02d:%02d\n",
- t->gmt->tm_mon+1, t->gmt->tm_mday, t->gmt->tm_year,
- t->gmt->tm_hour, t->gmt->tm_min, t->gmt->tm_sec);
-
- /* calculate modified Julian date */
- t->mjd = cal_mjd ((int)(t->gmt->tm_mon+1), (double)t->gmt->tm_mday,
- (int)(t->gmt->tm_year + 1900));
-
- /* add in partial day */
- t->mjd += (t->gmt->tm_hour / 24.0) + (t->gmt->tm_min / (24.0 * 60.0)) +
- (t->gmt->tm_sec / (24.0 * 60.0 * 60.0));
-
- /* convert "back" to Julian date + partial day (as a fraction of one) */
- t->jd = t->mjd + MJD0;
- fgPrintf( FG_EVENT, FG_BULK, " Current Julian Date = %.5f\n", t->jd);
-
- /* printf(" Current Longitude = %.3f\n", FG_Longitude * RAD_TO_DEG); */
-
- /* Calculate local side real time */
- if ( t->gst_diff < -100.0 ) {
- /* first time through do the expensive calculation & cheap
- calculation to get the difference. */
- fgPrintf( FG_EVENT, FG_INFO, " First time, doing precise gst\n");
- t->gst = gst_precise = sidereal_precise(t->mjd, 0.00);
- gst_course = sidereal_course(t->gmt, t->cur_time, 0.00);
- t->gst_diff = gst_precise - gst_course;
-
- t->lst =
- sidereal_course(t->gmt, t->cur_time, -(FG_Longitude * RAD_TO_DEG))
- + t->gst_diff;
- } else {
- /* course + difference should drift off very slowly */
- t->gst =
- sidereal_course(t->gmt, t->cur_time, 0.00) + t->gst_diff;
- t->lst =
- sidereal_course(t->gmt, t->cur_time, -(FG_Longitude * RAD_TO_DEG))
- + t->gst_diff;
- }
- fgPrintf( FG_EVENT, FG_DEBUG,
- " Current lon=0.00 Sidereal Time = %.3f\n", t->gst);
- fgPrintf( FG_EVENT, FG_DEBUG,
- " Current LOCAL Sidereal Time = %.3f (%.3f) (diff = %.3f)\n",
- t->lst, sidereal_precise(t->mjd, -(FG_Longitude * RAD_TO_DEG)),
- t->gst_diff);
-}
-
-
-/* $Log$
-/* Revision 1.41 1998/04/22 13:24:05 curt
-/* C++ - ifiing the code a bit.
-/* Starting to reorginize some of the lighting calcs to use a table lookup.
-/*
- * Revision 1.40 1998/04/18 04:14:09 curt
- * Moved fg_debug.c to it's own library.
- *
- * Revision 1.39 1998/04/09 18:40:14 curt
- * We had unified some of the platform disparate time handling code, and
- * there was a bug in timesum() which calculated a new time stamp based on
- * the current time stamp + offset. This hosed the periodic event processing
- * logic because you'd never arrive at the time the event was scheduled for.
- * Sky updates and lighting changes are handled via this event mechanism so
- * they never changed ... it is fixed now.
- *
- * Revision 1.38 1998/04/08 23:35:40 curt
- * Tweaks to Gnu automake/autoconf system.
- *
- * Revision 1.37 1998/04/03 22:12:55 curt
- * Converting to Gnu autoconf system.
- * Centralized time handling differences.
- *
- * Revision 1.36 1998/03/09 22:48:09 curt
- * Debug message tweaks.
- *
- * Revision 1.35 1998/02/09 15:07:52 curt
- * Minor tweaks.
- *
- * Revision 1.34 1998/02/07 15:29:47 curt
- * Incorporated HUD changes and struct/typedef changes from Charlie Hotchkiss
- * <chotchkiss@namg.us.anritsu.com>
- *
- * Revision 1.33 1998/02/02 20:54:04 curt
- * Incorporated Durk's changes.
- *
- * Revision 1.32 1998/02/01 03:39:56 curt
- * Minor tweaks.
- *
- * Revision 1.31 1998/01/27 00:48:06 curt
- * Incorporated Paul Bleisch's <bleisch@chromatic.com> new debug message
- * system and commandline/config file processing code.
- *
- * Revision 1.30 1998/01/21 21:11:35 curt
- * Misc. tweaks.
- *
- * Revision 1.29 1998/01/19 19:27:20 curt
- * Merged in make system changes from Bob Kuehne <rpk@sgi.com>
- * This should simplify things tremendously.
- *
- * Revision 1.28 1998/01/19 18:35:49 curt
- * Minor tweaks and fixes for cygwin32.
- *
- * Revision 1.27 1998/01/13 00:23:13 curt
- * Initial changes to support loading and management of scenery tiles. Note,
- * there's still a fair amount of work left to be done.
- *
- * Revision 1.26 1998/01/05 18:44:36 curt
- * Add an option to advance/decrease time from keyboard.
- *
- * Revision 1.25 1997/12/31 17:46:50 curt
- * Tweaked fg_time.c to be able to use ftime() instead of gettimeofday()
- *
- * Revision 1.24 1997/12/30 22:22:42 curt
- * Further integration of event manager.
- *
- * Revision 1.23 1997/12/30 20:47:58 curt
- * Integrated new event manager with subsystem initializations.
- *
- * Revision 1.22 1997/12/30 01:38:47 curt
- * Switched back to per vertex normals and smooth shading for terrain.
- *
- * Revision 1.21 1997/12/23 04:58:39 curt
- * Tweaked the sky coloring a bit to build in structures to allow finer rgb
- * control.
- *
- * Revision 1.20 1997/12/15 23:55:06 curt
- * Add xgl wrappers for debugging.
- * Generate terrain normals on the fly.
- *
- * Revision 1.19 1997/12/15 20:59:10 curt
- * Misc. tweaks.
- *
- * Revision 1.18 1997/12/12 21:41:31 curt
- * More light/material property tweaking ... still a ways off.
- *
- * Revision 1.17 1997/12/12 19:53:04 curt
- * Working on lightling and material properties.
- *
- * Revision 1.16 1997/12/11 04:43:57 curt
- * Fixed sun vector and lighting problems. I thing the moon is now lit
- * correctly.
- *
- * Revision 1.15 1997/12/10 22:37:54 curt
- * Prepended "fg" on the name of all global structures that didn't have it yet.
- * i.e. "struct WEATHER {}" became "struct fgWEATHER {}"
- *
- * Revision 1.14 1997/12/10 01:19:52 curt
- * Tweaks for verion 0.15 release.
- *
- * Revision 1.13 1997/12/09 05:11:56 curt
- * Working on tweaking lighting.
- *
- * Revision 1.12 1997/12/09 04:25:37 curt
- * Working on adding a global lighting params structure.
- *
- * Revision 1.11 1997/11/25 19:25:40 curt
- * Changes to integrate Durk's moon/sun code updates + clean up.
- *
- * Revision 1.10 1997/11/15 18:16:42 curt
- * minor tweaks.
- *
- * Revision 1.9 1997/11/14 00:26:50 curt
- * Transform scenery coordinates earlier in pipeline when scenery is being
- * created, not when it is being loaded. Precalculate normals for each node
- * as average of the normals of each containing polygon so Garoude shading is
- * now supportable.
- *
- * Revision 1.8 1997/10/25 03:30:08 curt
- * Misc. tweaks.
- *
- * Revision 1.7 1997/09/23 00:29:50 curt
- * Tweaks to get things to compile with gcc-win32.
- *
- * Revision 1.6 1997/09/20 03:34:34 curt
- * Still trying to get those durned stars aligned properly.
- *
- * Revision 1.5 1997/09/16 22:14:52 curt
- * Tweaked time of day lighting equations. Don't draw stars during the day.
- *
- * Revision 1.4 1997/09/16 15:50:31 curt
- * Working on star alignment and time issues.
- *
- * Revision 1.3 1997/09/13 02:00:08 curt
- * Mostly working on stars and generating sidereal time for accurate star
- * placement.
- *
- * Revision 1.2 1997/08/27 03:30:35 curt
- * Changed naming scheme of basic shared structures.
- *
- * Revision 1.1 1997/08/13 21:55:59 curt
- * Initial revision.
- *
- */
--- /dev/null
+//
+// fg_time.cxx -- data structures and routines for managing time related stuff.
+//
+// Written by Curtis Olson, started August 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)
+
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+
+#ifdef HAVE_SYS_TIMEB_H
+# include <sys/timeb.h> // for ftime() and struct timeb
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h> // for gettimeofday()
+#endif
+#ifdef HAVE_SYS_TIME_H
+# include <sys/time.h> // for get/setitimer, gettimeofday, struct timeval
+#endif
+
+#include <Debug/fg_debug.h>
+#include <Flight/flight.h>
+#include <Include/fg_constants.h>
+#include <Main/options.hxx>
+
+#include "fg_time.hxx"
+
+
+#define DEGHR(x) ((x)/15.)
+#define RADHR(x) DEGHR(x*RAD_TO_DEG)
+
+
+struct fgTIME cur_time_params;
+
+
+// Initialize the time dependent variables
+
+void fgTimeInit(struct fgTIME *t) {
+ fgOPTIONS *o;
+
+ o = ¤t_options;
+
+ fgPrintf( FG_EVENT, FG_INFO, "Initializing Time\n");
+
+ t->gst_diff = -9999.0;
+ fgPrintf( FG_EVENT, FG_DEBUG, "o->time_offset = %d\n", o->time_offset);
+
+ t->warp = o->time_offset;
+ t->warp_delta = 0;
+}
+
+
+// Portability wrap to get current time.
+void timestamp(fg_timestamp *timestamp) {
+#if defined( HAVE_GETTIMEOFDAY )
+ struct timeval current;
+ struct timezone tz;
+ fg_timestamp currtime;
+ gettimeofday(¤t, &tz);
+ timestamp->seconds = current.tv_sec;
+ timestamp->millis = current.tv_usec / 1000;
+#elif defined( HAVE_GETLOCALTIME )
+ SYSTEMTIME current;
+ GetLocalTime(¤t);
+ timestamp->seconds = current.wSecond;
+ timestamp->millis = current.wMilliseconds;
+#elif defined( HAVE_FTIME )
+ struct timeb current;
+ ftime(¤t);
+ timestamp->seconds = current.time;
+ timestamp->millis = current.millitm;
+#else
+# error Port me
+#endif
+}
+
+
+// Return duration in millis from first to last
+long timediff(fg_timestamp *first, fg_timestamp *last) {
+ return 1000 * (last->seconds - first->seconds) +
+ (last->millis - first->millis);
+}
+
+
+// Return new timestamp given a time stamp and an interval to add in
+void timesum(fg_timestamp *res, fg_timestamp *start, long millis) {
+ res->seconds = start->seconds +
+ ( start->millis + millis ) / 1000;
+ res->millis = ( start->millis + millis ) % 1000;
+}
+
+
+// given a date in months, mn, days, dy, years, yr, return the
+// modified Julian date (number of days elapsed since 1900 jan 0.5),
+// mjd. Adapted from Xephem.
+
+double cal_mjd (int mn, double dy, int yr) {
+ static double last_mjd, last_dy;
+ double mjd;
+ static int last_mn, last_yr;
+ int b, d, m, y;
+ long c;
+
+ if (mn == last_mn && yr == last_yr && dy == last_dy) {
+ mjd = last_mjd;
+ return(mjd);
+ }
+
+ m = mn;
+ y = (yr < 0) ? yr + 1 : yr;
+ if (mn < 3) {
+ m += 12;
+ y -= 1;
+ }
+
+ if (yr < 1582 || (yr == 1582 && (mn < 10 || (mn == 10 && dy < 15)))) {
+ b = 0;
+ } else {
+ int a;
+ a = y/100;
+ b = 2 - a + a/4;
+ }
+
+ if (y < 0) {
+ c = (long)((365.25*y) - 0.75) - 694025L;
+ } else {
+ c = (long)(365.25*y) - 694025L;
+ }
+
+ d = (int)(30.6001*(m+1));
+
+ mjd = b + c + d + dy - 0.5;
+
+ last_mn = mn;
+ last_dy = dy;
+ last_yr = yr;
+ last_mjd = mjd;
+
+ return(mjd);
+}
+
+
+// given an mjd, return greenwich mean siderial time, gst
+
+double utc_gst (double mjd) {
+ double gst;
+ double day = floor(mjd-0.5)+0.5;
+ double hr = (mjd-day)*24.0;
+ double T, x;
+
+ T = ((int)(mjd - 0.5) + 0.5 - J2000)/36525.0;
+ x = 24110.54841 + (8640184.812866 + (0.093104 - 6.2e-6 * T) * T) * T;
+ x /= 3600.0;
+ gst = (1.0/SIDRATE)*hr + x;
+
+ fgPrintf( FG_EVENT, FG_DEBUG, " gst => %.4f\n", gst);
+
+ return(gst);
+}
+
+
+// given Julian Date and Longitude (decimal degrees West) compute and
+// return Local Sidereal Time, in decimal hours.
+//
+// Provided courtesy of ecdowney@noao.edu (Elwood Downey)
+//
+
+double sidereal_precise (double mjd, double lng) {
+ double gst;
+ double lst;
+
+ /* printf ("Current Lst on JD %13.5f at %8.4f degrees West: ",
+ mjd + MJD0, lng); */
+
+ // convert to required internal units
+ lng *= DEG_TO_RAD;
+
+ // compute LST and print
+ gst = utc_gst (mjd);
+ lst = gst - RADHR (lng);
+ lst -= 24.0*floor(lst/24.0);
+ // printf ("%7.4f\n", lst);
+
+ // that's all
+ return (lst);
+}
+
+
+// return a courser but cheaper estimate of sidereal time
+double sidereal_course(struct tm *gmt, time_t now, double lng) {
+ time_t start, start_gmt;
+ struct tm mt;
+ long int offset;
+ double diff, part, days, hours, lst;
+
+ // ftime() needs a little extra help finding the current timezone
+#if defined( HAVE_GETTIMEOFDAY )
+#elif defined( HAVE_GETLOCALTIME )
+#elif defined( HAVE_FTIME )
+ struct timeb current;
+#else
+# error Port me
+#endif
+
+#ifdef __CYGWIN32__
+ int daylight;
+ long int timezone;
+#endif // __CYGWIN32__
+
+ /*
+ printf(" COURSE: GMT = %d/%d/%2d %d:%02d:%02d\n",
+ gmt->tm_mon, gmt->tm_mday, gmt->tm_year,
+ gmt->tm_hour, gmt->tm_min, gmt->tm_sec);
+ */
+
+ mt.tm_mon = 2;
+ mt.tm_mday = 21;
+ mt.tm_year = gmt->tm_year;
+ mt.tm_hour = 12;
+ mt.tm_min = 0;
+ mt.tm_sec = 0;
+ mt.tm_isdst = -1; // let the system determine the proper time zone
+
+ start = mktime(&mt);
+
+ /* printf("start1 = %ld\n", start);
+ fgPrintf( FG_EVENT, FG_DEBUG, "start2 = %s", ctime(&start));
+ fgPrintf( FG_EVENT, FG_DEBUG, "start3 = %ld\n", start); */
+
+#ifndef __CYGWIN32__
+ daylight = mt.tm_isdst;
+#else
+ // Yargs ... I'm just hardcoding this arbitrarily so it doesn't
+ // jump around for win32 people
+ daylight = 0;
+ fgPrintf( FG_EVENT, FG_WARN,
+ "no daylight savings info ... being hardcoded to %d\n", daylight);
+#endif
+
+ // ftime() needs a little extra help finding the current timezone
+#if defined( HAVE_GETTIMEOFDAY )
+#elif defined( HAVE_GETLOCALTIME )
+#elif defined( HAVE_FTIME )
+ ftime(¤t);
+ timezone = current.timezone * 60;
+#else
+# error Port me
+#endif
+
+ if ( daylight > 0 ) {
+ daylight = 1;
+ } else if ( daylight < 0 ) {
+ fgPrintf( FG_EVENT, FG_WARN,
+ "OOOPS, big time problem in fg_time.c, no daylight savings info.\n");
+ }
+
+ offset = -(timezone / 3600 - daylight);
+
+ // printf(" Raw time zone offset = %ld\n", timezone);
+ // printf(" Daylight Savings = %d\n", daylight);
+
+ // printf(" Local hours from GMT = %ld\n", offset);
+
+ start_gmt = start - timezone + (daylight * 3600);
+
+ // printf(" March 21 noon (CST) = %ld\n", start);
+ // printf(" March 21 noon (GMT) = %ld\n", start_gmt);
+
+ diff = (now - start_gmt) / (3600.0 * 24.0);
+
+ // printf(" Time since 3/21/%2d GMT = %.2f\n", gmt->tm_year, diff);
+
+ part = fmod(diff, 1.0);
+ days = diff - part;
+ hours = gmt->tm_hour + gmt->tm_min/60.0 + gmt->tm_sec/3600.0;
+
+ lst = (days - lng)/15.0 + hours - 12;
+
+ while ( lst < 0.0 ) {
+ lst += 24.0;
+ }
+
+ /* printf(" days = %.1f hours = %.2f lon = %.2f lst = %.2f\n",
+ days, hours, lng, lst); */
+
+ return(lst);
+}
+
+
+// Update the time dependent variables
+
+void fgTimeUpdate(fgFLIGHT *f, struct fgTIME *t) {
+ double gst_precise, gst_course;
+
+ fgPrintf( FG_EVENT, FG_BULK, "Updating time\n");
+
+ // get current Unix calendar time (in seconds)
+ t->warp += t->warp_delta;
+ t->cur_time = time(NULL) + t->warp;
+ fgPrintf( FG_EVENT, FG_BULK,
+ " Current Unix calendar time = %ld warp = %ld delta = %ld\n",
+ t->cur_time, t->warp, t->warp_delta);
+
+ // get GMT break down for current time
+ t->gmt = gmtime(&t->cur_time);
+ fgPrintf( FG_EVENT, FG_BULK,
+ " Current GMT = %d/%d/%2d %d:%02d:%02d\n",
+ t->gmt->tm_mon+1, t->gmt->tm_mday, t->gmt->tm_year,
+ t->gmt->tm_hour, t->gmt->tm_min, t->gmt->tm_sec);
+
+ // calculate modified Julian date
+ t->mjd = cal_mjd ((int)(t->gmt->tm_mon+1), (double)t->gmt->tm_mday,
+ (int)(t->gmt->tm_year + 1900));
+
+ // add in partial day
+ t->mjd += (t->gmt->tm_hour / 24.0) + (t->gmt->tm_min / (24.0 * 60.0)) +
+ (t->gmt->tm_sec / (24.0 * 60.0 * 60.0));
+
+ // convert "back" to Julian date + partial day (as a fraction of one)
+ t->jd = t->mjd + MJD0;
+ fgPrintf( FG_EVENT, FG_BULK, " Current Julian Date = %.5f\n", t->jd);
+
+ // printf(" Current Longitude = %.3f\n", FG_Longitude * RAD_TO_DEG);
+
+ // Calculate local side real time
+ if ( t->gst_diff < -100.0 ) {
+ // first time through do the expensive calculation & cheap
+ // calculation to get the difference.
+ fgPrintf( FG_EVENT, FG_INFO, " First time, doing precise gst\n");
+ t->gst = gst_precise = sidereal_precise(t->mjd, 0.00);
+ gst_course = sidereal_course(t->gmt, t->cur_time, 0.00);
+ t->gst_diff = gst_precise - gst_course;
+
+ t->lst =
+ sidereal_course(t->gmt, t->cur_time, -(FG_Longitude * RAD_TO_DEG))
+ + t->gst_diff;
+ } else {
+ // course + difference should drift off very slowly
+ t->gst =
+ sidereal_course(t->gmt, t->cur_time, 0.00) + t->gst_diff;
+ t->lst =
+ sidereal_course(t->gmt, t->cur_time, -(FG_Longitude * RAD_TO_DEG))
+ + t->gst_diff;
+ }
+ fgPrintf( FG_EVENT, FG_DEBUG,
+ " Current lon=0.00 Sidereal Time = %.3f\n", t->gst);
+ fgPrintf( FG_EVENT, FG_DEBUG,
+ " Current LOCAL Sidereal Time = %.3f (%.3f) (diff = %.3f)\n",
+ t->lst, sidereal_precise(t->mjd, -(FG_Longitude * RAD_TO_DEG)),
+ t->gst_diff);
+}
+
+
+// $Log$
+// Revision 1.1 1998/04/24 00:52:27 curt
+// Wrapped "#include <config.h>" in "#ifdef HAVE_CONFIG_H"
+// Fog color fixes.
+// Separated out lighting calcs into their own file.
+//
+// Revision 1.41 1998/04/22 13:24:05 curt
+// C++ - ifiing the code a bit.
+// Starting to reorginize some of the lighting calcs to use a table lookup.
+//
+// Revision 1.40 1998/04/18 04:14:09 curt
+// Moved fg_debug.c to it's own library.
+//
+// Revision 1.39 1998/04/09 18:40:14 curt
+// We had unified some of the platform disparate time handling code, and
+// there was a bug in timesum() which calculated a new time stamp based on
+// the current time stamp + offset. This hosed the periodic event processing
+// logic because you'd never arrive at the time the event was scheduled for.
+// Sky updates and lighting changes are handled via this event mechanism so
+// they never changed ... it is fixed now.
+//
+// Revision 1.38 1998/04/08 23:35:40 curt
+// Tweaks to Gnu automake/autoconf system.
+//
+// Revision 1.37 1998/04/03 22:12:55 curt
+// Converting to Gnu autoconf system.
+// Centralized time handling differences.
+//
+// Revision 1.36 1998/03/09 22:48:09 curt
+// Debug message tweaks.
+//
+// Revision 1.35 1998/02/09 15:07:52 curt
+// Minor tweaks.
+//
+// Revision 1.34 1998/02/07 15:29:47 curt
+// Incorporated HUD changes and struct/typedef changes from Charlie Hotchkiss
+// <chotchkiss@namg.us.anritsu.com>
+//
+// Revision 1.33 1998/02/02 20:54:04 curt
+// Incorporated Durk's changes.
+//
+// Revision 1.32 1998/02/01 03:39:56 curt
+// Minor tweaks.
+//
+// Revision 1.31 1998/01/27 00:48:06 curt
+// Incorporated Paul Bleisch's <bleisch@chromatic.com> new debug message
+// system and commandline/config file processing code.
+//
+// Revision 1.30 1998/01/21 21:11:35 curt
+// Misc. tweaks.
+//
+// Revision 1.29 1998/01/19 19:27:20 curt
+// Merged in make system changes from Bob Kuehne <rpk@sgi.com>
+// This should simplify things tremendously.
+//
+// Revision 1.28 1998/01/19 18:35:49 curt
+// Minor tweaks and fixes for cygwin32.
+//
+// Revision 1.27 1998/01/13 00:23:13 curt
+// Initial changes to support loading and management of scenery tiles. Note,
+// there's still a fair amount of work left to be done.
+//
+// Revision 1.26 1998/01/05 18:44:36 curt
+// Add an option to advance/decrease time from keyboard.
+//
+// Revision 1.25 1997/12/31 17:46:50 curt
+// Tweaked fg_time.c to be able to use ftime() instead of gettimeofday()
+//
+// Revision 1.24 1997/12/30 22:22:42 curt
+// Further integration of event manager.
+//
+// Revision 1.23 1997/12/30 20:47:58 curt
+// Integrated new event manager with subsystem initializations.
+//
+// Revision 1.22 1997/12/30 01:38:47 curt
+// Switched back to per vertex normals and smooth shading for terrain.
+//
+// Revision 1.21 1997/12/23 04:58:39 curt
+// Tweaked the sky coloring a bit to build in structures to allow finer rgb
+// control.
+//
+// Revision 1.20 1997/12/15 23:55:06 curt
+// Add xgl wrappers for debugging.
+// Generate terrain normals on the fly.
+//
+// Revision 1.19 1997/12/15 20:59:10 curt
+// Misc. tweaks.
+//
+// Revision 1.18 1997/12/12 21:41:31 curt
+// More light/material property tweaking ... still a ways off.
+//
+// Revision 1.17 1997/12/12 19:53:04 curt
+// Working on lightling and material properties.
+//
+// Revision 1.16 1997/12/11 04:43:57 curt
+// Fixed sun vector and lighting problems. I thing the moon is now lit
+// correctly.
+//
+// Revision 1.15 1997/12/10 22:37:54 curt
+// Prepended "fg" on the name of all global structures that didn't have it yet.
+// i.e. "struct WEATHER {}" became "struct fgWEATHER {}"
+//
+// Revision 1.14 1997/12/10 01:19:52 curt
+// Tweaks for verion 0.15 release.
+//
+// Revision 1.13 1997/12/09 05:11:56 curt
+// Working on tweaking lighting.
+//
+// Revision 1.12 1997/12/09 04:25:37 curt
+// Working on adding a global lighting params structure.
+//
+// Revision 1.11 1997/11/25 19:25:40 curt
+// Changes to integrate Durk's moon/sun code updates + clean up.
+//
+// Revision 1.10 1997/11/15 18:16:42 curt
+// minor tweaks.
+//
+// Revision 1.9 1997/11/14 00:26:50 curt
+// Transform scenery coordinates earlier in pipeline when scenery is being
+// created, not when it is being loaded. Precalculate normals for each node
+// as average of the normals of each containing polygon so Garoude shading is
+// now supportable.
+//
+// Revision 1.8 1997/10/25 03:30:08 curt
+// Misc. tweaks.
+//
+// Revision 1.7 1997/09/23 00:29:50 curt
+// Tweaks to get things to compile with gcc-win32.
+//
+// Revision 1.6 1997/09/20 03:34:34 curt
+// Still trying to get those durned stars aligned properly.
+//
+// Revision 1.5 1997/09/16 22:14:52 curt
+// Tweaked time of day lighting equations. Don't draw stars during the day.
+//
+// Revision 1.4 1997/09/16 15:50:31 curt
+// Working on star alignment and time issues.
+//
+// Revision 1.3 1997/09/13 02:00:08 curt
+// Mostly working on stars and generating sidereal time for accurate star
+// placement.
+//
+// Revision 1.2 1997/08/27 03:30:35 curt
+// Changed naming scheme of basic shared structures.
+//
+// Revision 1.1 1997/08/13 21:55:59 curt
+// Initial revision.
+//
+++ /dev/null
-/**************************************************************************
- * fg_time.h -- data structures and routines for managing time related stuff.
- *
- * Written by Curtis Olson, started August 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_TIME_H
-#define _FG_TIME_H
-
-
-#include <config.h>
-
-#ifdef HAVE_WINDOWS_H
-# include <windows.h>
-#endif
-
-#include <GL/glut.h>
-#include <time.h>
-
-#include <Include/fg_types.h>
-#include <Flight/flight.h>
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/* Define a structure containing global time parameters */
-struct fgTIME {
- /* the date/time in various forms */
- time_t cur_time; /* Unix "calendar" time in seconds */
- struct tm *gmt; /* Break down of GMT time */
-
- double jd; /* Julian date */
- double mjd; /* modified Julian date */
-
- double gst; /* side real time at prime meridian */
- double lst; /* local side real time */
-
- double gst_diff; /* the difference between the precise
- sidereal time algorithm result and the
- course result. course + diff has good
- accuracy for the short term */
-
- long int warp; /* An offset in seconds from the true time.
- Allows us to adjust the effective time of day. */
-
- long int warp_delta; /* How much to change the value of warp each
- iteration. Allows us to make time
- progress faster than normal. */
-};
-
-extern struct fgTIME cur_time_params;
-
-
-typedef struct fg_timestamp_t {
- long seconds;
- long millis;
-} fg_timestamp;
-
-
-/* Portability wrap to get current time. */
-void timestamp(fg_timestamp *timestamp);
-
-/* Return duration in millis from first to last */
-long timediff(fg_timestamp *first, fg_timestamp *last);
-
-/* Return new timestamp given a time stamp and an interval to add in */
-void timesum(fg_timestamp *res, fg_timestamp *start, long millis);
-
-/* Initialize the time dependent variables */
-void fgTimeInit(struct fgTIME *t);
-
-/* Update the time dependent variables */
-void fgTimeUpdate(fgFLIGHT *f, struct fgTIME *t);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* _FG_TIME_H */
-
-
-/* $Log$
-/* Revision 1.20 1998/04/22 13:24:05 curt
-/* C++ - ifiing the code a bit.
-/* Starting to reorginize some of the lighting calcs to use a table lookup.
-/*
- * Revision 1.19 1998/04/21 17:01:44 curt
- * Fixed a problems where a pointer to a function was being passed around. In
- * one place this functions arguments were defined as ( void ) while in another
- * place they were defined as ( int ). The correct answer was ( int ).
- *
- * Prepairing for C++ integration.
- *
- * Revision 1.18 1998/04/08 23:35:40 curt
- * Tweaks to Gnu automake/autoconf system.
- *
- * Revision 1.17 1998/04/03 22:12:56 curt
- * Converting to Gnu autoconf system.
- * Centralized time handling differences.
- *
- * Revision 1.16 1998/02/07 15:29:47 curt
- * Incorporated HUD changes and struct/typedef changes from Charlie Hotchkiss
- * <chotchkiss@namg.us.anritsu.com>
- *
- * Revision 1.15 1998/01/27 00:48:06 curt
- * Incorporated Paul Bleisch's <bleisch@chromatic.com> new debug message
- * system and commandline/config file processing code.
- *
- * Revision 1.14 1998/01/22 02:59:43 curt
- * Changed #ifdef FILE_H to #ifdef _FILE_H
- *
- * Revision 1.13 1998/01/19 19:27:20 curt
- * Merged in make system changes from Bob Kuehne <rpk@sgi.com>
- * This should simplify things tremendously.
- *
- * Revision 1.12 1998/01/05 18:44:37 curt
- * Add an option to advance/decrease time from keyboard.
- *
- * Revision 1.11 1997/12/19 23:35:07 curt
- * Lot's of tweaking with sky rendering and lighting.
- *
- * Revision 1.10 1997/12/15 23:55:07 curt
- * Add xgl wrappers for debugging.
- * Generate terrain normals on the fly.
- *
- * Revision 1.9 1997/12/10 22:37:55 curt
- * Prepended "fg" on the name of all global structures that didn't have it yet.
- * i.e. "struct WEATHER {}" became "struct fgWEATHER {}"
- *
- * Revision 1.8 1997/12/09 04:25:38 curt
- * Working on adding a global lighting params structure.
- *
- * Revision 1.7 1997/11/25 19:25:41 curt
- * Changes to integrate Durk's moon/sun code updates + clean up.
- *
- * Revision 1.6 1997/09/20 03:34:35 curt
- * Still trying to get those durned stars aligned properly.
- *
- * Revision 1.5 1997/09/16 15:50:31 curt
- * Working on star alignment and time issues.
- *
- * Revision 1.4 1997/09/13 02:00:08 curt
- * Mostly working on stars and generating sidereal time for accurate star
- * placement.
- *
- * Revision 1.3 1997/09/04 02:17:39 curt
- * Shufflin' stuff.
- *
- * Revision 1.2 1997/08/27 03:30:36 curt
- * Changed naming scheme of basic shared structures.
- *
- * Revision 1.1 1997/08/13 21:56:00 curt
- * Initial revision.
- *
- */
--- /dev/null
+//
+// fg_time.hxx -- data structures and routines for managing time related stuff.
+//
+// Written by Curtis Olson, started August 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_TIME_HXX
+#define _FG_TIME_HXX
+
+
+#ifndef __cplusplus
+# error This library requires C++
+#endif
+
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef HAVE_WINDOWS_H
+# include <windows.h>
+#endif
+
+#include <GL/glut.h>
+#include <time.h>
+
+#include <Include/fg_types.h>
+#include <Flight/flight.h>
+
+
+// Define a structure containing global time parameters
+struct fgTIME {
+ // the date/time in various forms
+ // Unix "calendar" time in seconds
+ time_t cur_time;
+
+ // Break down of GMT time
+ struct tm *gmt;
+
+ // Julian date
+ double jd;
+
+ // modified Julian date
+ double mjd;
+
+ // side real time at prime meridian
+ double gst;
+
+ // local side real time
+ double lst;
+
+ // the difference between the precise sidereal time algorithm
+ // result and the course result.
+ // course + diff has good accuracy for the short term
+ double gst_diff;
+
+ // An offset in seconds from the true time. Allows us to adjust
+ // the effective time of day.
+ long int warp;
+
+ // How much to change the value of warp each iteration. Allows us
+ // to make time progress faster than normal.
+ long int warp_delta;
+};
+
+extern struct fgTIME cur_time_params;
+
+
+typedef struct fg_timestamp_t {
+ long seconds;
+ long millis;
+} fg_timestamp;
+
+
+// Portability wrap to get current time.
+void timestamp(fg_timestamp *timestamp);
+
+
+// Return duration in millis from first to last
+long timediff(fg_timestamp *first, fg_timestamp *last);
+
+
+// Return new timestamp given a time stamp and an interval to add in
+void timesum(fg_timestamp *res, fg_timestamp *start, long millis);
+
+
+// Initialize the time dependent variables
+void fgTimeInit(struct fgTIME *t);
+
+
+// Update the time dependent variables
+void fgTimeUpdate(fgFLIGHT *f, struct fgTIME *t);
+
+
+#endif // _FG_TIME_HXX
+
+
+// $Log$
+// Revision 1.1 1998/04/24 00:52:28 curt
+// Wrapped "#include <config.h>" in "#ifdef HAVE_CONFIG_H"
+// Fog color fixes.
+// Separated out lighting calcs into their own file.
+//
+// Revision 1.20 1998/04/22 13:24:05 curt
+// C++ - ifiing the code a bit.
+// Starting to reorginize some of the lighting calcs to use a table lookup.
+//
+// Revision 1.19 1998/04/21 17:01:44 curt
+// Fixed a problems where a pointer to a function was being passed around. In
+// one place this functions arguments were defined as ( void ) while in another
+// place they were defined as ( int ). The correct answer was ( int ).
+//
+// Prepairing for C++ integration.
+//
+// Revision 1.18 1998/04/08 23:35:40 curt
+// Tweaks to Gnu automake/autoconf system.
+//
+// Revision 1.17 1998/04/03 22:12:56 curt
+// Converting to Gnu autoconf system.
+// Centralized time handling differences.
+//
+// Revision 1.16 1998/02/07 15:29:47 curt
+// Incorporated HUD changes and struct/typedef changes from Charlie Hotchkiss
+// <chotchkiss@namg.us.anritsu.com>
+//
+// Revision 1.15 1998/01/27 00:48:06 curt
+// Incorporated Paul Bleisch's <bleisch@chromatic.com> new debug message
+// system and commandline/config file processing code.
+//
+// Revision 1.14 1998/01/22 02:59:43 curt
+// Changed #ifdef FILE_H to #ifdef _FILE_H
+//
+// Revision 1.13 1998/01/19 19:27:20 curt
+// Merged in make system changes from Bob Kuehne <rpk@sgi.com>
+// This should simplify things tremendously.
+//
+// Revision 1.12 1998/01/05 18:44:37 curt
+// Add an option to advance/decrease time from keyboard.
+//
+// Revision 1.11 1997/12/19 23:35:07 curt
+// Lot's of tweaking with sky rendering and lighting.
+//
+// Revision 1.10 1997/12/15 23:55:07 curt
+// Add xgl wrappers for debugging.
+// Generate terrain normals on the fly.
+//
+// Revision 1.9 1997/12/10 22:37:55 curt
+// Prepended "fg" on the name of all global structures that didn't have it yet.
+// i.e. "struct WEATHER {}" became "struct fgWEATHER {}"
+//
+// Revision 1.8 1997/12/09 04:25:38 curt
+// Working on adding a global lighting params structure.
+//
+// Revision 1.7 1997/11/25 19:25:41 curt
+// Changes to integrate Durk's moon/sun code updates + clean up.
+//
+// Revision 1.6 1997/09/20 03:34:35 curt
+// Still trying to get those durned stars aligned properly.
+//
+// Revision 1.5 1997/09/16 15:50:31 curt
+// Working on star alignment and time issues.
+//
+// Revision 1.4 1997/09/13 02:00:08 curt
+// Mostly working on stars and generating sidereal time for accurate star
+// placement.
+//
+// Revision 1.3 1997/09/04 02:17:39 curt
+// Shufflin' stuff.
+//
+// Revision 1.2 1997/08/27 03:30:36 curt
+// Changed naming scheme of basic shared structures.
+//
+// Revision 1.1 1997/08/13 21:56:00 curt
+// Initial revision.
+//
+++ /dev/null
-/**************************************************************************
- * 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 <config.h>
-
-#include <signal.h> /* for timer routines */
-#include <stdio.h> /* for printf() */
-
-#ifdef HAVE_SYS_TIME_H
-# include <sys/time.h> /* for get/setitimer, gettimeofday, struct timeval */
-#endif
-
-#include <Time/fg_time.h>
-#include <Time/fg_timer.h>
-
-
-unsigned long int fgSimTime;
-
-#ifdef HAVE_SETITIMER
- static struct itimerval t, ot;
- static void (*callbackfunc)(int multi_loop);
-
-
-/* This routine catches the SIGALRM */
-void fgTimerCatch( void ) {
- /* ignore any SIGALRM's until we come back from our EOM iteration */
- signal(SIGALRM, SIG_IGN);
-
- /* printf("In fgTimerCatch()\n"); */
-
- /* -1 tells the routine to use default interval rather than something
- dynamically calculated based on frame rate */
- callbackfunc(-1);
-
- 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 )) {
- 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);
- }
-}
-#endif /* HAVE_SETITIMER */
-
-
-/* This function returns the number of milleseconds since the last
- time it was called. */
-int fgGetTimeInterval( void ) {
- int interval;
- static int inited = 0;
- static fg_timestamp last;
- fg_timestamp current;
-
- if ( ! inited ) {
- inited = 1;
- timestamp(&last);
- interval = 0;
- } else {
- timestamp(¤t);
- interval = timediff(&last, ¤t);
- last.seconds = current.seconds;
- last.millis = current.millis;
- }
-
- return(interval);
-}
-
-
-/* $Log$
-/* Revision 1.12 1998/04/21 17:01:44 curt
-/* Fixed a problems where a pointer to a function was being passed around. In
-/* one place this functions arguments were defined as ( void ) while in another
-/* place they were defined as ( int ). The correct answer was ( int ).
-/*
-/* Prepairing for C++ integration.
-/*
- * Revision 1.11 1998/04/03 22:12:56 curt
- * Converting to Gnu autoconf system.
- * Centralized time handling differences.
- *
- * Revision 1.10 1998/01/31 00:43:45 curt
- * Added MetroWorks patches from Carmen Volpe.
- *
- * Revision 1.9 1998/01/19 19:27:21 curt
- * Merged in make system changes from Bob Kuehne <rpk@sgi.com>
- * This should simplify things tremendously.
- *
- * Revision 1.8 1998/01/19 18:40:39 curt
- * Tons of little changes to clean up the code and to remove fatal errors
- * when building with the c++ compiler.
- *
- * Revision 1.7 1997/12/30 13:06:58 curt
- * A couple lighting tweaks ...
- *
- * Revision 1.6 1997/07/12 02:13:04 curt
- * Add ftime() support for those that don't have gettimeofday()
- *
- * Revision 1.5 1997/06/26 19:08:38 curt
- * Restructuring make, adding automatic "make dep" support.
- *
- * 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.
- *
- */
--- /dev/null
+/**************************************************************************
+ * 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)
+ **************************************************************************/
+
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <signal.h> /* for timer routines */
+#include <stdio.h> /* for printf() */
+
+#ifdef HAVE_SYS_TIME_H
+# include <sys/time.h> /* for get/setitimer, gettimeofday, struct timeval */
+#endif
+
+#include "fg_time.hxx"
+#include "fg_timer.hxx"
+
+
+unsigned long int fgSimTime;
+
+#ifdef HAVE_SETITIMER
+ static struct itimerval t, ot;
+ static void (*callbackfunc)(int multi_loop);
+
+
+/* This routine catches the SIGALRM */
+void fgTimerCatch( int dummy ) {
+ /* ignore any SIGALRM's until we come back from our EOM iteration */
+ signal(SIGALRM, SIG_IGN);
+
+ /* printf("In fgTimerCatch()\n"); */
+
+ /* -1 tells the routine to use default interval rather than something
+ dynamically calculated based on frame rate */
+ callbackfunc(-1);
+
+ 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 )) {
+ int terr;
+ int isec;
+ int usec;
+
+ callbackfunc = f;
+
+ isec = (int) dt;
+ usec = 1000000 * ((int)dt - 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(0); /* set up for SIGALRM signal catch */
+ terr = setitimer( ITIMER_REAL, &t, &ot );
+ if (terr) {
+ printf("Error returned from setitimer");
+ exit(0);
+ }
+}
+#endif /* HAVE_SETITIMER */
+
+
+/* This function returns the number of milleseconds since the last
+ time it was called. */
+int fgGetTimeInterval( void ) {
+ int interval;
+ static int inited = 0;
+ static fg_timestamp last;
+ fg_timestamp current;
+
+ if ( ! inited ) {
+ inited = 1;
+ timestamp(&last);
+ interval = 0;
+ } else {
+ timestamp(¤t);
+ interval = timediff(&last, ¤t);
+ last.seconds = current.seconds;
+ last.millis = current.millis;
+ }
+
+ return(interval);
+}
+
+
+/* $Log$
+/* Revision 1.1 1998/04/24 00:52:29 curt
+/* Wrapped "#include <config.h>" in "#ifdef HAVE_CONFIG_H"
+/* Fog color fixes.
+/* Separated out lighting calcs into their own file.
+/*
+ * Revision 1.12 1998/04/21 17:01:44 curt
+ * Fixed a problems where a pointer to a function was being passed around. In
+ * one place this functions arguments were defined as ( void ) while in another
+ * place they were defined as ( int ). The correct answer was ( int ).
+ *
+ * Prepairing for C++ integration.
+ *
+ * Revision 1.11 1998/04/03 22:12:56 curt
+ * Converting to Gnu autoconf system.
+ * Centralized time handling differences.
+ *
+ * Revision 1.10 1998/01/31 00:43:45 curt
+ * Added MetroWorks patches from Carmen Volpe.
+ *
+ * Revision 1.9 1998/01/19 19:27:21 curt
+ * Merged in make system changes from Bob Kuehne <rpk@sgi.com>
+ * This should simplify things tremendously.
+ *
+ * Revision 1.8 1998/01/19 18:40:39 curt
+ * Tons of little changes to clean up the code and to remove fatal errors
+ * when building with the c++ compiler.
+ *
+ * Revision 1.7 1997/12/30 13:06:58 curt
+ * A couple lighting tweaks ...
+ *
+ * Revision 1.6 1997/07/12 02:13:04 curt
+ * Add ftime() support for those that don't have gettimeofday()
+ *
+ * Revision 1.5 1997/06/26 19:08:38 curt
+ * Restructuring make, adding automatic "make dep" support.
+ *
+ * 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.
+ *
+ */
+++ /dev/null
-/**************************************************************************
- * 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
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-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)( int ) );
-
-/* This function returns the number of milleseconds since the last
- time it was called. */
-int fgGetTimeInterval( void );
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* _FG_TIMER_H */
-
-
-/* $Log$
-/* Revision 1.5 1998/04/21 17:01:45 curt
-/* Fixed a problems where a pointer to a function was being passed around. In
-/* one place this functions arguments were defined as ( void ) while in another
-/* place they were defined as ( int ). The correct answer was ( int ).
-/*
-/* Prepairing for C++ integration.
-/*
- * Revision 1.4 1998/01/22 02:59:43 curt
- * Changed #ifdef FILE_H to #ifdef _FILE_H
- *
- * Revision 1.3 1998/01/19 18:40:40 curt
- * Tons of little changes to clean up the code and to remove fatal errors
- * when building with the c++ compiler.
- *
- * Revision 1.2 1997/07/23 21:52:27 curt
- * Put comments around the text after an #endif for increased portability.
- *
- * Revision 1.1 1997/06/16 19:24:20 curt
- * Initial revision.
- *
- */
--- /dev/null
+/**************************************************************************
+ * fg_timer.hxx -- 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_HXX
+#define _FG_TIMER_HXX
+
+
+#ifndef __cplusplus
+# error This library requires C++
+#endif
+
+
+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)( int ) );
+
+/* This function returns the number of milleseconds since the last
+ time it was called. */
+int fgGetTimeInterval( void );
+
+
+#endif /* _FG_TIMER_HXX */
+
+
+/* $Log$
+/* Revision 1.1 1998/04/24 00:52:30 curt
+/* Wrapped "#include <config.h>" in "#ifdef HAVE_CONFIG_H"
+/* Fog color fixes.
+/* Separated out lighting calcs into their own file.
+/*
+ * Revision 1.5 1998/04/21 17:01:45 curt
+ * Fixed a problems where a pointer to a function was being passed around. In
+ * one place this functions arguments were defined as ( void ) while in another
+ * place they were defined as ( int ). The correct answer was ( int ).
+ *
+ * Prepairing for C++ integration.
+ *
+ * Revision 1.4 1998/01/22 02:59:43 curt
+ * Changed #ifdef FILE_H to #ifdef _FILE_H
+ *
+ * Revision 1.3 1998/01/19 18:40:40 curt
+ * Tons of little changes to clean up the code and to remove fatal errors
+ * when building with the c++ compiler.
+ *
+ * Revision 1.2 1997/07/23 21:52:27 curt
+ * Put comments around the text after an #endif for increased portability.
+ *
+ * Revision 1.1 1997/06/16 19:24:20 curt
+ * Initial revision.
+ *
+ */
// $Id$
-#include <config.h>
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
#ifdef HAVE_WINDOWS_H
# include <windows.h>
#include <GL/glut.h>
#include <XGL/xgl.h>
+
#include <string.h>
#include <Debug/fg_debug.h>
#include <Math/mat3.h>
#include <Math/polar.h>
-#include "fg_time.h"
+#include "fg_time.hxx"
#include "light.hxx"
#include "sunpos.hxx"
/* base sky color */
GLfloat base_sky_color[4] = {0.60, 0.60, 0.90, 1.0};
/* base fog color */
- GLfloat base_fog_color[4] = {0.70, 0.70, 0.70, 1.0};
+ GLfloat base_fog_color[4] = {1.00, 1.00, 1.00, 1.0};
double deg, ambient, diffuse, sky_brightness;
l = &cur_light_params;
l->scene_diffuse[2] = white[2] * diffuse;
/* set fog color */
- l->fog_color[0] = base_fog_color[0] * (ambient + diffuse);
- l->fog_color[1] = base_fog_color[1] * (ambient + diffuse);
- l->fog_color[2] = base_fog_color[2] * (ambient + diffuse);
+ // l->fog_color[0] = base_fog_color[0] * (ambient + diffuse);
+ // l->fog_color[1] = base_fog_color[1] * (ambient + diffuse);
+ // l->fog_color[2] = base_fog_color[2] * (ambient + diffuse);
+ // l->fog_color[3] = base_fog_color[3];
+ l->fog_color[0] = base_fog_color[0] * sky_brightness;
+ l->fog_color[1] = base_fog_color[1] * sky_brightness;
+ l->fog_color[2] = base_fog_color[2] * sky_brightness;
l->fog_color[3] = base_fog_color[3];
/* set sky color */
// $Log$
+// Revision 1.2 1998/04/24 00:52:30 curt
+// Wrapped "#include <config.h>" in "#ifdef HAVE_CONFIG_H"
+// Fog color fixes.
+// Separated out lighting calcs into their own file.
+//
// Revision 1.1 1998/04/22 13:24:06 curt
// C++ - ifiing the code a bit.
// Starting to reorginize some of the lighting calcs to use a table lookup.
#endif
-#include <config.h>
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
#ifdef HAVE_WINDOWS_H
# include <windows.h>
// $Log$
+// Revision 1.2 1998/04/24 00:52:31 curt
+// Wrapped "#include <config.h>" in "#ifdef HAVE_CONFIG_H"
+// Fog color fixes.
+// Separated out lighting calcs into their own file.
+//
// Revision 1.1 1998/04/22 13:24:06 curt
// C++ - ifiing the code a bit.
// Starting to reorginize some of the lighting calcs to use a table lookup.
*/
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
#include <math.h>
#include <stdio.h>
#include <time.h>
#include <Math/mat3.h>
#include <Math/polar.h>
-#include "fg_time.h"
+#include "fg_time.hxx"
#include "sunpos.hxx"
l->sun_angle = acos(MAT3_DOT_PRODUCT(nup, nsun));
printf(" SUN ANGLE relative to current location = %.3f rads.\n",
l->sun_angle);
-
- /* calculate lighting parameters based on sun's relative angle to
- * local up */
- /* ya kind'a have to plot this to see how it works */
-
- /* x = t->sun_angle^8 */
-// x_2 = l->sun_angle * l->sun_angle;
-// x_4 = x_2 * x_2;
-// x_8 = x_4 * x_4;
-// x_10 = x_8 * x_2;
-
-// light = pow(1.1, -x_10 / 30.0);
-// ambient = 0.2 * light;
-// diffuse = 1.0 * light;
-
-// sky_brightness = 0.85 * pow(1.2, -x_8 / 20.0) + 0.15;
-
- /* sky_brightness = 0.15; */ /* to force a dark sky (for testing) */
-
-// if ( ambient < 0.02 ) { ambient = 0.02; }
-// if ( diffuse < 0.0 ) { diffuse = 0.0; }
-
-// if ( sky_brightness < 0.1 ) { sky_brightness = 0.1; }
-
-// l->scene_ambient[0] = white[0] * ambient;
-// l->scene_ambient[1] = white[1] * ambient;
-// l->scene_ambient[2] = white[2] * ambient;
-
-// l->scene_diffuse[0] = white[0] * diffuse;
-// l->scene_diffuse[1] = white[1] * diffuse;
-// l->scene_diffuse[2] = white[2] * diffuse;
-
-// /* set fog color */
-// l->fog_color[0] = base_fog_color[0] * (ambient + diffuse);
-// l->fog_color[1] = base_fog_color[1] * (ambient + diffuse);
-// l->fog_color[2] = base_fog_color[2] * (ambient + diffuse);
-// l->fog_color[3] = base_fog_color[3];
-
-// /* set sky color */
-// l->sky_color[0] = base_sky_color[0] * sky_brightness;
-// l->sky_color[1] = base_sky_color[1] * sky_brightness;
-// l->sky_color[2] = base_sky_color[2] * sky_brightness;
-// l->sky_color[3] = base_sky_color[3];
}
/* $Log$
-/* Revision 1.1 1998/04/22 13:24:07 curt
-/* C++ - ifiing the code a bit.
-/* Starting to reorginize some of the lighting calcs to use a table lookup.
+/* Revision 1.2 1998/04/24 00:52:31 curt
+/* Wrapped "#include <config.h>" in "#ifdef HAVE_CONFIG_H"
+/* Fog color fixes.
+/* Separated out lighting calcs into their own file.
/*
+ * Revision 1.1 1998/04/22 13:24:07 curt
+ * C++ - ifiing the code a bit.
+ * Starting to reorginize some of the lighting calcs to use a table lookup.
+ *
* Revision 1.27 1998/04/03 22:12:57 curt
* Converting to Gnu autoconf system.
* Centralized time handling differences.