X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FNetwork%2Fprops.cxx;h=3504f99c8c75115730f0a0584e6e49310d05a8f4;hb=0aabc112b4f586f94365ccf1e906d6e4fb78dc10;hp=dc6086a9324c6c7d73278494adc1246852516968;hpb=b666d71d89cd04a8e63e609f6840bfbd78b9760a;p=flightgear.git diff --git a/src/Network/props.cxx b/src/Network/props.cxx index dc6086a93..3504f99c8 100644 --- a/src/Network/props.cxx +++ b/src/Network/props.cxx @@ -29,12 +29,12 @@ #include #include -#include +#include #include #include #include -#include STL_STRSTREAM +#include #include
#include
@@ -43,10 +43,8 @@ #include "props.hxx" -#if !defined(SG_HAVE_NATIVE_SGI_COMPILERS) -SG_USING_STD(strstream); +SG_USING_STD(stringstream); SG_USING_STD(ends); -#endif /** * Props connection class. @@ -173,47 +171,35 @@ PropsChannel::foundTerminator() SGPropertyNode* node = globals->get_props()->getNode( path.c_str() ); - if (!tokens.empty()) - { + if (!tokens.empty()) { string command = tokens[0]; - if (command == "ls") - { + if (command == "ls") { SGPropertyNode* dir = node; - if (tokens.size() == 2) - { - if (tokens[1][0] == '/') - { + if (tokens.size() == 2) { + if (tokens[1][0] == '/') { dir = globals->get_props()->getNode( tokens[1].c_str() ); - } - else - { + } else { string s = path; s += "/"; s += tokens[1]; dir = globals->get_props()->getNode( s.c_str() ); } - if (dir == 0) - { + if (dir == 0) { node_not_found_error( tokens[1] ); goto prompt; } } - for (int i = 0; i < dir->nChildren(); i++) - { + for (int i = 0; i < dir->nChildren(); i++) { SGPropertyNode * child = dir->getChild(i); string line = child->getDisplayName(true); - if ( child->nChildren() > 0 ) - { + if ( child->nChildren() > 0 ) { line += "/"; - } - else - { - if (mode == PROMPT) - { + } else { + if (mode == PROMPT) { string value = child->getStringValue(); line += " =\t'" + value + "'\t("; line += getValueTypeString( child ); @@ -224,75 +210,52 @@ PropsChannel::foundTerminator() line += getTerminator(); push( line.c_str() ); } - } - else if ( command == "dump" ) - { - strstream buf; - if ( tokens.size() <= 1 ) - { + } else if ( command == "dump" ) { + stringstream buf; + if ( tokens.size() <= 1 ) { writeProperties( buf, node ); buf << ends; // null terminate the string - push( buf.str() ); + push( buf.str().c_str() ); push( getTerminator() ); - } - else - { + } else { SGPropertyNode *child = node->getNode( tokens[1].c_str() ); - if ( child ) - { + if ( child ) { writeProperties ( buf, child ); buf << ends; // null terminate the string - push( buf.str() ); + push( buf.str().c_str() ); push( getTerminator() ); - } - else - { + } else { node_not_found_error( tokens[1] ); } } } - else if ( command == "cd" ) - { - if (tokens.size() == 2) - { - try - { + else if ( command == "cd" ) { + if (tokens.size() == 2) { + try { SGPropertyNode* child = node->getNode( tokens[1].c_str() ); - if ( child ) - { + if ( child ) { node = child; path = node->getPath(); - } - else - { + } else { node_not_found_error( tokens[1] ); } - } - catch (...) - { + } catch (...) { // Ignore attempt to move past root node with ".." } } - } - else if ( command == "pwd" ) - { + } else if ( command == "pwd" ) { string ttt = node->getPath(); - if (ttt.empty()) - { + if (ttt.empty()) { ttt = "/"; } push( ttt.c_str() ); push( getTerminator() ); - } - else if ( command == "get" || command == "show" ) - { - if ( tokens.size() == 2 ) - { + } else if ( command == "get" || command == "show" ) { + if ( tokens.size() == 2 ) { string tmp; string value = node->getStringValue ( tokens[1].c_str(), "" ); - if ( mode == PROMPT ) - { + if ( mode == PROMPT ) { tmp = tokens[1]; tmp += " = '"; tmp += value; @@ -300,19 +263,14 @@ PropsChannel::foundTerminator() tmp += getValueTypeString( node->getNode( tokens[1].c_str() ) ); tmp += ")"; - } - else - { + } else { tmp = value; } push( tmp.c_str() ); push( getTerminator() ); } - } - else if ( command == "set" ) - { - if ( tokens.size() >= 2 ) - { + } else if ( command == "set" ) { + if ( tokens.size() >= 2 ) { string value, tmp; if ( tokens.size() == 3 ) { value = tokens[2]; @@ -322,8 +280,7 @@ PropsChannel::foundTerminator() node->getNode( tokens[1].c_str(), true ) ->setStringValue(value.c_str()); - if ( mode == PROMPT ) - { + if ( mode == PROMPT ) { // now fetch and write out the new value as confirmation // of the change value = node->getStringValue ( tokens[1].c_str(), "" ); @@ -334,15 +291,17 @@ PropsChannel::foundTerminator() push( getTerminator() ); } } - } - else if ( command == "run" ) - { - if ( tokens.size() == 2 ) - { + } else if ( command == "reinit" ) { + if ( tokens.size() == 2 ) { string tmp; SGPropertyNode args; + for ( unsigned int i = 1; i < tokens.size(); ++i ) { + cout << "props: adding subsystem = " << tokens[i] << endl; + SGPropertyNode *node = args.getNode("subsystem", i-1, true); + node->setStringValue( tokens[i].c_str() ); + } if ( !globals->get_commands() - ->execute(tokens[1].c_str(), &args) ) + ->execute( "reinit", &args) ) { SG_LOG( SG_GENERAL, SG_ALERT, "Command " << tokens[1] << " failed."); @@ -359,23 +318,76 @@ PropsChannel::foundTerminator() } } } - } - else if (command == "quit") - { + } else if ( command == "run" ) { + string tmp; + if ( tokens.size() >= 2 ) { + SGPropertyNode args; + if ( tokens[1] == "reinit" ) { + for ( unsigned int i = 2; i < tokens.size(); ++i ) { + cout << "props: adding subsystem = " << tokens[i] + << endl; + SGPropertyNode *node + = args.getNode("subsystem", i-2, true); + node->setStringValue( tokens[i].c_str() ); + } + } else if ( tokens[1] == "set-sea-level-air-temp-degc" ) { + for ( unsigned int i = 2; i < tokens.size(); ++i ) { + cout << "props: set-sl command = " << tokens[i] + << endl; + SGPropertyNode *node + = args.getNode("temp-degc", i-2, true); + node->setStringValue( tokens[i].c_str() ); + } + } else if ( tokens[1] == "set-outside-air-temp-degc" ) { + for ( unsigned int i = 2; i < tokens.size(); ++i ) { + cout << "props: set-oat command = " << tokens[i] + << endl; + SGPropertyNode *node + = args.getNode("temp-degc", i-2, true); + node->setStringValue( tokens[i].c_str() ); + } + } else if ( tokens[1] == "timeofday" ) { + for ( unsigned int i = 2; i < tokens.size(); ++i ) { + cout << "props: time of day command = " << tokens[i] + << endl; + SGPropertyNode *node + = args.getNode("timeofday", i-2, true); + node->setStringValue( tokens[i].c_str() ); + } + } + if ( !globals->get_commands() + ->execute(tokens[1].c_str(), &args) ) + { + SG_LOG( SG_GENERAL, SG_ALERT, + "Command " << tokens[1] << " failed."); + if ( mode == PROMPT ) { + tmp += "*failed*"; + push( tmp.c_str() ); + push( getTerminator() ); + } + } else { + if ( mode == PROMPT ) { + tmp += ""; + push( tmp.c_str() ); + push( getTerminator() ); + } + } + } else { + if ( mode == PROMPT ) { + tmp += "no command specified"; + push( tmp.c_str() ); + push( getTerminator() ); + } + } + } else if (command == "quit") { close(); shouldDelete(); return; - } - else if ( command == "data" ) - { + } else if ( command == "data" ) { mode = DATA; - } - else if ( command == "prompt" ) - { + } else if ( command == "prompt" ) { mode = PROMPT; - } - else - { + } else { const char* msg = "\ Valid commands are:\r\n\ \r\n\ @@ -396,11 +408,9 @@ show synonym for get\r\n"; } prompt: - if (mode == PROMPT) - { + if (mode == PROMPT) { string prompt = node->getPath(); - if (prompt.empty()) - { + if (prompt.empty()) { prompt = "/"; } prompt += "> "; @@ -474,6 +484,7 @@ FGProps::open() bool FGProps::close() { + SG_LOG( SG_IO, SG_INFO, "closing FGProps" ); return true; }