CSCommon: MConsoleCmd.h 소스 파일

MAIET

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