X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FMain%2Ffg_io.cxx;h=36ca64433d3f6dc923acdfcdaa59374ea88856d7;hb=f467ba360902e4395d23b35481c55844a3946b91;hp=827993b0c86412adc2377f8efa3565ac69a418ff;hpb=6773bf9571d715e20aa1725e3cec3b02726300c5;p=flightgear.git diff --git a/src/Main/fg_io.cxx b/src/Main/fg_io.cxx index 827993b0c..36ca64433 100644 --- a/src/Main/fg_io.cxx +++ b/src/Main/fg_io.cxx @@ -16,16 +16,19 @@ // // 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. +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // // $Id$ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif #include -#include // atoi() +#include // atoi() -#include STL_STRING +#include #include #include @@ -40,6 +43,8 @@ #include #include #include +#include +#include #include #include #ifdef FG_JPEG_SERVER @@ -58,23 +63,21 @@ #include #include #include - -#ifdef FG_MPLAYER_AS #include -#endif #include "globals.hxx" #include "fg_io.hxx" -SG_USING_STD(string); +using std::atoi; +using std::string; FGIO::FGIO() { } -#include STL_ALGORITHM -SG_USING_STD(for_each); +#include +using std::for_each; static void delete_ptr( FGProtocol* p ) { delete p; } @@ -113,6 +116,7 @@ FGIO::parse_port_config( const string& config ) SG_LOG( SG_IO, SG_ALERT, "Usage: --atcsim=[no-]pedals," << "input0_config,input1_config," << "output0_config,output1_config,file.nas" ); + delete atcsim; return NULL; } if ( tokens[1] == "no-pedals" ) { @@ -130,6 +134,12 @@ FGIO::parse_port_config( const string& config ) // printf("Parsed opengc\n"); cin >> wait; FGOpenGC *opengc = new FGOpenGC; io = opengc; + } else if ( protocol == "AV400" ) { + FGAV400 *av400 = new FGAV400; + io = av400; + } else if ( protocol == "AV400Sim" ) { + FGAV400Sim *av400sim = new FGAV400Sim; + io = av400sim; } else if ( protocol == "garmin" ) { FGGarmin *garmin = new FGGarmin; io = garmin; @@ -177,22 +187,33 @@ FGIO::parse_port_config( const string& config ) FGRUL *rul = new FGRUL; io = rul; } else if ( protocol == "generic" ) { - int n = 6; - if (tokens[1] == "socket") n++; - else if (tokens[1] == "file") n--; - FGGeneric *generic = new FGGeneric( tokens[n] ); - io = generic; + size_t configToken; + if (tokens[1] == "socket") { + configToken = 7; + } else if (tokens[1] == "file") { + configToken = 5; + } else { + configToken = 6; + } -#ifdef FG_MPLAYER_AS - } else if ( protocol == "multiplay" ) {\ - //Determine dir, rate, host & port + if (configToken >= tokens.size()) { + SG_LOG( SG_IO, SG_ALERT, "Not enough tokens passed for the generic protocol."); + return NULL; + } + + FGGeneric *generic = new FGGeneric( tokens ); + io = generic; + } else if ( protocol == "multiplay" ) { + if ( tokens.size() != 5 ) { + SG_LOG( SG_IO, SG_ALERT, "Ignoring invalid --multiplay option " + "(4 arguments expected: --multiplay=dir,hz,hostname,port)" ); + return NULL; + } string dir = tokens[1]; string rate = tokens[2]; string host = tokens[3]; string port = tokens[4]; return new FGMultiplay(dir, atoi(rate.c_str()), host, atoi(port.c_str())); -#endif - } else { return NULL; } @@ -233,6 +254,7 @@ FGIO::parse_port_config( const string& config ) string baud = tokens[5]; SG_LOG( SG_IO, SG_INFO, " baud = " << baud ); + SGSerial *ch = new SGSerial( device, baud ); io->set_io_channel( ch ); } else if ( medium == "file" ) { @@ -244,8 +266,18 @@ FGIO::parse_port_config( const string& config ) string file = tokens[4]; SG_LOG( SG_IO, SG_INFO, " file name = " << file ); - - SGFile *ch = new SGFile( file ); + int repeat = 1; + if (tokens.size() >= 7 && tokens[6] == "repeat") { + if (tokens.size() >= 8) { + repeat = atoi(tokens[7].c_str()); + FGGeneric* generic = dynamic_cast(io); + if (generic) + generic->setExitOnError(true); + } else { + repeat = -1; + } + } + SGFile *ch = new SGFile( file, repeat ); io->set_io_channel( ch ); } else if ( medium == "socket" ) { if ( tokens.size() < 6) { @@ -302,6 +334,11 @@ FGIO::init() } } +void +FGIO::reinit() +{ +} + // process any IO channel work void