1
0
Fork 0

Changes for the MacOS port contributed by Darrell Walisser.

This commit is contained in:
curt 1999-04-27 19:27:45 +00:00
parent 4163e42aad
commit 7f6b697ea6
21 changed files with 204 additions and 65 deletions

View file

@ -117,6 +117,9 @@
// -rp- please use FG_MEM_COPY everywhere ! // -rp- please use FG_MEM_COPY everywhere !
# define FG_MEM_COPY(to,from,n) memcpy(to, from, n) # define FG_MEM_COPY(to,from,n) memcpy(to, from, n)
// -dw- currently used glut has no game mode stuff
# define GLUT_WRONG_VERSION
# elif (__MWERKS__ >= 0x0900) && __INTEL__ # elif (__MWERKS__ >= 0x0900) && __INTEL__
# error still to be supported... # error still to be supported...
# else # else
@ -298,4 +301,3 @@ inline const_mem_fun_ref_t<_Ret,_Tp> mem_fun_ref(_Ret (_Tp::*__f)() const)
#endif // FG_INCOMPLETE_FUNCTIONAL #endif // FG_INCOMPLETE_FUNCTIONAL
#endif // _COMPILER_H #endif // _COMPILER_H

View file

@ -22,6 +22,12 @@
#ifndef _FG_CALLBACK_HXX #ifndef _FG_CALLBACK_HXX
#define _FG_CALLBACK_HXX #define _FG_CALLBACK_HXX
// -dw- need size_t for params() function
#ifdef __MWERKS__
typedef unsigned long size_t;
#endif
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// //
// Abstract base class for all FlightGear callbacks. // Abstract base class for all FlightGear callbacks.

View file

@ -78,7 +78,7 @@ string FGBucket::gen_base_path() const {
FGPath path( raw_path ); FGPath path( raw_path );
return path.get_path(); return path.str();
} }

View file

@ -51,7 +51,7 @@ FGPath::FGPath() {
// create a path based on "path" // create a path based on "path"
FGPath::FGPath( const string p ) { FGPath::FGPath( const string p ) {
path = fix_path( p ); set( p );
} }
@ -60,7 +60,13 @@ FGPath::~FGPath() {
} }
// append to the existing path // set path
void FGPath::set( const string p ) {
path = fix_path( p );
}
// append another piece to the existing path
void FGPath::append( const string p ) { void FGPath::append( const string p ) {
string part = fix_path( p ); string part = fix_path( p );
@ -73,3 +79,16 @@ void FGPath::append( const string p ) {
path += part; path += part;
} }
} }
// concatenate a string to the end of the path without inserting a
// path separator
void FGPath::concat( const string p ) {
string part = fix_path( p );
if ( path.size() == 0 ) {
path = part;
} else {
path += part;
}
}

View file

@ -60,12 +60,19 @@ public:
// destructor // destructor
~FGPath(); ~FGPath();
// append to the existing path // set path
void set( const string p );
// append another piece to the existing path
void append( const string p ); void append( const string p );
// concatenate a string to the end of the path without inserting a
// path separator
void concat( const string p );
// get the path string // get the path string
inline string get_path() const { return path; } inline string str() const { return path; }
inline const char *get_path_c_str() { return path.c_str(); } inline const char *c_str() { return path.c_str(); }
}; };

View file

