noinst_PROGRAMS = testnavs
-libNavAids_a_SOURCES = navaid.hxx navaids.hxx navaids.cxx
+libNavAids_a_SOURCES = nav.hxx navlist.hxx navlist.cxx
testnavs_SOURCES = testnavs.cxx
testnavs_LDADD = libNavAids.a -lsgdebug -lsgmath -lsgmisc -lz
--- /dev/null
+// navaid.hxx -- navaid class
+//
+// Written by Curtis Olson, started April 2000.
+//
+// Copyright (C) 2000 Curtis L. Olson - curt@flightgear.org
+//
+// 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$
+
+
+#ifndef _FG_NAVAID_HXX
+#define _FG_NAVAID_HXX
+
+
+#include <simgear/compiler.h>
+#include <simgear/misc/fgstream.hxx>
+
+#ifdef FG_HAVE_STD_INCLUDES
+# include <istream>
+#elif defined( FG_HAVE_NATIVE_SGI_COMPILERS )
+# include <iostream.h>
+#elif defined( __BORLANDC__ )
+# include <iostream>
+#else
+# include <istream.h>
+#endif
+
+#if ! defined( FG_HAVE_NATIVE_SGI_COMPILERS )
+FG_USING_STD(istream);
+#endif
+
+
+class FGNavaid {
+
+ char type;
+ double lon, lat;
+ double elev;
+ int freq;
+ int range;
+ bool dme;
+ char ident[5];
+
+public:
+
+ inline FGNavaid(void) {}
+ inline ~FGNavaid(void) {}
+
+ inline char get_type() const { return type; }
+ inline double get_lon() const { return lon; }
+ inline double get_lat() const { return lat; }
+ inline double get_elev() const { return elev; }
+ inline int get_freq() const { return freq; }
+ inline int get_range() const { return range; }
+ inline bool get_dme() const { return dme; }
+ inline char *get_ident() { return ident; }
+
+ inline void set_type( char t ) { type = t; }
+ inline void set_lon( double l ) { lon = l; }
+ inline void set_lat( double l ) { lat = l; }
+ inline void set_elev( double e ) { elev = e; }
+ inline void set_freq( int f ) { freq = f; }
+ inline void set_range( int r ) { range = r; }
+ inline void set_dme( bool b ) { dme = b; }
+ inline void set_ident( char *i ) { strncpy( ident, i, 5 ); }
+
+ friend istream& operator>> ( istream&, FGNavaid& );
+};
+
+
+inline istream&
+operator >> ( istream& in, FGNavaid& n )
+{
+ double f;
+ char c;
+ in >> n.type >> n.lat >> n.lon >> n.elev >> f >> n.range
+ >> c >> n.ident;
+
+ n.freq = (int)(f * 100.0);
+ if ( c == 'Y' ) {
+ n.dme = true;
+ } else {
+ n.dme = false;
+ }
+
+ return in >> skipeol;
+}
+
+
+#endif // _FG_NAVAID_HXX
+++ /dev/null
-// navaid.hxx -- navaid class
-//
-// Written by Curtis Olson, started April 2000.
-//
-// Copyright (C) 2000 Curtis L. Olson - curt@flightgear.org
-//
-// 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$
-
-
-#ifndef _FG_NAVAID_HXX
-#define _FG_NAVAID_HXX
-
-
-#include <simgear/compiler.h>
-#include <simgear/misc/fgstream.hxx>
-
-#ifdef FG_HAVE_STD_INCLUDES
-# include <istream>
-#elif defined( FG_HAVE_NATIVE_SGI_COMPILERS )
-# include <iostream.h>
-#elif defined( __BORLANDC__ )
-# include <iostream>
-#else
-# include <istream.h>
-#endif
-
-#if ! defined( FG_HAVE_NATIVE_SGI_COMPILERS )
-FG_USING_STD(istream);
-#endif
-
-
-class FGNavaid {
-
- char type;
- double lon, lat;
- double elev;
- int freq;
- int range;
- bool dme;
- char ident[5];
-
-public:
-
- inline FGNavaid(void) {}
- inline ~FGNavaid(void) {}
-
- inline char get_type() const { return type; }
- inline double get_lon() const { return lon; }
- inline double get_lat() const { return lat; }
- inline double get_elev() const { return elev; }
- inline int get_freq() const { return freq; }
- inline int get_range() const { return range; }
- inline bool get_dme() const { return dme; }
- inline char *get_ident() { return ident; }
-
- inline void set_type( char t ) { type = t; }
- inline void set_lon( double l ) { lon = l; }
- inline void set_lat( double l ) { lat = l; }
- inline void set_elev( double e ) { elev = e; }
- inline void set_freq( int f ) { freq = f; }
- inline void set_range( int r ) { range = r; }
- inline void set_dme( bool b ) { dme = b; }
- inline void set_ident( char *i ) { strncpy( ident, i, 5 ); }
-
- friend istream& operator>> ( istream&, FGNavaid& );
-};
-
-
-inline istream&
-operator >> ( istream& in, FGNavaid& n )
-{
- double f;
- char c;
- in >> n.type >> n.lat >> n.lon >> n.elev >> f >> n.range
- >> c >> n.ident;
-
- n.freq = (int)(f * 100.0);
- if ( c == 'Y' ) {
- n.dme = true;
- } else {
- n.dme = false;
- }
-
- return in >> skipeol;
-}
-
-
-#endif // _FG_NAVAID_HXX
+++ /dev/null
-// navaids.cxx -- navaids management class
-//
-// Written by Curtis Olson, started April 2000.
-//
-// Copyright (C) 2000 Curtis L. Olson - curt@flightgear.org
-//
-// 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$
-
-
-#include <simgear/debug/logstream.hxx>
-#include <simgear/misc/fgstream.hxx>
-#include <simgear/math/fg_geodesy.hxx>
-
-#include "navaids.hxx"
-
-
-// Constructor
-FGNavaids::FGNavaids( void ) {
-}
-
-
-// Destructor
-FGNavaids::~FGNavaids( void ) {
-}
-
-
-// load the navaids and build the map
-bool FGNavaids::init( FGPath path ) {
- FGNavaid n;
-
- navaids.erase( navaids.begin(), navaids.end() );
-
- fg_gzifstream in( path.str() );
- if ( !in.is_open() ) {
- FG_LOG( FG_GENERAL, FG_ALERT, "Cannot open file: " << path.str() );
- exit(-1);
- }
-
- // read in each line of the file
-
- in >> skipeol;
- in >> skipcomment;
-
-#ifdef __MWERKS__
-
- char c = 0;
- while ( in.get(c) && c != '\0' && n.get_type() != '[' ) {
- in.putback(c);
- in >> n;
- if ( n.get_type() != '[' ) {
- navaids[n.get_freq()].push_back(n);
- }
- in >> skipcomment;
- }
-
-#else
-
- while ( ! in.eof() && n.get_type() != '[' ) {
- in >> n;
- /* cout << "id = " << n.get_ident() << endl;
- cout << " type = " << n.get_type() << endl;
- cout << " lon = " << n.get_lon() << endl;
- cout << " lat = " << n.get_lat() << endl;
- cout << " elev = " << n.get_elev() << endl;
- cout << " freq = " << n.get_freq() << endl;
- cout << " range = " << n.get_range() << endl; */
- if ( n.get_type() != '[' ) {
- navaids[n.get_freq()].push_back(n);
- }
- in >> skipcomment;
- }
-
-#endif
-
- return true;
-}
-
-
-// query the database for the specified frequency, lon and lat are in
-// degrees, elev is in meters
-bool FGNavaids::query( double lon, double lat, double elev, double freq,
- FGNavaid *n, double *heading, double *dist )
-{
- nav_list_type stations = navaids[(int)(freq*100.0)];
-
- nav_list_iterator current = stations.begin();
- nav_list_iterator last = stations.end();
-
- double az1, az2, s;
- for ( ; current != last ; ++current ) {
- // cout << "testing " << current->get_ident() << endl;
- geo_inverse_wgs_84( elev, lat, lon,
- current->get_lat(), current->get_lon(),
- &az1, &az2, &s );
- // cout << " dist = " << s << endl;
- if ( s < ( current->get_range() * NM_TO_METER ) ) {
- *n = *current;
- *heading = az2;
- *dist = s;
- return true;
- }
- }
-
- return false;
-}
+++ /dev/null
-// navaids.hxx -- navaids management class
-//
-// Written by Curtis Olson, started April 2000.
-//
-// Copyright (C) 2000 Curtis L. Olson - curt@flightgear.org
-//
-// 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$
-
-
-#ifndef _FG_NAVAIDS_HXX
-#define _FG_NAVAIDS_HXX
-
-
-#include <simgear/compiler.h>
-#include <simgear/misc/fgpath.hxx>
-
-#include <map>
-#include <vector>
-
-#include "navaid.hxx"
-
-FG_USING_STD(map);
-FG_USING_STD(vector);
-
-
-class FGNavaids {
-
- // convenience types
- typedef vector < FGNavaid > nav_list_type;
- typedef nav_list_type::iterator nav_list_iterator;
- typedef nav_list_type::const_iterator nav_list_const_iterator;
-
- typedef map < int, nav_list_type, less<int> > nav_map_type;
- typedef nav_map_type::iterator nav_map_iterator;
- typedef nav_map_type::const_iterator nav_map_const_iterator;
-
- nav_map_type navaids;
-
-public:
-
- FGNavaids();
- ~FGNavaids();
-
- // load the navaids and build the map
- bool init( FGPath path );
-
- // query the database for the specified frequency, lon and lat are
- // in degrees, elev is in meters
- bool query( double lon, double lat, double elev, double freq,
- FGNavaid *n, double *heading, double *dist);
-};
-
-
-#endif // _FG_NAVAIDS_HXX
--- /dev/null
+// navaids.cxx -- navaids management class
+//
+// Written by Curtis Olson, started April 2000.
+//
+// Copyright (C) 2000 Curtis L. Olson - curt@flightgear.org
+//
+// 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$
+
+
+#include <simgear/debug/logstream.hxx>
+#include <simgear/misc/fgstream.hxx>
+#include <simgear/math/fg_geodesy.hxx>
+
+#include "navlist.hxx"
+
+
+// Constructor
+FGNavaids::FGNavaids( void ) {
+}
+
+
+// Destructor
+FGNavaids::~FGNavaids( void ) {
+}
+
+
+// load the navaids and build the map
+bool FGNavaids::init( FGPath path ) {
+ FGNavaid n;
+
+ navaids.erase( navaids.begin(), navaids.end() );
+
+ fg_gzifstream in( path.str() );
+ if ( !in.is_open() ) {
+ FG_LOG( FG_GENERAL, FG_ALERT, "Cannot open file: " << path.str() );
+ exit(-1);
+ }
+
+ // read in each line of the file
+
+ in >> skipeol;
+ in >> skipcomment;
+
+#ifdef __MWERKS__
+
+ char c = 0;
+ while ( in.get(c) && c != '\0' && n.get_type() != '[' ) {
+ in.putback(c);
+ in >> n;
+ if ( n.get_type() != '[' ) {
+ navaids[n.get_freq()].push_back(n);
+ }
+ in >> skipcomment;
+ }
+
+#else
+
+ while ( ! in.eof() && n.get_type() != '[' ) {
+ in >> n;
+ /* cout << "id = " << n.get_ident() << endl;
+ cout << " type = " << n.get_type() << endl;
+ cout << " lon = " << n.get_lon() << endl;
+ cout << " lat = " << n.get_lat() << endl;
+ cout << " elev = " << n.get_elev() << endl;
+ cout << " freq = " << n.get_freq() << endl;
+ cout << " range = " << n.get_range() << endl; */
+ if ( n.get_type() != '[' ) {
+ navaids[n.get_freq()].push_back(n);
+ }
+ in >> skipcomment;
+ }
+
+#endif
+
+ return true;
+}
+
+
+// query the database for the specified frequency, lon and lat are in
+// degrees, elev is in meters
+bool FGNavaids::query( double lon, double lat, double elev, double freq,
+ FGNavaid *n, double *heading, double *dist )
+{
+ nav_list_type stations = navaids[(int)(freq*100.0)];
+
+ nav_list_iterator current = stations.begin();
+ nav_list_iterator last = stations.end();
+
+ double az1, az2, s;
+ for ( ; current != last ; ++current ) {
+ // cout << "testing " << current->get_ident() << endl;
+ geo_inverse_wgs_84( elev, lat, lon,
+ current->get_lat(), current->get_lon(),
+ &az1, &az2, &s );
+ // cout << " dist = " << s << endl;
+ if ( s < ( current->get_range() * NM_TO_METER ) ) {
+ *n = *current;
+ *heading = az2;
+ *dist = s;
+ return true;
+ }
+ }
+
+ return false;
+}
--- /dev/null
+// navaids.hxx -- navaids management class
+//
+// Written by Curtis Olson, started April 2000.
+//
+// Copyright (C) 2000 Curtis L. Olson - curt@flightgear.org
+//
+// 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$
+
+
+#ifndef _FG_NAVAIDS_HXX
+#define _FG_NAVAIDS_HXX
+
+
+#include <simgear/compiler.h>
+#include <simgear/misc/fgpath.hxx>
+
+#include <map>
+#include <vector>
+
+#include "nav.hxx"
+
+FG_USING_STD(map);
+FG_USING_STD(vector);
+
+
+class FGNavaids {
+
+ // convenience types
+ typedef vector < FGNavaid > nav_list_type;
+ typedef nav_list_type::iterator nav_list_iterator;
+ typedef nav_list_type::const_iterator nav_list_const_iterator;
+
+ typedef map < int, nav_list_type, less<int> > nav_map_type;
+ typedef nav_map_type::iterator nav_map_iterator;
+ typedef nav_map_type::const_iterator nav_map_const_iterator;
+
+ nav_map_type navaids;
+
+public:
+
+ FGNavaids();
+ ~FGNavaids();
+
+ // load the navaids and build the map
+ bool init( FGPath path );
+
+ // query the database for the specified frequency, lon and lat are
+ // in degrees, elev is in meters
+ bool query( double lon, double lat, double elev, double freq,
+ FGNavaid *n, double *heading, double *dist);
+};
+
+
+#endif // _FG_NAVAIDS_HXX
#include <simgear/misc/fgpath.hxx>
-#include "navaids.hxx"
+#include "navlist.hxx"
int main() {
FGNavaids navs;