Index: src/Network/net_fdm.hxx
===================================================================
RCS file: /var/cvs/FlightGear-0.9/source/src/Network/net_fdm.hxx,v
retrieving revision 1.24
diff -u -r1.24 net_fdm.hxx
--- src/Network/net_fdm.hxx	21 Mar 2006 18:51:57 -0000	1.24
+++ src/Network/net_fdm.hxx	15 Jun 2008 15:20:16 -0000
@@ -6,7 +6,7 @@
 //
 // This file is in the Public Domain, and comes with no warranty.
 //
-// $Id: net_fdm.hxx,v 1.24 2006/03/21 18:51:57 curt Exp $
+// $Id: net_fdm.hxx,v 1.24 2006-03-21 18:51:57 curt Exp $
 
 
 #ifndef _NET_FDM_HXX
@@ -22,7 +22,7 @@
 // I am not aware of any platforms that don't use 4 bytes for float
 // and 8 bytes for double.
 
-const uint32_t FG_NET_FDM_VERSION = 24;
+const uint32_t FG_NET_FDM_VERSION = 27;
 
 
 // Define a structure containing the top level flight dynamics model
@@ -35,7 +35,9 @@
     enum {
         FG_MAX_ENGINES = 4,
         FG_MAX_WHEELS = 3,
-        FG_MAX_TANKS = 4
+        FG_MAX_TANKS = 4,
+	FG_MAX_ROTOR_BLADE = 4 ,
+	FG_MAX_TAIL_BLADE = 2 
     };
 
     uint32_t version;		// increment when data values change
@@ -120,6 +122,21 @@
     float nose_wheel;
     float speedbrake;
     float spoilers;
+
+    // helicopter variables
+    float    rotors_main_rpm ;
+    float    rotors_main_roll ;
+    float    rotors_main_yaw ;
+    float    rotors_gear_total_torque ;
+    uint32_t num_rotors_main_blade ; 
+    float    rotors_main_blade_flap[FG_MAX_ROTOR_BLADE];
+    float    rotors_main_blade_incidence[FG_MAX_ROTOR_BLADE];
+    float    rotors_main_blade_position[FG_MAX_ROTOR_BLADE];
+    uint32_t num_rotors_tail_blade ; 
+    float    rotors_tail_rpm ;
+    float    rotors_tail_blade_incidence[FG_MAX_TAIL_BLADE];
+    float    rotors_tail_blade_position[FG_MAX_TAIL_BLADE];
+
 };
 
 
Index: src/Network/native_fdm.cxx
===================================================================
RCS file: /var/cvs/FlightGear-0.9/source/src/Network/native_fdm.cxx,v
retrieving revision 1.32
diff -u -r1.32 native_fdm.cxx
--- src/Network/native_fdm.cxx	7 Nov 2007 17:41:31 -0000	1.32
+++ src/Network/native_fdm.cxx	15 Jun 2008 15:20:16 -0000
@@ -18,7 +18,7 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 //
-// $Id: native_fdm.cxx,v 1.32 2007/11/07 17:41:31 mfranz Exp $
+// $Id: native_fdm.cxx,v 1.32 2007-11-07 17:41:31 mfranz Exp $
 
 
 #ifdef HAVE_CONFIG_H
@@ -197,14 +197,41 @@
         net->gear_steer[i] = node->getDoubleValue("steering-norm");
         net->gear_compression[i] = node->getDoubleValue("compression-norm");
     }
-
+    // ----------------------------------------------
+    // helicopter -- main rotor
+    SGPropertyNode *node = fgGetNode("/rotors/main", true);
+    net->rotors_main_rpm =  node->getDoubleValue("rpm") ;
+    net->rotors_main_roll = node->getDoubleValue("roll-deg");
+    net->rotors_main_yaw = node->getDoubleValue("yaw-deg");
+    // helicopter -- total-torque
+    node = fgGetNode("/rotors/gear", true);
+    net->rotors_gear_total_torque =  node->getDoubleValue("total-torque") ;
+    // helicopter -- blade for main rotor
+    net->num_rotors_main_blade = FGNetFDM::FG_MAX_ROTOR_BLADE;
+    for (i = 0; i < net->num_rotors_main_blade; ++i ) {
+        SGPropertyNode *node = fgGetNode("/rotors/main/blade", i, true);
+	net->rotors_main_blade_flap[i]       = node->getDoubleValue("flap-deg");
+	net->rotors_main_blade_incidence[i]  = node->getDoubleValue("incidence-deg");
+	net->rotors_main_blade_position[i]   = node->getDoubleValue("position-deg");
+    }
+    // helicopter -- tail rotor
+    node = fgGetNode("/rotors/tail", true);
+    net->rotors_tail_rpm =  node->getDoubleValue("rpm") ;
+    // helicopter -- blade for main rotor
+    net->num_rotors_tail_blade = FGNetFDM::FG_MAX_TAIL_BLADE;
+    for (i = 0; i < net->num_rotors_tail_blade; ++i ) {
+        SGPropertyNode *node = fgGetNode("/rotors/tail/blade", i, true);
+	net->rotors_tail_blade_incidence[i]  = node->getDoubleValue("incidence-deg");
+	net->rotors_tail_blade_position[i]   = node->getDoubleValue("position-deg");
+    }
+    // ----------------------------------------------
     // the following really aren't used in this context
     net->cur_time = globals->get_time_params()->get_cur_time();
     net->warp = globals->get_warp();
     net->visibility = fgGetDouble("/environment/visibility-m");
 
     // Control surface positions
