Files
tech5/source/shared/idlib/csystems/cmdsystem.h
T
2026-08-08 19:30:03 -07:00

98 lines
3.9 KiB
C++

#pragma once
#include "autocomplete.h"
#include "../containers/list.h"
#include "../text/strstatic.h"
using cmdFunction_t = void (*)(const idCmdArgs& args);
using argCompletion_t = void (*)(idAutoComplete& completion);
class idCmdSystem {
public:
virtual ~idCmdSystem();
virtual void Init() = 0;
virtual void AddCommand(const char* name, cmdFunction_t function,
const char* description, argCompletion_t argCompletion = nullptr) = 0;
virtual const char* GetCommandDescription(const char* name) = 0;
virtual bool CommandExists(const char* name,
bool searchForCommandString) = 0;
virtual void FindCommands(const char* prefix, idList<idStr>& commands) = 0;
virtual void CommandCompletion(idAutoComplete& completion) = 0;
virtual void ExecuteCommandText(const char* text) = 0;
virtual void AppendCommandText(const char* text) = 0;
virtual void ExecuteCommandBuffer() = 0;
virtual void ArgCompletion_FolderExtension(idAutoComplete& completion,
const char* folder, const char* extension, bool stripFolder) = 0;
static void ArgCompletion_Boolean(idAutoComplete& completion);
static void ArgCompletion_ConfigName(idAutoComplete& completion);
static void ArgCompletion_DemoFile(idAutoComplete& completion);
static void ArgCompletion_EventName(idAutoComplete& completion);
static void ArgCompletion_FileName(idAutoComplete& completion);
static void ArgCompletion_ImageName(idAutoComplete& completion);
static void ArgCompletion_MapName(idAutoComplete& completion);
static void ArgCompletion_ModelName(idAutoComplete& completion);
static void ArgCompletion_PlayTestFile(idAutoComplete& completion);
static void ArgCompletion_RegressionTestName(idAutoComplete& completion);
static void ArgCompletion_SaveGame(idAutoComplete& completion);
static void ArgCompletion_TimeTrial(idAutoComplete& completion);
template<int minimum, int maximum>
static void ArgCompletion_Integer(idAutoComplete& completion);
template<const char** strings, int numStrings = -1>
static void ArgCompletion_String(idAutoComplete& completion);
};
struct commandDef_s {
commandDef_s* next;
const char* name;
cmdFunction_t function;
argCompletion_t argCompletion;
const char* description;
};
class idCmdSystemLocal : public idCmdSystem {
public:
idCmdSystemLocal();
~idCmdSystemLocal() override;
void Init() override;
void AddCommand(const char* name, cmdFunction_t function,
const char* description, argCompletion_t argCompletion) override;
const char* GetCommandDescription(const char* name) override;
bool CommandExists(const char* name,
bool searchForCommandString) override;
void FindCommands(const char* prefix, idList<idStr>& commands) override;
void CommandCompletion(idAutoComplete& completion) override;
void ExecuteCommandText(const char* text) override;
void AppendCommandText(const char* text) override;
void ExecuteCommandBuffer() override;
void ArgCompletion_FolderExtension(idAutoComplete& completion,
const char* folder, const char* extension, bool stripFolder) override;
void ExecuteTokenizedString(const idCmdArgs& args);
void InsertCommandText(const char* text);
commandDef_s* commands;
int wait;
idStrStatic<32768> textBuffer;
private:
static void Echo_f(const idCmdArgs& args);
static void Exec_f(const idCmdArgs& args);
static void List_f(const idCmdArgs& args);
static void Parse_f(const idCmdArgs& args);
static void Vstr_f(const idCmdArgs& args);
static void Wait_f(const idCmdArgs& args);
};
extern idCmdSystem* cmdSystem;
#if INTPTR_MAX == INT32_MAX
static_assert(sizeof(idCmdSystem) == 4, "Recovered idCmdSystem ABI changed");
static_assert(sizeof(commandDef_s) == 20, "Recovered commandDef_s ABI changed");
static_assert(sizeof(idCmdSystemLocal) == 32812,
"Recovered idCmdSystemLocal ABI changed");
#endif