94 lines · 3.2 KB · C
RawDownload
#pragma once// Command buffer and command execution /* * Any number of commands can be added in a frame, from several different sources. * Most commands come from either keybindings or console line input, but remote * servers can also send across commands and entire text files can be execed. * * The + command line options are also added to the command buffer. * * The game starts with a Cbuf_AddText("exec quake.rc\n"); Cbuf_Execute(); */ /* * Command execution takes a null terminated string, breaks it into tokens, * then searches for a command or variable that matches the first token. * * Commands can come from three sources, but the handler functions may choose * to dissallow the action or forward it to a remote server if the source is * not apropriate. */ typedef struct cmd_t cmd_t; typedef void (*cmdfun_t)(cmd_t *cmd); struct cmd_t {	char *name;	char *_dummy;	bool _dummy2;	bool hidden;	cmdfun_t f;	char *alias;}; #define iscmd(p) (((cmd_t *)(p))->_dummy == nil)#define ishidden(p) \	(((cmd_t *)(p))->hidden) // both cmds and cvars have the same first three fields typedef enum {	src_client, // came in over a net connection as a clc_stringcmd				// host_client will be valid during this state.	src_command, // from the command buffer} cmd_source_t; extern cmd_source_t cmd_source; void Cmd_Init(void); // called by the init functions of other parts of the program to// register commands and functions to call for them.// The cmd_name is referenced later, so it should not be in temp memorycmd_t *Cmd_AddCommand(char *cmd_name, cmdfun_t f); // used by the cvar code to check for cvar / command name overlapbool Cmd_Exists(char *cmd_name); // attempts to match a partial command for automatic command line completion// returns NULL if nothing fitschar *Cmd_CompleteCommand(char *partial); // The functions that execute commands get their parameters with these// functions. Cmd_Argv () will return an empty string, not a NULL// if arg > argc, so string operations are always safe.int Cmd_Argc(void);const char *Cmd_Argv(int arg);const char *Cmd_Args(void); // Parses a single line of text into arguments and tries to execute it.// The text can come from the command buffer, a remote client, or stdin.void Cmd_ExecuteString(const char *text, cmd_source_t src); // adds the current command line as a clc_stringcmd to the client message.// things like godmode, noclip, etc, are commands directed to the server,// so when they are typed in at the console, they will need to be forwarded.void Cmd_ForwardToServer(cmd_t *c); // allocates an initial text buffer that will grow as neededvoid Cbuf_Init(void); // as new commands are generated from the console or keybindings,// the text is added to the end of the command buffer.void Cbuf_AddText(const char *text); // when a command wants to issue other commands immediately, the text is// inserted at the beginning of the buffer, before any remaining unexecuted// commands.void Cbuf_InsertText(const char *text); // Pulls off \n terminated lines of text from the command buffer and sends// them through Cmd_ExecuteString.  Stops when the buffer is empty.// Normally called once per frame, but may be explicitly invoked.// Do not call inside a command function!void Cbuf_Execute(void);

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t