Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Apr 5, 2008, 3:40:10 AM (17 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?).

Location:
code/branches/core2/src/orxonox/core
Files:
4 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    ///////////////////////
  • code/branches/core2/src/orxonox/core/CommandExecutor.h

    r972 r993  
    6060        CS_Error
    6161    };
     62
     63    void exec(const std::string& filename);
    6264
    6365    enum KeybindMode {}; // temporary
  • code/branches/core2/src/orxonox/core/ConsoleCommand.h

    r949 r993  
    4343
    4444
    45 #define ConsoleCommandShortcut(function, accesslevel) \
     45#define ConsoleCommandShortcut(classname, function, accesslevel) \
    4646    ConsoleCommandShortcutGeneric(function##consolecommand__, orxonox::createExecutor(orxonox::createFunctor(&classname::function), #function, accesslevel))
     47
     48#define ConsoleCommandShortcutExtern(function, accesslevel) \
     49    ConsoleCommandShortcutGeneric(function##consolecommand__, orxonox::createExecutor(orxonox::createFunctor(&function), #function, accesslevel))
    4750
    4851#define ConsoleCommandShortcutGeneric(fakevariable, executor) \
  • code/branches/core2/src/orxonox/core/CorePrereqs.h

    r952 r993  
    9393  class CommandEvaluation;
    9494  class CommandExecutor;
     95  class ConfigFile;
     96  class ConfigFileEntry;
     97  class ConfigFileEntryComment;
     98  class ConfigFileEntryValue;
     99  class ConfigFileManager;
     100  class ConfigFileSection;
    95101  class ConfigValueContainer;
    96102  class DebugLevel;
Note: See TracChangeset for help on using the changeset viewer.