@ -28,8 +28,9 @@
#include "moon.hxx" #include "moon.hxx"
#include <Debug/logstream.hxx> #include <Debug/logstream.hxx>
#include <Objects/texload.h>
#include <Main/options.hxx> #include <Main/options.hxx>
#include <Misc/fgpath.hxx>
#include <Objects/texload.h>
#ifdef __BORLANDC__ #ifdef __BORLANDC__
# define exception c_exception # define exception c_exception
@ -53,7 +54,6 @@ Moon::Moon(FGTime *t) :
0.054900, 0.000000, 0.054900, 0.000000,
115.3654, 13.0649929509, t) 115.3654, 13.0649929509, t)
{ {
string tpath, fg_tpath;
int width, height; int width, height;
FG_LOG( FG_GENERAL, FG_INFO, "Initializing Moon Texture"); FG_LOG( FG_GENERAL, FG_INFO, "Initializing Moon Texture");
@ -72,18 +72,21 @@ Moon::Moon(FGTime *t) :
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
// load in the texture data // load in the texture data
tpath = current_options.get_fg_root() + "/Textures/" + "moon.rgb"; FGPath tpath( current_options.get_fg_root() );
tpath.append( "Textures" );
tpath.append( "moon.rgb" );
if ( (moon_texbuf = read_rgb_texture(tpath.c_str(), &width, &height)) if ( (moon_texbuf = read_rgb_texture(tpath.c_str(), &width, &height))
== NULL ) == NULL )
{ {
// Try compressed // Try compressed
fg_tpath = tpath + ".gz"; FGPath fg_tpath = tpath;
fg_tpath.append( ".gz" );
if ( (moon_texbuf = read_rgb_texture(fg_tpath.c_str(), &width, &height)) if ( (moon_texbuf = read_rgb_texture(fg_tpath.c_str(), &width, &height))
== NULL ) == NULL )
{ {
FG_LOG( FG_GENERAL, FG_ALERT, FG_LOG( FG_GENERAL, FG_ALERT,
"Error in loading moon texture " << tpath ); "Error in loading moon texture " << tpath.str() );
exit(-1); exit(-1);
} }
} }

View file

@ -51,10 +51,11 @@
#include <Aircraft/aircraft.hxx> #include <Aircraft/aircraft.hxx>
#include <Debug/logstream.hxx> #include <Debug/logstream.hxx>
#include <Include/fg_constants.h> #include <Include/fg_constants.h>
#include <Misc/fgpath.hxx>
#include <Misc/fgstream.hxx> #include <Misc/fgstream.hxx>
#include <Misc/stopwatch.hxx>
#include <Main/options.hxx> #include <Main/options.hxx>
#include <Main/views.hxx> #include <Main/views.hxx>
#include <Misc/stopwatch.hxx>
#include <Time/fg_time.hxx> #include <Time/fg_time.hxx>
#include "Misc/stopwatch.hxx" #include "Misc/stopwatch.hxx"
@ -72,7 +73,9 @@ static GLint stars[FG_STAR_LEVELS];
// Initialize the Star Management Subsystem // Initialize the Star Management Subsystem
int fgStarsInit( void ) { int fgStarsInit( void ) {
Point3D starlist[FG_MAX_STARS]; // -dw- avoid local data > 32k error by dynamic allocation of the
// array, problem for some compilers
Point3D *starlist = new Point3D[FG_MAX_STARS];
// struct CelestialCoord pltPos; // struct CelestialCoord pltPos;
double right_ascension, declination, magnitude; double right_ascension, declination, magnitude;
double min_magnitude[FG_STAR_LEVELS]; double min_magnitude[FG_STAR_LEVELS];
@ -88,13 +91,13 @@ int fgStarsInit( void ) {
} }
// build the full path name to the stars data base file // build the full path name to the stars data base file
string path = current_options.get_fg_root() + "/Astro/stars" + ".gz"; FGPath path ( current_options.get_fg_root() );
path.append( "Astro/stars" );
FG_LOG( FG_ASTRO, FG_INFO, " Loading stars from " << path.str() );
FG_LOG( FG_ASTRO, FG_INFO, " Loading stars from " << path ); fg_gzifstream in( path.str() );
fg_gzifstream in( path );
if ( ! in ) { if ( ! in ) {
FG_LOG( FG_ASTRO, FG_ALERT, "Cannot open star file: " << path ); FG_LOG( FG_ASTRO, FG_ALERT, "Cannot open star file: " << path.str() );
exit(-1); exit(-1);
} }

View file

@ -4,7 +4,8 @@ libCockpit_a_SOURCES = \
cockpit.cxx cockpit.hxx \ cockpit.cxx cockpit.hxx \
hud.cxx hud.hxx \ hud.cxx hud.hxx \
hud_card.cxx hud_dnst.cxx hud_guag.cxx hud_inst.cxx \ hud_card.cxx hud_dnst.cxx hud_guag.cxx hud_inst.cxx \
hud_labl.cxx hud_ladr.cxx hud_scal.cxx hud_tbi.cxx \ hud_labl.cxx hud_ladr.cxx \
hud_scal.cxx hud_tbi.cxx \
panel.cxx panel.hxx panel.cxx panel.hxx
INCLUDES += -I$(top_builddir) -I$(top_builddir)/Lib -I$(top_builddir)/Simulator INCLUDES += -I$(top_builddir) -I$(top_builddir)/Lib -I$(top_builddir)/Simulator

View file

@ -38,6 +38,7 @@
#include <Aircraft/aircraft.hxx> #include <Aircraft/aircraft.hxx>
#include <Debug/logstream.hxx> #include <Debug/logstream.hxx>
#include <GUI/gui.h>
#include <Include/fg_constants.h> #include <Include/fg_constants.h>
#include <Include/general.hxx> #include <Include/general.hxx>
#include <Main/options.hxx> #include <Main/options.hxx>
@ -46,6 +47,7 @@
#include <Math/mat3.h> #include <Math/mat3.h>
#include <Math/polar3d.hxx> #include <Math/polar3d.hxx>
#include <Scenery/scenery.hxx> #include <Scenery/scenery.hxx>
#include <Time/fg_time.hxx>
#include <Time/fg_timer.hxx> #include <Time/fg_timer.hxx>
#include "cockpit.hxx" #include "cockpit.hxx"
@ -63,8 +65,7 @@ static pCockpit ac_cockpit;
double get_latitude( void ) double get_latitude( void )
{ {
return((double)((int)( current_aircraft.fdm_state->get_Latitude() return (double)((int)(current_aircraft.fdm_state->get_Latitude()*RAD_TO_DEG));
* RAD_TO_DEG)) );
} }
double get_lat_min( void ) double get_lat_min( void )
@ -97,6 +98,19 @@ double get_long_min( void )
return( (a - d) * 60.0); return( (a - d) * 60.0);
} }
char*
get_formated_gmt_time( void )
{
static char buf[32];
FGTime *t = FGTime::cur_time_params;
const struct tm *p = t->getGmt();
sprintf( buf, "%d/%d/%2d %d:%02d:%02d",
p->tm_mon+1, p->tm_mday, p->tm_year,
p->tm_hour, p->tm_min, p->tm_sec);
return buf;
}
double get_throttleval( void ) double get_throttleval( void )
{ {
return controls.get_throttle( 0 ); // Hack limiting to one engine return controls.get_throttle( 0 ); // Hack limiting to one engine

View file

@ -45,6 +45,7 @@
#endif #endif
#include <deque> // STL double ended queue #include <deque> // STL double ended queue
#include <vector> // STL vector
#include <fg_typedefs.h> #include <fg_typedefs.h>
#include <fg_constants.h> #include <fg_constants.h>
@ -53,6 +54,7 @@
#include <Controls/controls.hxx> #include <Controls/controls.hxx>
FG_USING_STD(deque); FG_USING_STD(deque);
FG_USING_STD(vector);
#ifndef WIN32 #ifndef WIN32
typedef struct { typedef struct {

View file

@ -44,6 +44,7 @@
#include <Aircraft/aircraft.hxx> #include <Aircraft/aircraft.hxx>
#include <Main/options.hxx> #include <Main/options.hxx>
#include <Main/views.hxx> #include <Main/views.hxx>
#include <Misc/fgpath.hxx>
#include <Objects/texload.h> #include <Objects/texload.h>
#include "panel.hxx" #include "panel.hxx"
@ -80,13 +81,11 @@ FGPanel* FGPanel::OurPanel = 0;
// FGPanel::FGPanel() - constructor to initialize the panel. // FGPanel::FGPanel() - constructor to initialize the panel.
FGPanel::FGPanel(void){ FGPanel::FGPanel(void){
string tpath;
int x, y; int x, y;
FILE *f; FILE *f;
char line[256]; char line[256];
GLint test; GLint test;
GLubyte tex[262144]; GLubyte *tex = new GLubyte[262144];
OurPanel = this; OurPanel = this;
@ -133,18 +132,21 @@ test_instr[2] = new FGTexInstrument(462.5, 133, 10, 20, 5.5, 60, 0.0, 1.0,
// load in the texture data // load in the texture data
xglPixelStorei(GL_UNPACK_ROW_LENGTH, 256); xglPixelStorei(GL_UNPACK_ROW_LENGTH, 256);
tpath = current_options.get_fg_root() + "/Textures/gauges.rgb"; FGPath tpath( current_options.get_fg_root() );
tpath.append( "Textures/gauges.rgb" );
if((img = read_rgb_texture( (char *)tpath.c_str(), &img_width, &img_height ))==NULL){ if((img = read_rgb_texture( (char *)tpath.c_str(), &img_width, &img_height ))==NULL){
} }
xglPixelStorei(GL_UNPACK_ROW_LENGTH, 256); xglPixelStorei(GL_UNPACK_ROW_LENGTH, 256);
tpath = current_options.get_fg_root() + "/Textures/gauges2.rgb"; tpath.set( current_options.get_fg_root() );
tpath.append( "Textures/gauges2.rgb" );
if((imag = read_rgb_texture( (char *)tpath.c_str(), &imag_width, &imag_height ))==NULL){ if((imag = read_rgb_texture( (char *)tpath.c_str(), &imag_width, &imag_height ))==NULL){
} }
xglPixelStorei(GL_UNPACK_ROW_LENGTH, 1024); xglPixelStorei(GL_UNPACK_ROW_LENGTH, 1024);
tpath = current_options.get_fg_root() + "/Textures/Fullone.rgb"; tpath.set( current_options.get_fg_root() );
tpath.append( "Textures/Fullone.rgb" );
if ((background = read_rgb_texture( (char *)tpath.c_str(), &width, &height ))==NULL ){ if ((background = read_rgb_texture( (char *)tpath.c_str(), &width, &height ))==NULL ){
} }
@ -227,7 +229,7 @@ void FGPanel::ReInit( int x, int y, int finx, int finy){
xglDrawPixels(finx - x, finy - y, GL_RGB, GL_UNSIGNED_BYTE, (GLvoid *)(background)); xglDrawPixels(finx - x, finy - y, GL_RGB, GL_UNSIGNED_BYTE, (GLvoid *)(background));
// restore original buffer state // restore original buffer state
xglDrawBuffer( buffer ); xglDrawBuffer( (GLenum)buffer );
xglEnable(GL_DEPTH_TEST); xglEnable(GL_DEPTH_TEST);
} }

View file

@ -31,6 +31,7 @@
#include <Include/fg_constants.h> #include <Include/fg_constants.h>
#include <Main/options.hxx> #include <Main/options.hxx>
#include <Math/fg_geodesy.hxx> #include <Math/fg_geodesy.hxx>
#include <Misc/fgpath.hxx>
#include <FDM/JSBsim/FGFDMExec.h> #include <FDM/JSBsim/FGFDMExec.h>
#include <FDM/JSBsim/FGAircraft.h> #include <FDM/JSBsim/FGAircraft.h>
@ -54,13 +55,17 @@ int fgJSBsimInit(double dt) {
FG_LOG( FG_FLIGHT, FG_INFO, " created FDMExec" ); FG_LOG( FG_FLIGHT, FG_INFO, " created FDMExec" );
string aircraft_path = current_options.get_fg_root() + "/Aircraft"; FGPath aircraft_path( current_options.get_fg_root() );
string engine_path = current_options.get_fg_root() + "/Engine"; aircraft_path.append( "Aircraft" );
FDMExec.GetAircraft()->LoadAircraft(aircraft_path, engine_path, "X15"); FGPath engine_path( current_options.get_fg_root() );
engine_path.append( "Engine" );
FDMExec.GetAircraft()->LoadAircraft(aircraft_path.str(),
engine_path.str(), "X15");
FG_LOG( FG_FLIGHT, FG_INFO, " loaded aircraft" ); FG_LOG( FG_FLIGHT, FG_INFO, " loaded aircraft" );
FDMExec.GetState()->Reset(aircraft_path, "Reset00"); FDMExec.GetState()->Reset(aircraft_path.str(), "Reset00");
FG_LOG( FG_FLIGHT, FG_INFO, " loaded initial conditions" ); FG_LOG( FG_FLIGHT, FG_INFO, " loaded initial conditions" );
FDMExec.GetState()->Setdt(dt); FDMExec.GetState()->Setdt(dt);

View file

@ -231,6 +231,7 @@ $Original log: LaRCsim.c,v $
#include "ls_types.h" #include "ls_types.h"
#include "ls_constants.h" #include "ls_constants.h"
#include "ls_geodesy.h"
#include "ls_generic.h" #include "ls_generic.h"
#include "ls_sim_control.h" #include "ls_sim_control.h"
#include "ls_cockpit.h" #include "ls_cockpit.h"
@ -574,8 +575,11 @@ int ls_ForceAltitude(double alt_feet) {
/* Flight Gear Modification Log /* Flight Gear Modification Log
* *
* $Log$ * $Log$
* Revision 1.1 1999/04/05 21:32:45 curt * Revision 1.2 1999/04/27 19:28:04 curt
* Initial revision * Changes for the MacOS port contributed by Darrell Walisser.
*
* Revision 1.1.1.1 1999/04/05 21:32:45 curt
* Start of 0.6.x branch.
* *
* Revision 1.25 1999/01/19 20:57:02 curt * Revision 1.25 1999/01/19 20:57:02 curt
* MacOS portability changes contributed by "Robert Puyol" <puyol@abvent.fr> * MacOS portability changes contributed by "Robert Puyol" <puyol@abvent.fr>

View file

@ -47,7 +47,12 @@ FGInterface base_fdm_state;
// Extrapolate fdm based on time_offset (in usec) // Extrapolate fdm based on time_offset (in usec)
void FGInterface::extrapolate( int time_offset ) { void FGInterface::extrapolate( int time_offset ) {
double dt = time_offset / 1000000.0; double dt = time_offset / 1000000.0;
// -dw- metrowerks complains about ambiguous access, not critical
// to keep this ;)
#ifndef __MWERKS__
cout << "extrapolating FDM by dt = " << dt << endl; cout << "extrapolating FDM by dt = " << dt << endl;
#endif
double lat = geodetic_position_v[0] + geocentric_rates_v[0] * dt; double lat = geodetic_position_v[0] + geocentric_rates_v[0] * dt;
double lat_geoc = geocentric_position_v[0] + geocentric_rates_v[0] * dt; double lat_geoc = geocentric_position_v[0] + geocentric_rates_v[0] * dt;
@ -79,9 +84,11 @@ int fgFDMInit(int model, FGInterface& f, double dt) {
if ( model == FGInterface::FG_SLEW ) { if ( model == FGInterface::FG_SLEW ) {
// fgSlewInit(dt); // fgSlewInit(dt);
#ifndef __MWERKS__ // -dw- 04/22/99 JSB sim not ported yet
} else if ( model == FGInterface::FG_JSBSIM ) { } else if ( model == FGInterface::FG_JSBSIM ) {
fgJSBsimInit(dt); fgJSBsimInit(dt);
fgJSBsim_2_FGInterface(base_fdm_state); fgJSBsim_2_FGInterface(base_fdm_state);
#endif
} else if ( model == FGInterface::FG_LARCSIM ) { } else if ( model == FGInterface::FG_LARCSIM ) {
// lets try to avoid really screwing up the LaRCsim model // lets try to avoid really screwing up the LaRCsim model
if ( base_fdm_state.get_Altitude() < -9000.0 ) { if ( base_fdm_state.get_Altitude() < -9000.0 ) {
@ -135,9 +142,11 @@ int fgFDMUpdate(int model, FGInterface& f, int multiloop, int time_offset) {
if ( model == FGInterface::FG_SLEW ) { if ( model == FGInterface::FG_SLEW ) {
// fgSlewUpdate(f, multiloop); // fgSlewUpdate(f, multiloop);
#ifndef __MWERKS__ // -dw- 04/22/99 JSB sim not ported yet
} else if ( model == FGInterface::FG_JSBSIM ) { } else if ( model == FGInterface::FG_JSBSIM ) {
fgJSBsimUpdate(base_fdm_state, multiloop); fgJSBsimUpdate(base_fdm_state, multiloop);
f = base_fdm_state; f = base_fdm_state;
#endif
} else if ( model == FGInterface::FG_LARCSIM ) { } else if ( model == FGInterface::FG_LARCSIM ) {
fgLaRCsimUpdate(base_fdm_state, multiloop); fgLaRCsimUpdate(base_fdm_state, multiloop);
// extrapolate position based on actual time // extrapolate position based on actual time

View file

@ -71,6 +71,7 @@
#include <Math/mat3.h> #include <Math/mat3.h>
#include <Math/polar3d.hxx> #include <Math/polar3d.hxx>
#include <Math/fg_random.h> #include <Math/fg_random.h>
#include <Misc/fgpath.hxx>
#include <plib/pu.h> #include <plib/pu.h>
#include <Scenery/scenery.hxx> #include <Scenery/scenery.hxx>
#include <Scenery/tilemgr.hxx> #include <Scenery/tilemgr.hxx>
@ -88,6 +89,14 @@
#include "fg_serial.hxx" #include "fg_serial.hxx"
// -dw- use custom sioux settings so I can see output window
#ifdef MACOS
# ifndef FG_NDEBUG
# include <sioux.h> // settings for output window
# endif
#endif
// This is a record containing a bit of global housekeeping information // This is a record containing a bit of global housekeeping information
FGGeneral general; FGGeneral general;
@ -137,10 +146,12 @@ static void fgInitVisuals( void ) {
l = &cur_light_params; l = &cur_light_params;
#ifndef GLUT_WRONG_VERSION
// Go full screen if requested ... // Go full screen if requested ...
if ( current_options.get_fullscreen() ) { if ( current_options.get_fullscreen() ) {
glutFullScreen(); glutFullScreen();
} }
#endif
// If enabled, normal vectors specified with glNormal are scaled // If enabled, normal vectors specified with glNormal are scaled
// to unit length after transformation. See glNormal. // to unit length after transformation. See glNormal.
@ -554,8 +565,10 @@ static void fgMainLoop( void ) {
} }
} }
#if ! defined( MACOS )
// Do any serial port work that might need to be done // Do any serial port work that might need to be done
fgSerialProcess(); fgSerialProcess();
#endif
// see if we need to load any new scenery tiles // see if we need to load any new scenery tiles
fgTileMgrUpdate(); fgTileMgrUpdate();
@ -660,12 +673,14 @@ static void fgIdleFunction ( void ) {
#if !defined(WIN32) #if !defined(WIN32)
if ( current_options.get_intro_music() ) { if ( current_options.get_intro_music() ) {
string lockfile = "/tmp/mpg123.running"; string lockfile = "/tmp/mpg123.running";
string mp3file = current_options.get_fg_root() + FGPath mp3file( current_options.get_fg_root() );
"/Sounds/intro.mp3"; mp3file.append( "Sounds/intro.mp3" );
string command = "(touch " + lockfile + "; mpg123 " + mp3file +
"> /dev/null 2>&1; /bin/rm " + lockfile + ") &"; string command = "(touch " + lockfile + "; mpg123 "
+ mp3file.str() + "> /dev/null 2>&1; /bin/rm "
+ lockfile + ") &";
FG_LOG( FG_GENERAL, FG_INFO, FG_LOG( FG_GENERAL, FG_INFO,
"Starting intro music: " << mp3file ); "Starting intro music: " << mp3file.str() );
system ( command.c_str() ); system ( command.c_str() );
} }
#endif #endif
@ -733,7 +748,9 @@ static void fgIdleFunction ( void ) {
audio_mixer = new smMixer; audio_mixer = new smMixer;
audio_mixer -> setMasterVolume ( 80 ) ; /* 80% of max volume. */ audio_mixer -> setMasterVolume ( 80 ) ; /* 80% of max volume. */
audio_sched -> setSafetyMargin ( 1.0 ) ; audio_sched -> setSafetyMargin ( 1.0 ) ;
string slfile = current_options.get_fg_root() + "/Sounds/wasp.wav";
FGPath slfile( current_options.get_fg_root() );
slfile.append( "Sounds/wasp.wav" );
s1 = new slSample ( (char *)slfile.c_str() ); s1 = new slSample ( (char *)slfile.c_str() );
FG_LOG( FG_GENERAL, FG_INFO, FG_LOG( FG_GENERAL, FG_INFO,
@ -831,6 +848,7 @@ int fgGlutInit( int *argc, char **argv ) {
if ( current_options.get_game_mode() == 0 ) { if ( current_options.get_game_mode() == 0 ) {
// Open the regular window // Open the regular window
xglutCreateWindow("Flight Gear"); xglutCreateWindow("Flight Gear");
#ifndef GLUT_WRONG_VERSION
} else { } else {
// Open the cool new 'game mode' window // Open the cool new 'game mode' window
char game_mode_str[256]; char game_mode_str[256];
@ -842,6 +860,7 @@ int fgGlutInit( int *argc, char **argv ) {
"game mode params = " << game_mode_str ); "game mode params = " << game_mode_str );
glutGameModeString( game_mode_str ); glutGameModeString( game_mode_str );
glutEnterGameMode(); glutEnterGameMode();
#endif
} }
// This seems to be the absolute earliest in the init sequence // This seems to be the absolute earliest in the init sequence
@ -920,6 +939,18 @@ int fgGlutInitEvents( void ) {
// Main ... // Main ...
int main( int argc, char **argv ) { int main( int argc, char **argv ) {
#ifdef MACOS
# ifndef FG_NDEBUG
// -dw- this will not work unless called before any standard
// output, so why not put it here?
SIOUXSettings.toppixel = 540;
SIOUXSettings.leftpixel = 50;
SIOUXSettings.rows = 15;
# endif
#endif
FGInterface *f; FGInterface *f;
f = current_aircraft.fdm_state; f = current_aircraft.fdm_state;
@ -943,15 +974,16 @@ int main( int argc, char **argv ) {
// Attempt to locate and parse a config file // Attempt to locate and parse a config file
// First check fg_root // First check fg_root
string config = current_options.get_fg_root() + "/system.fgfsrc"; FGPath config( current_options.get_fg_root() );
current_options.parse_config_file( config ); config.append( "system.fgfsrc" );
current_options.parse_config_file( config.str() );
// Next check home directory // Next check home directory
char* envp = ::getenv( "HOME" ); char* envp = ::getenv( "HOME" );
if ( envp != NULL ) { if ( envp != NULL ) {
config = envp; config.set( envp );
config += "/.fgfsrc"; config.append( ".fgfsrc" );
current_options.parse_config_file( config ); current_options.parse_config_file( config.str() );
} }
// Parse remaining command line options // Parse remaining command line options

View file

@ -411,7 +411,9 @@ int fgInitSubsystems( void )
fgAPInit(&current_aircraft); fgAPInit(&current_aircraft);
// Initialize serial ports // Initialize serial ports
#if ! defined( MACOS )
fgSerialInit(); fgSerialInit();
#endif
FG_LOG( FG_GENERAL, FG_INFO, endl); FG_LOG( FG_GENERAL, FG_INFO, endl);

View file

@ -54,13 +54,24 @@ FG_USING_NAMESPACE(std);
inline double inline double
atof( const string& str ) atof( const string& str )
{ {
#ifdef __MWERKS__
// -dw- if ::atof is called, then we get an infinite loop
return std::atof( str.c_str() );
#else
return ::atof( str.c_str() ); return ::atof( str.c_str() );
#endif
} }
inline int inline int
atoi( const string& str ) atoi( const string& str )
{ {
#ifdef __MWERKS__
// -dw- if ::atoi is called, then we get an infinite loop
return std::atoi( str.c_str() );
#else
return ::atoi( str.c_str() ); return ::atoi( str.c_str() );
#endif
} }
// Defined the shared options class here // Defined the shared options class here
@ -176,8 +187,10 @@ fgOPTIONS::fgOPTIONS() :
// $FG_ROOT is not set. This can still be overridden from the // $FG_ROOT is not set. This can still be overridden from the
// command line or a config file. // command line or a config file.
#if defined(WIN32) #if defined( WIN32 )
fg_root = "\\FlightGear"; fg_root = "\\FlightGear";
#elif defined( MACOS )
fg_root = ":";
#else #else
fg_root = "/usr/local/lib/FlightGear"; fg_root = "/usr/local/lib/FlightGear";
#endif #endif

View file

@ -38,6 +38,7 @@
#include <Debug/logstream.hxx> #include <Debug/logstream.hxx>
#include <Main/options.hxx> #include <Main/options.hxx>
#include <Math/fg_random.h> #include <Math/fg_random.h>
#include <Misc/fgpath.hxx>
#include <Objects/texload.h> #include <Objects/texload.h>
#include "splash.hxx" #include "splash.hxx"
@ -50,7 +51,6 @@ static GLubyte *splash_texbuf;
// Initialize the splash screen // Initialize the splash screen
void fgSplashInit ( void ) { void fgSplashInit ( void ) {
string tpath, fg_tpath;
int width, height; int width, height;
FG_LOG( FG_GENERAL, FG_INFO, "Initializing splash screen" ); FG_LOG( FG_GENERAL, FG_INFO, "Initializing splash screen" );
@ -73,20 +73,23 @@ void fgSplashInit ( void ) {
int num = (int)(fg_random() * 4.0 + 1.0); int num = (int)(fg_random() * 4.0 + 1.0);
char num_str[256]; char num_str[256];
sprintf(num_str, "%d", num); sprintf(num_str, "%d", num);
tpath = current_options.get_fg_root() + "/Textures/Splash";
tpath += num_str; FGPath tpath( current_options.get_fg_root() );
tpath += ".rgb"; tpath.append( "Textures/Splash" );
tpath.concat( num_str );
tpath.concat( ".rgb" );
if ( (splash_texbuf = if ( (splash_texbuf =
read_rgb_texture(tpath.c_str(), &width, &height)) == NULL ) read_rgb_texture(tpath.c_str(), &width, &height)) == NULL )
{ {
// Try compressed // Try compressed
fg_tpath = tpath + ".gz"; FGPath fg_tpath = tpath;
fg_tpath.concat( ".gz" );
if ( (splash_texbuf = if ( (splash_texbuf =
read_rgb_texture(fg_tpath.c_str(), &width, &height)) == NULL ) read_rgb_texture(fg_tpath.c_str(), &width, &height)) == NULL )
{ {
FG_LOG( FG_GENERAL, FG_ALERT, FG_LOG( FG_GENERAL, FG_ALERT,
"Error in loading splash screen texture " << tpath ); "Error in loading splash screen texture " << tpath.str() );
exit(-1); exit(-1);
} }
} }

View file

@ -37,6 +37,7 @@
// #include <Bucket/bucketutils.hxx> // #include <Bucket/bucketutils.hxx>
#include <Main/options.hxx> #include <Main/options.hxx>
#include <Main/views.hxx> #include <Main/views.hxx>
#include <Misc/fgpath.hxx>
#include <Objects/obj.hxx> #include <Objects/obj.hxx>
#include "tile.hxx" #include "tile.hxx"
@ -93,19 +94,21 @@ void
fgTILECACHE::fill_in( int index, FGBucket& p ) fgTILECACHE::fill_in( int index, FGBucket& p )
{ {
// Load the appropriate data file and build tile fragment list // Load the appropriate data file and build tile fragment list
string tile_path = current_options.get_fg_root() + FGPath tile_path( current_options.get_fg_root() );
"/Scenery/" + p.gen_base_path() + "/" + p.gen_index_str(); tile_path.append( "Scenery" );
tile_path.append( p.gen_base_path() );
tile_path.append( p.gen_index_str() );
tile_cache[index].used = true; tile_cache[index].used = true;
tile_cache[index].tile_bucket = p; tile_cache[index].tile_bucket = p;
fgObjLoad( tile_path, &tile_cache[index] ); fgObjLoad( tile_path.str(), &tile_cache[index] );
// tile_cache[ index ].ObjLoad( tile_path, p ); // tile_cache[ index ].ObjLoad( tile_path, p );
// cout << " ncount before = " << tile_cache[index].ncount << "\n"; // cout << " ncount before = " << tile_cache[index].ncount << "\n";
// cout << " fragments before = " << tile_cache[index].fragment_list.size() // cout << " fragments before = " << tile_cache[index].fragment_list.size()
// << "\n"; // << "\n";
string apt_path = tile_path + ".apt"; string apt_path = tile_path.str() + ".apt";
fgAptGenerate( apt_path, &tile_cache[index] ); fgAptGenerate( apt_path, &tile_cache[index] );
// cout << " ncount after = " << tile_cache[index].ncount << "\n"; // cout << " ncount after = " << tile_cache[index].ncount << "\n";

View file

@ -57,6 +57,7 @@ FG_USING_STD(string);
#include <Math/interpolater.hxx> #include <Math/interpolater.hxx>
#include <Math/mat3.h> #include <Math/mat3.h>
#include <Math/polar3d.hxx> #include <Math/polar3d.hxx>
#include <Misc/fgpath.hxx>
#include "fg_time.hxx" #include "fg_time.hxx"
#include "light.hxx" #include "light.hxx"
@ -77,19 +78,22 @@ void fgLIGHT::Init( void ) {
"Initializing Lighting interpolation tables." ); "Initializing Lighting interpolation tables." );
// build the path name to the ambient lookup table // build the path name to the ambient lookup table
string path = current_options.get_fg_root(); FGPath path( current_options.get_fg_root() );
string ambient = path + "/Lighting/ambient"; FGPath ambient = path;
string diffuse = path + "/Lighting/diffuse"; ambient.append( "Lighting/ambient" );
string sky = path + "/Lighting/sky"; FGPath diffuse = path;
diffuse.append( "Lighting/diffuse" );
FGPath sky = path;
sky.append( "Lighting/sky" );
// initialize ambient table // initialize ambient table
ambient_tbl = new fgINTERPTABLE( ambient ); ambient_tbl = new fgINTERPTABLE( ambient.str() );
// initialize diffuse table // initialize diffuse table
diffuse_tbl = new fgINTERPTABLE( diffuse ); diffuse_tbl = new fgINTERPTABLE( diffuse.str() );
// initialize sky table // initialize sky table
sky_tbl = new fgINTERPTABLE( sky ); sky_tbl = new fgINTERPTABLE( sky.str() );
} }

View file

@ -136,6 +136,11 @@ inline void FGTimeStamp::stamp() {
ftime(&current); ftime(&current);
seconds = current.time; seconds = current.time;
usec = current.millitm * 1000; usec = current.millitm * 1000;
#elif defined( __MWERKS__ )
// -dw- uses system clock to get time stamp... don't know if this works
long ticks = clock();
seconds = ticks / CLOCKS_PER_SEC;
usec = seconds * 100000;
#else #else
# error Port me # error Port me
#endif #endif