]> git.mxchange.org Git - flightgear.git/blobdiff - src/ATC/tower.cxx
I had hoped that gmtime's lack of thread-safety wouldn't bite us. It does.
[flightgear.git] / src / ATC / tower.cxx
index bbfbf7b0ae1e9db7744d20cf2fabd638f43872ca..1271e920a1b1ee85cd1bad46d53b1410158d82c6 100644 (file)
@@ -508,7 +508,9 @@ void FGTower::Respond() {
                        }
                        trns += ConvertRwyNumToSpokenString(activeRwy);
                        if(_display) {
-                               globals->get_ATC_display()->RegisterSingleMessage(trns, 0);
+                               //globals->get_ATC_display()->RegisterSingleMessage(trns, 0);
+                               pending_transmission = trns;
+                               Transmit();
                        } else {
                                //cout << "Not displaying, trns was " << trns << '\n';
                        }
@@ -543,7 +545,9 @@ void FGTower::Respond() {
                                string trns = t->plane.callsign;
                                trns += " hold position";
                                if(_display) {
-                                       globals->get_ATC_display()->RegisterSingleMessage(trns, 0);
+                                       //globals->get_ATC_display()->RegisterSingleMessage(trns, 0);
+                                       pending_transmission = trns;
+                                       Transmit();
                                }
                                // TODO - add some idea of what traffic is blocking him.
                        }
@@ -581,7 +585,9 @@ void FGTower::Respond() {
                                t->clearedToLand = false;
                        }
                        if(_display && disp) {
-                               globals->get_ATC_display()->RegisterSingleMessage(trns);
+                               //globals->get_ATC_display()->RegisterSingleMessage(trns);
+                               pending_transmission = trns;
+                               Transmit();
                        }
                        t->finalAcknowledged = true;
                } else if(t->rwyVacatedReported && !(t->rwyVacatedAcknowledged)) {
@@ -676,7 +682,9 @@ void FGTower::ProcessDownwindReport(TowerPlaneRec* t) {
                }
        }
        if(_display) {
-               globals->get_ATC_display()->RegisterSingleMessage(trns);
+               //globals->get_ATC_display()->RegisterSingleMessage(trns);
+               pending_transmission = trns;
+               Transmit();
        }
        if(t->isUser) {
                if(t->opType == TTT_UNKNOWN) t->opType = CIRCUIT;
@@ -708,7 +716,9 @@ void FGTower::ProcessRunwayVacatedReport(TowerPlaneRec* t) {
        }
        //cout << "trns = " << trns << '\n';
        if(_display) {
-               globals->get_ATC_display()->RegisterSingleMessage(trns);
+               //globals->get_ATC_display()->RegisterSingleMessage(trns);
+               pending_transmission = trns;
+               Transmit();
        }
        RemoveFromRwyList(t->plane.callsign);
        AddToVacatedList(t);
@@ -819,7 +829,9 @@ void FGTower::ClearHoldingPlane(TowerPlaneRec* t) {
                timeSinceLastDeparture = 0.0;
        }
        if(_display) {
-               globals->get_ATC_display()->RegisterSingleMessage(trns, 0);
+               //globals->get_ATC_display()->RegisterSingleMessage(trns, 0);
+               pending_transmission = trns;
+               Transmit();
        }
        //cout << "Done ClearHoldingPlane " << endl;
 }
@@ -1373,26 +1385,26 @@ void FGTower::DoRwyDetails() {
        bool rwyGood = globals->get_runways()->search(ident, int(hdg), &runway);
        if(rwyGood) {
                //cout << "RUNWAY GOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOD\n";
-               activeRwy = runway.rwy_no;
-               rwy.rwyID = runway.rwy_no;
+               activeRwy = runway._rwy_no;
+               rwy.rwyID = runway._rwy_no;
                SG_LOG(SG_ATC, SG_INFO, "Active runway for airport " << ident << " is " << activeRwy);
                
                // Get the threshold position
-               double other_way = runway.heading - 180.0;
+               double other_way = runway._heading - 180.0;
                while(other_way <= 0.0) {
                        other_way += 360.0;
                }
        // move to the +l end/center of the runway
-               //cout << "Runway center is at " << runway.lon << ", " << runway.lat << '\n';
-       Point3D origin = Point3D(runway.lon, runway.lat, aptElev);
+               //cout << "Runway center is at " << runway._lon << ", " << runway._lat << '\n';
+       Point3D origin = Point3D(runway._lon, runway._lat, aptElev);
                Point3D ref = origin;
        double tshlon, tshlat, tshr;
                double tolon, tolat, tor;
-               rwy.length = runway.length * SG_FEET_TO_METER;
-               rwy.width = runway.width * SG_FEET_TO_METER;
+               rwy.length = runway._length * SG_FEET_TO_METER;
+               rwy.width = runway._width * SG_FEET_TO_METER;
        geo_direct_wgs_84 ( aptElev, ref.lat(), ref.lon(), other_way, 
                                rwy.length / 2.0 - 25.0, &tshlat, &tshlon, &tshr );
-       geo_direct_wgs_84 ( aptElev, ref.lat(), ref.lon(), runway.heading, 
+       geo_direct_wgs_84 ( aptElev, ref.lat(), ref.lon(), runway._heading, 
                                rwy.length / 2.0 - 25.0, &tolat, &tolon, &tor );
                // Note - 25 meters in from the runway end is a bit of a hack to put the plane ahead of the user.
                // now copy what we need out of runway into rwy
@@ -1400,7 +1412,7 @@ void FGTower::DoRwyDetails() {
                Point3D takeoff_end = Point3D(tolon, tolat, aptElev);
                //cout << "Threshold position = " << tshlon << ", " << tshlat << ", " << aptElev << '\n';
                //cout << "Takeoff position = " << tolon << ", " << tolat << ", " << aptElev << '\n';
-               rwy.hdg = runway.heading;
+               rwy.hdg = runway._heading;
                // Set the projection for the local area based on this active runway
                ortho.Init(rwy.threshold_pos, rwy.hdg); 
                rwy.end1ortho = ortho.ConvertToLocal(rwy.threshold_pos);        // should come out as zero
@@ -1459,9 +1471,9 @@ bool FGTower::OnAnyRunway(Point3D pt) {
                SG_LOG(SG_ATC, SG_WARN, "Unable to find any runways for airport ID " << ad.ident << " in FGTower");
        }
        bool on = false;
-       while(runway.id == ad.ident) {          
+       while(runway._id == ad.ident) {         
                on = OnRunway(pt, runway);
-               //cout << "Runway " << runway.rwy_no << ": On = " << (on ? "true\n" : "false\n");
+               //cout << "Runway " << runway._rwy_no << ": On = " << (on ? "true\n" : "false\n");
                if(on) return(true);
                globals->get_runways()->next(&runway);          
        }
@@ -2272,7 +2284,7 @@ string FGTower::GenText(const string& m, int c) {
                        int check = 0;  // If mes gets overflowed the while loop can go infinite
                        while ( strchr(&mes[0], crej) != NULL  ) {      // ie. loop until no more occurances of crej ('@') found
                                pos = strchr( &mes[0], crej );
-                               bcopy(pos, &tag[0], 3);
+                               memmove(&tag[0], pos, 3);
                                tag[3] = '\0';
                                int i;
                                len = 0;