Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Apr 5, 2008, 3:40:10 AM (16 years ago)
Author:
landauf
Message:
  • added exit command: quits orxonox (no, it's not a hidden segfault :D)
  • added exec command: executes files (that contain other commands)

funny: use the log function to write commands into orxonox.log and then use 'exec orxonox.log' - it works. I've even added a recursion-blocker to avoid an (almost) endless loop after logging 'exec orxonox.log' ;)

I'm currently thinking about more complex commands (what about delayed commands? or commands with returnvalue and a pipeline symbol?).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/core2/src/orxonox/core/CommandExecutor.cc

    r972 r993  
    4545    ConsoleCommandShortcutGeneric(keyword3, createExecutor((FunctorStatic*)0, "bind", AccessLevel::User));
    4646
     47    ConsoleCommandShortcutExtern(exec, AccessLevel::None);
     48
     49    void exec(const std::string& filename)
     50    {
     51        static std::set<std::string> executingFiles;
     52
     53        std::set<std::string>::const_iterator it = executingFiles.find(filename);
     54        if (it != executingFiles.end())
     55        {
     56            COUT(1) << "Error: Recurring exec command in \"" << filename << "\". Stopped execution." << std::endl;
     57            return;
     58        }
     59
     60        // Open the file
     61        std::ifstream file;
     62        file.open(filename.c_str(), std::fstream::in);
     63
     64        if (!file.is_open())
     65        {
     66            COUT(1) << "Error: Couldn't execute file \"" << filename << "\"." << std::endl;
     67            return;
     68        }
     69
     70        executingFiles.insert(filename);
     71
     72        // Iterate through the file and put the lines into the CommandExecutor
     73        char line[1024];
     74        while (file.good() && !file.eof())
     75        {
     76            file.getline(line, 1024);
     77            CommandExecutor::execute(line);
     78        }
     79
     80        executingFiles.erase(filename);
     81    }
     82
    4783
    4884    ///////////////////////
Note: See TracChangeset for help on using the changeset viewer.