]> git.mxchange.org Git - flightgear.git/blobdiff - src/Airports/dynamicloader.cxx
Merge branch 'next' of gitorious.org:fg/flightgear into next
[flightgear.git] / src / Airports / dynamicloader.cxx
index 456acc83597288492d2837e51c510658709a7e49..7da29ae73ccaa0d423cd74c06fbc63f8599356fd 100644 (file)
@@ -1,10 +1,31 @@
+// 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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+//
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include <cstdlib>
+
 #include "dynamicloader.hxx"
 
 FGAirportDynamicsXMLLoader::FGAirportDynamicsXMLLoader(FGAirportDynamics* dyn):
     XMLVisitor(), _dynamics(dyn) {}
 
 void  FGAirportDynamicsXMLLoader::startXML () {
-  //cout << "Start XML" << endl;
+  //cout << "FGAirportDynamicsLoader::Start XML" << endl;
 }
 
 void  FGAirportDynamicsXMLLoader::endXML () {
@@ -17,22 +38,30 @@ void  FGAirportDynamicsXMLLoader::startElement (const char * name, const XMLAttr
   FGTaxiNode taxiNode;
   FGTaxiSegment taxiSegment;
   int index = 0;
+  string idxStr;
   taxiSegment.setIndex(index);
   //cout << "Start element " << name << endl;
   string attname;
   string value;
   string gateName;
   string gateNumber;
+  string attval;
   string lat;
   string lon;
+  int holdPointType;
+  int pushBackPoint;
+  
   if (name == string("Parking"))
     {
+      pushBackPoint = 0;
       for (int i = 0; i < atts.size(); i++)
        {
          //cout << "  " << atts.getName(i) << '=' << atts.getValue(i) << endl; 
          attname = atts.getName(i);
-         if (attname == string("index"))
-           park.setIndex(atoi(atts.getValue(i)));
+         if (attname == string("index")) {
+               park.setIndex(std::atoi(atts.getValue(i)));
+                idxStr = atts.getValue(i);
+          }
          else if (attname == string("type"))
            park.setType(atts.getValue(i));
         else if (attname == string("name"))
@@ -44,18 +73,25 @@ void  FGAirportDynamicsXMLLoader::startElement (const char * name, const XMLAttr
          else if (attname == string("lon"))
            park.setLongitude(atts.getValue(i)); 
          else if (attname == string("heading"))
-           park.setHeading(atof(atts.getValue(i)));
+           park.setHeading(std::atof(atts.getValue(i)));
          else if (attname == string("radius")) {
            string radius = atts.getValue(i);
            if (radius.find("M") != string::npos)
              radius = radius.substr(0, radius.find("M",0));
            //cerr << "Radius " << radius <<endl;
-           park.setRadius(atof(radius.c_str()));
+           park.setRadius(std::atof(radius.c_str()));
          }
-          else if (attname == string("airlineCodes"))
+         else if (attname == string("airlineCodes"))
             park.setCodes(atts.getValue(i));
+          else if (attname == string("pushBackRoute")) {
+             pushBackPoint = std::atoi(atts.getValue(i));
+            //park.setPushBackPoint(std::atoi(atts.getValue(i)));
+
+           }
        }
+      park.setPushBackPoint(pushBackPoint);
       park.setName((gateName+gateNumber));
+      //cerr << "Parking " << idxStr << "( " << gateName << gateNumber << ") has pushBackPoint " << pushBackPoint << endl;
       _dynamics->addParking(park);
     }
   if (name == string("node")) 
@@ -64,11 +100,29 @@ void  FGAirportDynamicsXMLLoader::startElement (const char * name, const XMLAttr
        {
          attname = atts.getName(i);
          if (attname == string("index"))
-           taxiNode.setIndex(atoi(atts.getValue(i)));
+           taxiNode.setIndex(std::atoi(atts.getValue(i)));
          if (attname == string("lat"))
            taxiNode.setLatitude(atts.getValue(i));
          if (attname == string("lon"))
            taxiNode.setLongitude(atts.getValue(i));
+         if (attname == string("isOnRunway"))
+            taxiNode.setOnRunway((bool) std::atoi(atts.getValue(i)));
+         if (attname == string("holdPointType")) {
+            attval = atts.getValue(i);
+            if (attval==string("none")) {
+                holdPointType=0;
+            } else if (attval==string("normal")) {
+                 holdPointType=1;
+            } else if (attval==string("CAT II/III")) {
+                 holdPointType=3;
+            } else if (attval==string("PushBack")) {
+                 holdPointType=3;
+            } else {
+                 holdPointType=0;
+            }
+            //cerr << "Setting Holding point to " << holdPointType << endl;
+            taxiNode.setHoldPointType(holdPointType);
+          }
        }
       _dynamics->getGroundNetwork()->addNode(taxiNode);
     }
@@ -79,9 +133,11 @@ void  FGAirportDynamicsXMLLoader::startElement (const char * name, const XMLAttr
        {
          attname = atts.getName(i);
          if (attname == string("begin"))
-           taxiSegment.setStartNodeRef(atoi(atts.getValue(i)));
+           taxiSegment.setStartNodeRef(std::atoi(atts.getValue(i)));
          if (attname == string("end"))
-           taxiSegment.setEndNodeRef(atoi(atts.getValue(i)));
+           taxiSegment.setEndNodeRef(std::atoi(atts.getValue(i)));
+          if (attname == string("isPushBackRoute"))
+           taxiSegment.setPushBackType((bool) std::atoi(atts.getValue(i)));
        }
       _dynamics->getGroundNetwork()->addSegment(taxiSegment);
     }
@@ -90,16 +146,41 @@ void  FGAirportDynamicsXMLLoader::startElement (const char * name, const XMLAttr
 
 void  FGAirportDynamicsXMLLoader::endElement (const char * name) {
   //cout << "End element " << name << endl;
+  if (name == string("AWOS")) {
+       _dynamics->addAwosFreq(atoi(value.c_str()));
+       //cerr << "Adding AWOS" << value<< endl;
+  }
+  if (name == string("UNICOM")) {
+       _dynamics->addUnicomFreq(atoi(value.c_str()));
+       //cerr << "UNICOM" << value<< endl;
+  }
+if (name == string("CLEARANCE")) {
+       _dynamics->addClearanceFreq(atoi(value.c_str()));
+       //cerr << "Adding CLEARANCE" << value<< endl;
+  }
+if (name == string("GROUND")) {
+       _dynamics->addGroundFreq(atoi(value.c_str()));
+       //cerr << "Adding GROUND" << value<< endl;
+  }
+
+if (name == string("TOWER")) {
+       _dynamics->addTowerFreq(atoi(value.c_str()));
+      //cerr << "Adding TOWER" << value<< endl;
+  }
+if (name == string("APPROACH")) {
+       _dynamics->addApproachFreq(atoi(value.c_str()));
+       //cerr << "Adding approach" << value<< endl;
+  }
 
 }
 
 void  FGAirportDynamicsXMLLoader::data (const char * s, int len) {
   string token = string(s,len);
   //cout << "Character data " << string(s,len) << endl;
-  //if ((token.find(" ") == string::npos && (token.find('\n')) == string::npos))
-    //value += token;
-  //else
-    //value = string("");
+  if ((token.find(" ") == string::npos && (token.find('\n')) == string::npos))
+    value += token;
+  else
+    value = string("");
 }
 
 void  FGAirportDynamicsXMLLoader::pi (const char * target, const char * data) {