DDraceNetwork Documentation
Loading...
Searching...
No Matches
console.h
Go to the documentation of this file.
1/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
2/* If you are missing that file, acquire a complete release at teeworlds.com. */
3#ifndef ENGINE_SHARED_CONSOLE_H
4#define ENGINE_SHARED_CONSOLE_H
5
6#include "memheap.h"
7
8#include <engine/console.h>
9#include <engine/storage.h>
10
11#include <optional>
12#include <vector>
13
14class CConsole : public IConsole
15{
16 class CCommand : public ICommandInfo
17 {
20
21 public:
22 const char *m_pName;
23 const char *m_pHelp;
24 const char *m_pParams;
25
26 const CCommand *Next() const { return m_pNext; }
27 CCommand *Next() { return m_pNext; }
28 void SetNext(CCommand *pNext) { m_pNext = pNext; }
30 bool m_Temp;
33
34 const char *Name() const override { return m_pName; }
35 const char *Help() const override { return m_pHelp; }
36 const char *Params() const override { return m_pParams; }
37 int Flags() const override { return m_Flags; }
38 EAccessLevel GetAccessLevel() const override { return m_AccessLevel; }
39 void SetAccessLevel(EAccessLevel AccessLevel);
40 };
41
50
53 const char *m_apStrokeStr[2];
55
57 {
58 public:
59 const char *m_pFilename;
61 };
62
65
68
69 static void TraverseChain(FCommandCallback *ppfnCallback, void **ppUserData);
70
71 static void Con_Chain(IResult *pResult, void *pUserData);
72 static void Con_Echo(IResult *pResult, void *pUserData);
73 static void Con_Exec(IResult *pResult, void *pUserData);
74 static void ConCommandAccess(IResult *pResult, void *pUser);
75 static void ConCommandStatus(IConsole::IResult *pResult, void *pUser);
76
77 void ExecuteLineStroked(int Stroke, const char *pStr, int ClientId = IConsole::CLIENT_ID_UNSPECIFIED, bool InterpretSemicolons = true) override;
78
81
84
87
88 bool CanUseCommand(int ClientId, const IConsole::ICommandInfo *pCommand) const;
89
90 enum
91 {
94 };
95
96 class CResult : public IResult
97 {
98 public:
101
102 const char *m_pCommand;
103 const char *m_apArgs[MAX_PARTS];
104
105 CResult(int ClientId);
106 CResult(const CResult &Other);
107
108 void AddArgument(const char *pArg);
109 void RemoveArgument(unsigned Index) override;
110
111 const char *GetString(unsigned Index) const override;
112 int GetInteger(unsigned Index) const override;
113 float GetFloat(unsigned Index) const override;
114 ColorHSLA GetColor(unsigned Index, float DarkestLighting) const override;
115
116 // DDRace
117
118 enum
119 {
123 };
124
126 void ResetVictim();
127 bool HasVictim() const;
128 void SetVictim(int Victim);
129 void SetVictim(const char *pVictim);
130 int GetVictim() const override;
131 };
132
133 int ParseStart(CResult *pResult, const char *pString, int Length);
134
135 enum
136 {
142 };
143
144 int ParseArgs(CResult *pResult, const char *pFormat);
145
146 /*
147 this function will set pFormat to the next parameter (i,s,r,v,?) it contains and
148 return the parameter; descriptions in brackets like [file] will be skipped;
149 returns '\0' if there is no next parameter; expects pFormat to point at a
150 parameter
151 */
152 char NextParam(const char *&pFormat);
153
155 {
156 public:
159 CExecutionQueueEntry(CCommand *pCommand, const CResult &Result) :
160 m_pCommand(pCommand),
161 m_Result(Result) {}
162 };
163 std::vector<CExecutionQueueEntry> m_vExecutionQueue;
164
165 void AddCommandSorted(CCommand *pCommand);
166 CCommand *FindCommand(const char *pName, int FlagMask);
167
169
170public:
171 CConsole(int FlagMask);
172 ~CConsole() override;
173
174 void Init() override;
175 const ICommandInfo *FirstCommandInfo(int ClientId, int FlagMask) const override;
176 const ICommandInfo *NextCommandInfo(const IConsole::ICommandInfo *pInfo, int ClientId, int FlagMask) const override;
177 const ICommandInfo *GetCommandInfo(const char *pName, int FlagMask, bool Temp) override;
178 int PossibleCommands(const char *pStr, int FlagMask, bool Temp, FPossibleCallback pfnCallback, void *pUser) override;
179
180 void ParseArguments(int NumArgs, const char **ppArguments) override;
181 void Register(const char *pName, const char *pParams, int Flags, FCommandCallback pfnFunc, void *pUser, const char *pHelp) override;
182 void RegisterTemp(const char *pName, const char *pParams, int Flags, const char *pHelp) override;
183 void DeregisterTemp(const char *pName) override;
184 void DeregisterTempAll() override;
185 void Chain(const char *pName, FChainCommandCallback pfnChainFunc, void *pUser) override;
186 void StoreCommands(bool Store) override;
187
188 bool LineIsValid(const char *pStr) override;
189 void ExecuteLine(const char *pStr, int ClientId = IConsole::CLIENT_ID_UNSPECIFIED, bool InterpretSemicolons = true) override;
190 void ExecuteLineFlag(const char *pStr, int FlagMask, int ClientId = IConsole::CLIENT_ID_UNSPECIFIED, bool InterpretSemicolons = true) override;
191 bool ExecuteFile(const char *pFilename, int ClientId = IConsole::CLIENT_ID_UNSPECIFIED, bool LogFailure = false, int StorageType = IStorage::TYPE_ALL) override;
192
193 void Print(int Level, const char *pFrom, const char *pStr, ColorRGBA PrintColor = gs_ConsoleDefaultColor) const override;
194 void SetTeeHistorianCommandCallback(FTeeHistorianCommandCallback pfnCallback, void *pUser) override;
195 void SetUnknownCommandCallback(FUnknownCommandCallback pfnCallback, void *pUser) override;
196 void SetCanUseCommandCallback(FCanUseCommandCallback pfnCallback, void *pUser) override;
197 void InitChecksum(CChecksumData *pData) const override;
198
205 static std::optional<EAccessLevel> AccessLevelToEnum(const char *pAccessLevel);
206
213 static const char *AccessLevelToString(EAccessLevel AccessLevel);
214
215 static std::optional<ColorHSLA> ColorParse(const char *pStr, float DarkestLighting);
216
217 // DDRace
218
219 static void ConUserCommandStatus(IConsole::IResult *pResult, void *pUser);
220
221 bool Cheated() const override { return m_Cheated; }
222
223 int FlagMask() const override { return m_FlagMask; }
224 void SetFlagMask(int FlagMask) override { m_FlagMask = FlagMask; }
225};
226
227#endif
Definition console.h:43
FCommandCallback m_pfnCallback
Definition console.h:46
void * m_pUserData
Definition console.h:48
void * m_pCallbackUserData
Definition console.h:47
FChainCommandCallback m_pfnChainCallback
Definition console.h:45
Definition console.h:17
EAccessLevel GetAccessLevel() const override
Definition console.h:38
CCommand * Next()
Definition console.h:27
CCommand * m_pNext
Definition console.h:19
int Flags() const override
Definition console.h:37
const char * m_pName
Definition console.h:22
void * m_pUserData
Definition console.h:32
void SetNext(CCommand *pNext)
Definition console.h:28
const char * Name() const override
Definition console.h:34
bool m_Temp
Definition console.h:30
const char * Help() const override
Definition console.h:35
FCommandCallback m_pfnCallback
Definition console.h:31
const CCommand * Next() const
Definition console.h:26
void SetAccessLevel(EAccessLevel AccessLevel)
Definition console.cpp:88
const char * Params() const override
Definition console.h:36
const char * m_pParams
Definition console.h:24
const char * m_pHelp
Definition console.h:23
EAccessLevel m_AccessLevel
Definition console.h:18
int m_Flags
Definition console.h:29
Definition console.h:57
CExecFile * m_pPrev
Definition console.h:60
const char * m_pFilename
Definition console.h:59
CCommand * m_pCommand
Definition console.h:157
CExecutionQueueEntry(CCommand *pCommand, const CResult &Result)
Definition console.h:159
CResult m_Result
Definition console.h:158
Definition console.h:97
float GetFloat(unsigned Index) const override
Definition console.cpp:73
const char * m_apArgs[MAX_PARTS]
Definition console.h:103
void AddArgument(const char *pArg)
Definition console.cpp:44
void RemoveArgument(unsigned Index) override
Definition console.cpp:49
@ VICTIM_ALL
Definition console.h:122
@ VICTIM_ME
Definition console.h:121
@ VICTIM_NONE
Definition console.h:120
CResult(int ClientId)
Definition console.cpp:25
void SetVictim(int Victim)
Definition console.cpp:1130
char m_aStringStorage[CONSOLE_MAX_STR_LENGTH+1]
Definition console.h:99
int m_Victim
Definition console.h:125
char * m_pArgsStart
Definition console.h:100
bool HasVictim() const
Definition console.cpp:1125
void ResetVictim()
Definition console.cpp:1120
int GetVictim() const override
Definition console.cpp:1115
const char * m_pCommand
Definition console.h:102
ColorHSLA GetColor(unsigned Index, float DarkestLighting) const override
Definition console.cpp:81
int GetInteger(unsigned Index) const override
Definition console.cpp:65
const char * GetString(unsigned Index) const override
Definition console.cpp:58
const ICommandInfo * NextCommandInfo(const IConsole::ICommandInfo *pInfo, int ClientId, int FlagMask) const override
Definition console.cpp:104
static void ConUserCommandStatus(IConsole::IResult *pResult, void *pUser)
Definition console.cpp:814
void ParseArguments(int NumArgs, const char **ppArguments) override
Definition console.cpp:892
void SetFlagMask(int FlagMask) override
Definition console.h:224
void DeregisterTempAll() override
Definition console.cpp:1033
static std::optional< EAccessLevel > AccessLevelToEnum(const char *pAccessLevel)
Definition console.cpp:116
@ PARSEARGS_INVALID_INTEGER
Definition console.h:139
@ PARSEARGS_OK
Definition console.h:137
@ PARSEARGS_INVALID_COLOR
Definition console.h:140
@ PARSEARGS_INVALID_FLOAT
Definition console.h:141
@ PARSEARGS_MISSING_VALUE
Definition console.h:138
bool m_Cheated
Definition console.h:168
static void Con_Echo(IResult *pResult, void *pUserData)
Definition console.cpp:728
FCanUseCommandCallback m_pfnCanUseCommandCallback
Definition console.h:85
FTeeHistorianCommandCallback m_pfnTeeHistorianCommandCallback
Definition console.h:79
void StoreCommands(bool Store) override
Definition console.cpp:1086
@ MAX_PARTS
Definition console.h:93
@ CONSOLE_MAX_STR_LENGTH
Definition console.h:92
bool Cheated() const override
Definition console.h:221
bool m_StoreCommands
Definition console.h:52
void Init() override
Definition console.cpp:887
void SetUnknownCommandCallback(FUnknownCommandCallback pfnCallback, void *pUser) override
Definition console.cpp:382
void Register(const char *pName, const char *pParams, int Flags, FCommandCallback pfnFunc, void *pUser, const char *pHelp) override
Definition console.cpp:940
void AddCommandSorted(CCommand *pCommand)
Definition console.cpp:916
CCommand * m_pFirstCommand
Definition console.h:54
~CConsole() override
Definition console.cpp:862
void * m_pUnknownCommandUserdata
Definition console.h:83
CConsole(int FlagMask)
Definition console.cpp:834
static void TraverseChain(FCommandCallback *ppfnCallback, void **ppUserData)
Definition console.cpp:824
const ICommandInfo * FirstCommandInfo(int ClientId, int FlagMask) const override
Definition console.cpp:93
int m_FlagMask
Definition console.h:51
int ParseStart(CResult *pResult, const char *pString, int Length)
Definition console.cpp:158
const char * m_apStrokeStr[2]
Definition console.h:53
static const char * AccessLevelToString(EAccessLevel AccessLevel)
Definition console.cpp:140
FUnknownCommandCallback m_pfnUnknownCommandCallback
Definition console.h:82
void DeregisterTemp(const char *pName) override
Definition console.cpp:1001
void * m_pTeeHistorianCommandUserdata
Definition console.h:80
int ParseArgs(CResult *pResult, const char *pFormat)
Definition console.cpp:183
bool CanUseCommand(int ClientId, const IConsole::ICommandInfo *pCommand) const
Definition console.cpp:628
int FlagMask() const override
Definition console.h:223
void RegisterTemp(const char *pName, const char *pParams, int Flags, const char *pHelp) override
Definition console.cpp:967
CExecFile * m_pFirstExec
Definition console.h:63
static void ConCommandAccess(IResult *pResult, void *pUser)
Definition console.cpp:738
void SetCanUseCommandCallback(FCanUseCommandCallback pfnCallback, void *pUser) override
Definition console.cpp:388
void ExecuteLineStroked(int Stroke, const char *pStr, int ClientId=IConsole::CLIENT_ID_UNSPECIFIED, bool InterpretSemicolons=true) override
Definition console.cpp:460
void Chain(const char *pName, FChainCommandCallback pfnChainFunc, void *pUser) override
Definition console.cpp:1061
void * m_pCanUseCommandUserData
Definition console.h:86
CCommand * FindCommand(const char *pName, int FlagMask)
Definition console.cpp:653
const ICommandInfo * GetCommandInfo(const char *pName, int FlagMask, bool Temp) override
Definition console.cpp:1099
bool LineIsValid(const char *pStr) override
Definition console.cpp:412
void InitChecksum(CChecksumData *pData) const override
Definition console.cpp:394
char NextParam(const char *&pFormat)
Definition console.cpp:304
static void Con_Exec(IResult *pResult, void *pUserData)
Definition console.cpp:733
bool ExecuteFile(const char *pFilename, int ClientId=IConsole::CLIENT_ID_UNSPECIFIED, bool LogFailure=false, int StorageType=IStorage::TYPE_ALL) override
Definition console.cpp:681
void ExecuteLineFlag(const char *pStr, int FlagMask, int ClientId=IConsole::CLIENT_ID_UNSPECIFIED, bool InterpretSemicolons=true) override
Definition console.cpp:673
CCommand * m_pRecycleList
Definition console.h:66
int PossibleCommands(const char *pStr, int FlagMask, bool Temp, FPossibleCallback pfnCallback, void *pUser) override
Definition console.cpp:636
void ExecuteLine(const char *pStr, int ClientId=IConsole::CLIENT_ID_UNSPECIFIED, bool InterpretSemicolons=true) override
Definition console.cpp:667
static std::optional< ColorHSLA > ColorParse(const char *pStr, float DarkestLighting)
Definition console.cpp:1145
IStorage * m_pStorage
Definition console.h:64
void SetTeeHistorianCommandCallback(FTeeHistorianCommandCallback pfnCallback, void *pUser) override
Definition console.cpp:376
static void ConCommandStatus(IConsole::IResult *pResult, void *pUser)
Definition console.cpp:775
void Print(int Level, const char *pFrom, const char *pStr, ColorRGBA PrintColor=gs_ConsoleDefaultColor) const override
Definition console.cpp:362
static void Con_Chain(IResult *pResult, void *pUserData)
Definition console.cpp:1055
CHeap m_TempCommands
Definition console.h:67
std::vector< CExecutionQueueEntry > m_vExecutionQueue
Definition console.h:163
Definition memheap.h:11
Definition color.h:145
Definition color.h:182
Definition console.h:90
Definition console.h:64
IResult(int ClientId)
Definition console.h:69
Definition console.h:20
static bool EmptyUnknownCommandCallback(const char *pCommand, void *pUser)
Definition console.h:108
@ CLIENT_ID_UNSPECIFIED
Definition console.h:47
EAccessLevel
Definition console.h:55
bool(* FUnknownCommandCallback)(const char *pCommand, void *pUser)
Definition console.h:104
void(* FChainCommandCallback)(IResult *pResult, void *pUserData, FCommandCallback pfnCallback, void *pCallbackUserData)
Definition console.h:103
bool(* FCanUseCommandCallback)(int ClientId, const ICommandInfo *pCommand, void *pUser)
Definition console.h:105
void(* FPossibleCallback)(int Index, const char *pCmd, void *pUser)
Definition console.h:101
void(* FCommandCallback)(IResult *pResult, void *pUserData)
Definition console.h:102
void(* FTeeHistorianCommandCallback)(int ClientId, int FlagMask, const char *pCmd, IResult *pResult, void *pUser)
Definition console.h:100
Definition storage.h:21
@ TYPE_ALL
Definition storage.h:27
static constexpr ColorRGBA gs_ConsoleDefaultColor(1, 1, 1, 1)
Definition checksum.h:7