xref: /haiku/src/tools/fs_shell/fssh.h (revision 71452e98334eaac603bf542d159e24788a46bebb)
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