]> git.mxchange.org Git - flightgear.git/commitdiff
Wrapped "#include <config.h>" in "#ifdef HAVE_CONFIG_H"
authorcurt <curt>
Fri, 24 Apr 1998 00:52:24 +0000 (00:52 +0000)
committercurt <curt>
Fri, 24 Apr 1998 00:52:24 +0000 (00:52 +0000)
Fog color fixes.
Separated out lighting calcs into their own file.

17 files changed:
Time/Makefile.am
Time/Makefile.in
Time/event.c [deleted file]
Time/event.cxx [new file with mode: 0644]
Time/event.h [deleted file]
Time/event.hxx [new file with mode: 0644]
Time/fg_time.c [deleted file]
Time/fg_time.cxx [new file with mode: 0644]
Time/fg_time.h [deleted file]
Time/fg_time.hxx [new file with mode: 0644]
Time/fg_timer.c [deleted file]
Time/fg_timer.cxx [new file with mode: 0644]
Time/fg_timer.h [deleted file]
Time/fg_timer.hxx [new file with mode: 0644]
Time/light.cxx
Time/light.hxx
Time/sunpos.cxx

index 11a9e297640fe42d1dd19310b538c2b4df6a73b4..f2916865aa623022f791f4b977f2d0a72658158e 100644 (file)
@@ -3,9 +3,9 @@ libdir  = ${exec_prefix}/lib
 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
 
index 1ae8bef1d5d4d2a3efaead1f53e0e217b418dfc4..26d1350e87f79a73294c1054b6b369fdfb9d9ea5 100644 (file)
@@ -75,9 +75,9 @@ libdir        = ${exec_prefix}/lib
 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
@@ -101,10 +101,6 @@ CXXFLAGS = @CXXFLAGS@
 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
 
 
diff --git a/Time/event.c b/Time/event.c
deleted file mode 100644 (file)
index 75febe3..0000000
+++ /dev/null
@@ -1,352 +0,0 @@
-/**************************************************************************
- * 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(&current);
-
-    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(&current, &(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.
- *
- */
diff --git a/Time/event.cxx b/Time/event.cxx
new file mode 100644 (file)
index 0000000..8233634
--- /dev/null
@@ -0,0 +1,360 @@
+/**************************************************************************
+ * 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(&current);
+
+    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(&current, &(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.
+ *
+ */
diff --git a/Time/event.h b/Time/event.h
deleted file mode 100644 (file)
index 1d650ff..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-/**************************************************************************
- * 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.
- *
- */
diff --git a/Time/event.hxx b/Time/event.hxx
new file mode 100644 (file)
index 0000000..af16b9b
--- /dev/null
@@ -0,0 +1,95 @@
+/**************************************************************************
+ * 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.
+ *
+ */
diff --git a/Time/fg_time.c b/Time/fg_time.c
deleted file mode 100644 (file)
index e4e1868..0000000
+++ /dev/null
@@ -1,513 +0,0 @@
-/**************************************************************************
- * 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(&current, &tz);
-    timestamp->seconds = current.tv_sec;
-    timestamp->millis = current.tv_usec / 1000;
-#elif defined( HAVE_GETLOCALTIME )
-    SYSTEMTIME current;
-    GetLocalTime(&current);
-    timestamp->seconds = current.wSecond;
-    timestamp->millis = current.wMilliseconds;
-#elif defined( HAVE_FTIME )
-    struct timeb current;
-    ftime(&current);
-    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(&current);
-    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.
- *
- */
diff --git a/Time/fg_time.cxx b/Time/fg_time.cxx
new file mode 100644 (file)
index 0000000..e7a41e3
--- /dev/null
@@ -0,0 +1,525 @@
+//
+// 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 = &current_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(&current, &tz);
+    timestamp->seconds = current.tv_sec;
+    timestamp->millis = current.tv_usec / 1000;
+#elif defined( HAVE_GETLOCALTIME )
+    SYSTEMTIME current;
+    GetLocalTime(&current);
+    timestamp->seconds = current.wSecond;
+    timestamp->millis = current.wMilliseconds;
+#elif defined( HAVE_FTIME )
+    struct timeb current;
+    ftime(&current);
+    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(&current);
+    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.
+//
diff --git a/Time/fg_time.h b/Time/fg_time.h
deleted file mode 100644 (file)
index 43a580e..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-/**************************************************************************
- * 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.
- *
- */
diff --git a/Time/fg_time.hxx b/Time/fg_time.hxx
new file mode 100644 (file)
index 0000000..45e37ee
--- /dev/null
@@ -0,0 +1,194 @@
+//
+// 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.
+//
diff --git a/Time/fg_timer.c b/Time/fg_timer.c
deleted file mode 100644 (file)
index 9454869..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-/**************************************************************************
- * 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(&current);
-       interval = timediff(&last, &current);
-       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.
- *
- */
diff --git a/Time/fg_timer.cxx b/Time/fg_timer.cxx
new file mode 100644 (file)
index 0000000..dfa7916
--- /dev/null
@@ -0,0 +1,164 @@
+/**************************************************************************
+ * 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(&current);
+       interval = timediff(&last, &current);
+       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.
+ *
+ */
diff --git a/Time/fg_timer.h b/Time/fg_timer.h
deleted file mode 100644 (file)
index 7f425f6..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/**************************************************************************
- * 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.
- *
- */
diff --git a/Time/fg_timer.hxx b/Time/fg_timer.hxx
new file mode 100644 (file)
index 0000000..7cfd106
--- /dev/null
@@ -0,0 +1,77 @@
+/**************************************************************************
+ * 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.
+ *
+ */
index 697cc56a373c57cb7ff8a7822ead6d3e308c397f..d38e6f8c26d9ff28f47caefbd877720240fcf711 100644 (file)
@@ -22,7 +22,9 @@
 // $Id$
 
 
-#include <config.h>
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
 
 #ifdef HAVE_WINDOWS_H
 #  include <windows.h>
@@ -30,6 +32,7 @@
 
 #include <GL/glut.h>
 #include <XGL/xgl.h>
+
 #include <string.h>
 
 #include <Debug/fg_debug.h>
@@ -41,7 +44,7 @@
 #include <Math/mat3.h>
 #include <Math/polar.h>
 
-#include "fg_time.h"
+#include "fg_time.hxx"
 #include "light.hxx"
 #include "sunpos.hxx"
 
@@ -99,7 +102,7 @@ void fgLightUpdate( void ) {
     /* 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;
@@ -137,9 +140,13 @@ void fgLightUpdate( void ) {
     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 */
@@ -151,6 +158,11 @@ void fgLightUpdate( void ) {
 
 
 // $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.
index d926fac47807fa81e415bd6c1f874915779bc719..1cb5d02bc0a847a1067912d4e31f6348c05d6486 100644 (file)
@@ -31,7 +31,9 @@
 #endif                                   
 
 
-#include <config.h>
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
 
 #ifdef HAVE_WINDOWS_H
 #  include <windows.h>
@@ -96,6 +98,11 @@ void fgLightUpdate( void);
 
 
 // $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.
index dcfe41541b6aedd4ea50680f337f440ad688a6e9..65f0b70b22091f31e96e0dd637bd511d332051d3 100644 (file)
  */
 
 
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
 #include <math.h>
 #include <stdio.h>
 #include <time.h>
@@ -50,7 +54,7 @@
 #include <Math/mat3.h>
 #include <Math/polar.h>
 
-#include "fg_time.h"
+#include "fg_time.hxx"
 #include "sunpos.hxx"
 
 
@@ -332,57 +336,19 @@ void fgUpdateSunPos( void ) {
     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.