MConsoleCmd.h
00001 #ifndef _MCONSOLECMD_H 00002 #define _MCONSOLECMD_H 00003 00004 #include <string> 00005 #include <list> 00006 #include <vector> 00007 #include <map> 00008 using namespace std; 00009 00010 #define MCONSOLE_TEXSIZE 4096 00011 #define MCONSOLE_NAMESIZE 256 00012 00013 #define ARGVNoMin (-1) 00014 #define ARGVNoMax (-1) 00015 00016 struct MConsoleArgvInfo 00017 { 00018 char *cargv[256]; 00019 int cargc; 00020 char argbuf[2048]; // 실제 argv 값이 들어가는 buf 00021 }; 00022 00023 class MConsoleCmd; 00024 class MConsoleCmdManager; 00025 00026 typedef void(MConsoleCmdProc)(const int argc, char **const argv); 00027 typedef map<string, MConsoleCmd*> MConsoleCmdMap; 00028 00029 class MConsoleCmdMap 00030 { 00031 private: 00032 char m_szName[MCONSOLE_NAMESIZE]; 00033 char m_szUsage[MCONSOLE_TEXSIZE]; 00034 char m_szHelp[MCONSOLE_TEXSIZE]; 00035 int m_nMinArgs; 00036 int m_nMaxArgs; 00037 MConsoleCmdProc* m_fnProc; 00038 protected: 00039 public: 00040 MConsoleCmd(const char* szName, int nMinArgs = ARGVNoMin, int nMaxArgs=ARGVNoMax, 00041 const char* szUsage=NULL, const char* szHelp=NULL); 00042 virtual ~MConsoleCmd() { } 00043 00044 void OnProc(const int argc, char **const argv); 00045 void SetProc(MConsoleCmdProc* fnProc) { m_fnProc = fnProc; } 00046 const char* GetName() { return m_szName; } 00047 const char* GetUsage() { return m_szUsage; } 00048 const char* GetHelp() { return m_szHelp; } 00049 int GetMinArgs() { return m_nMinArgs; } 00050 int GetMaxArgs() { return m_nMaxArgs; } 00051 }; 00052 00053 00054 class MConsoleCmdManager 00055 { 00056 private: 00057 MConsoleCmdMap m_CmdMap; 00058 bool MakeArgv(char* szLine, MConsoleArgvInfo* pAI); 00059 public: 00060 MConsoleCmdManager() { } 00061 virtual ~MConsoleCmdManager() { } 00062 00063 void AddCommand(const char* szName, MConsoleCmdProc* fnProc, 00064 int nMinArgs=ARGVNoMin, int nMaxArgs=ARGVNoMax, 00065 const char* szUsage=NULL, const char* szHelp=NULL); 00066 void DoCommand(char* szLine); 00067 MConsoleCmd* GetCommandByName(const char* szName); 00068 }; 00069 #endif
MAIET entertainment