]> git.mxchange.org Git - flightgear.git/blobdiff - src/Network/props.cxx
MIPSpro 7.4 fixes
[flightgear.git] / src / Network / props.cxx
index 51b293177a83f5fafa938f6081715f28e208a1f6..b0526c8ab254a9ec179b2e5cc3446530105e4916 100644 (file)
@@ -29,7 +29,7 @@
 
 #include <simgear/compiler.h>
 #include <simgear/debug/logstream.hxx>
-#include <simgear/misc/commands.hxx>
+#include <simgear/structure/commands.hxx>
 #include <simgear/misc/strutils.hxx>
 #include <simgear/props/props.hxx>
 #include <simgear/props/props_io.hxx>
 
 #include "props.hxx"
 
-#if !defined(SG_HAVE_NATIVE_SGI_COMPILERS)
 SG_USING_STD(strstream);
 SG_USING_STD(ends);
-#endif
 
 /**
  * Props connection class.
@@ -119,7 +117,7 @@ PropsChannel::collectIncomingData( const char* s, int n )
 void
 PropsChannel::node_not_found_error( const string& node_name )
 {
-    string error = "ERR Node \"";
+    string error = "-ERR Node \"";
     error += node_name;
     error += "\" not found.";
     push( error.c_str() );
@@ -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" )
-       {
+       } else if ( command == "dump" ) {
            strstream buf;
-           if ( tokens.size() <= 1 )
-           {
+           if ( tokens.size() <= 1 ) {
                writeProperties( buf, node );
                buf << ends; // null terminate the string
                push( buf.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( 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,68 @@ 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-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 += "<completed>";
+                        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 +400,9 @@ show <var>         synonym for get\r\n";
     }
 
  prompt:
-    if (mode == PROMPT)
-    {
+    if (mode == PROMPT) {
        string prompt = node->getPath();
-       if (prompt.empty())
-       {
+       if (prompt.empty()) {
            prompt = "/";
        }
        prompt += "> ";