1 /* 2 * Copyright 2007, Ingo Weinhold, bonefish@cs.tu-berlin.de. 3 * Distributed under the terms of the MIT License. 4 */ 5 #ifndef _FSSH_FSSH_H 6 #define _FSSH_FSSH_H 7 8 9 #include "compatibility.h" 10 11 #include <map> 12 #include <string> 13 14 #include "fssh_defs.h" 15 16 17 typedef fssh_status_t command_function(int argc, const char* const* argv); 18 19 20 namespace FSShell { 21 22 23 enum { 24 COMMAND_RESULT_EXIT = 1, 25 }; 26 27 28 // Command 29 class Command { 30 public: 31 Command(const char* name, 32 const char* description); 33 Command(command_function* function, 34 const char* name, const char* description); 35 virtual ~Command(); 36 37 const char* Name() const; 38 const char* Description() const; 39 40 virtual fssh_status_t Do(int argc, const char* const* argv); 41 42 private: 43 std::string fName; 44 std::string fDescription; 45 command_function* fFunction; 46 }; 47 48 49 // CommandManager 50 class CommandManager { 51 private: 52 CommandManager(); 53 54 public: 55 static CommandManager* Default(); 56 57 void AddCommand(Command* command); 58 void AddCommand(command_function* function, 59 const char* name, const char* description); 60 void AddCommands(command_function* function, 61 const char* name, const char* description, 62 ...); 63 Command* FindCommand(const char* name) const; 64 void ListCommands() const; 65 66 private: 67 typedef std::map<std::string, Command*> CommandMap; 68 69 CommandMap fCommands; 70 71 static CommandManager* sManager; 72 }; 73 74 75 extern void register_additional_commands(void); 76 77 78 } // namespace FSShell 79 80 81 #endif // _FSSH_FSSH_H 82