-    SGPropertyNode *node = fgGetNode("/surface-positions", true);
+    node = fgGetNode("/surface-positions", true);
     net->elevator = node->getDoubleValue( "elevator-pos-norm" );
     net->elevator_trim_tab
         = node->getDoubleValue( "elevator-trim-tab-pos-norm" );
@@ -292,6 +319,25 @@
         htonf(net->nose_wheel);
         htonf(net->speedbrake);
         htonf(net->spoilers);
+
+	htonf(net->rotors_main_rpm);
+	htonf(net->rotors_main_roll);
+	htonf(net->rotors_main_yaw);
+	htonf(net->rotors_gear_total_torque);
+
+	for (i = 0; i < net->num_rotors_main_blade; ++i ) {
+	  htonf(net->rotors_main_blade_flap[i]);
+	  htonf(net->rotors_main_blade_incidence[i]);
+	  htonf(net->rotors_main_blade_position[i]);
+	}
+	net->num_rotors_main_blade=htonl(net->num_rotors_main_blade);
+	htonf(net->rotors_tail_rpm);
+	for (i = 0; i < net->num_rotors_tail_blade; ++i ) {
+	  htonf(net->rotors_tail_blade_incidence[i]);
+	  htonf(net->rotors_tail_blade_position[i]);
+	}
+	net->num_rotors_tail_blade=htonl(net->num_rotors_tail_blade);
+
     }
 }
 
@@ -373,6 +419,24 @@
         htonf(net->nose_wheel);
         htonf(net->speedbrake);
         htonf(net->spoilers);
+
+	htonf(net->rotors_main_rpm);
+	htonf(net->rotors_main_roll);
+	htonf(net->rotors_main_yaw);
+	htonf(net->rotors_gear_total_torque);
+	net->num_rotors_main_blade = htonl(net->num_rotors_main_blade);
+	for (i = 0; i < net->num_rotors_main_blade; ++i ) {
+	  htonf(net->rotors_main_blade_flap[i]);
+	  htonf(net->rotors_main_blade_incidence[i]);
+	  htonf(net->rotors_main_blade_position[i]);
+	}
+	htonf(net->rotors_tail_rpm);
+	net->num_rotors_tail_blade = htonl(net->num_rotors_tail_blade);
+	for (i = 0; i < net->num_rotors_tail_blade; ++i ) {
+	  htonf(net->rotors_tail_blade_incidence[i]);
+	  htonf(net->rotors_tail_blade_position[i]);
+	}
+
     }
 
     if ( net->version == FG_NET_FDM_VERSION ) {
@@ -458,7 +522,32 @@
 	    node->setDoubleValue("steering-norm", net->gear_steer[i] );
 	    node->setDoubleValue("compression-norm", net->gear_compression[i] );
 	}
-
+	// ----------------------------------------------
+	// helicopter -- main rotor
+	SGPropertyNode *node = fgGetNode("/rotors/main", true);
+	node->setDoubleValue("rpm",    net->rotors_main_rpm );  
+	node->setDoubleValue("roll-deg",   net->rotors_main_roll ); 
+	node->setDoubleValue("yaw-deg",   net->rotors_main_yaw ); 
+	// helicopter -- total-torque
+	node = fgGetNode("/rotors/gear", true);
+	node->setDoubleValue("total-torque",    net->rotors_gear_total_torque );  
+	// helicopter -- blade for main rotor
+	for (i = 0; i < net->num_rotors_main_blade; ++i ) {
+	  SGPropertyNode *node = fgGetNode("/rotors/main/blade", i, true);
+	  node->setDoubleValue("flap-deg",net->rotors_main_blade_flap[i]       ); 
+	  node->setDoubleValue("incidence-deg",net->rotors_main_blade_incidence[i]  ); 
+	  node->setDoubleValue("position-deg",net->rotors_main_blade_position[i]   ); 
+	}
+	// helicopter -- tail rotor
+	node = fgGetNode("/rotors/tail", true);
+	node->setDoubleValue("rpm",    net->rotors_tail_rpm );  
+	// helicopter -- blade for main rotor
+	for (i = 0; i < net->num_rotors_tail_blade; ++i ) {
+	  SGPropertyNode *node = fgGetNode("/rotors/tail/blade", i, true);
+	  node->setDoubleValue("incidence-deg",net->rotors_tail_blade_incidence[i]  ); 
+	  node->setDoubleValue("position-deg",net->rotors_tail_blade_position[i]   ); 
+	}
+	// ----------------------------------------------
 	/* these are ignored for now  ... */
 	/*
 	if ( net->cur_time ) {
@@ -469,7 +558,7 @@
         last_warp = net->warp;
 	*/
 
-        SGPropertyNode *node = fgGetNode("/surface-positions", true);
+        node = fgGetNode("/surface-positions", true);
         node->setDoubleValue("elevator-pos-norm", net->elevator);
         node->setDoubleValue("elevator-trim-tab-pos-norm",
                              net->elevator_trim_tab);
