X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=cmd.h;h=bb1a84f2f8c8db3bb9b56a938c459a3587fdc173;hp=66ab6af0219d4458b27fae557831c2572737ac58;hb=85a33377d64ae8438e6582a7b8472f5a4bd41942;hpb=ac947d2fbb445473c266390a1fca26c8be8611c4 diff --git a/cmd.h b/cmd.h index 66ab6af0..bb1a84f2 100644 --- a/cmd.h +++ b/cmd.h @@ -8,7 +8,7 @@ of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. @@ -37,25 +37,36 @@ The game starts with a Cbuf_AddText ("exec quake.rc\n"); Cbuf_Execute (); #ifndef CMD_H #define CMD_H +extern void *cmd_text_mutex; +#define Cbuf_LockThreadMutex() (void)(cmd_text_mutex ? Thread_LockMutex(cmd_text_mutex) : 0) +#define Cbuf_UnlockThreadMutex() (void)(cmd_text_mutex ? Thread_UnlockMutex(cmd_text_mutex) : 0) + +/// allocates an initial text buffer that will grow as needed void Cbuf_Init (void); -// allocates an initial text buffer that will grow as needed + +void Cmd_Init_Commands (void); void Cbuf_Shutdown (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); -// as new commands are generated from the console or keybindings, -// the text is added to the end of the command buffer. +/*! 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); -// when a command wants to issue other commands immediately, the text is -// inserted at the beginning of the buffer, before any remaining unexecuted -// commands. +/*! Pulls off 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. + * \note Do not call inside a command function! + */ void Cbuf_Execute (void); -// 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! +/*! Performs deferred commands and runs Cbuf_Execute, called by Host_Main */ +void Cbuf_Frame (void); //=========================================================================== @@ -74,9 +85,9 @@ typedef void (*xcommand_t) (void); 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 + 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; @@ -84,17 +95,23 @@ extern cmd_source_t cmd_source; void Cmd_Init (void); void Cmd_Shutdown (void); -void Cmd_AddCommand (const char *cmd_name, xcommand_t function); +// called by Host_Init, this marks cvars, commands and aliases with their init values +void Cmd_SaveInitState (void); +// called by FS_GameDir_f, this restores cvars, commands and aliases to init values +void Cmd_RestoreInitState (void); + +void Cmd_AddCommand_WithClientCommand (const char *cmd_name, xcommand_t consolefunction, xcommand_t clientfunction, const char *description); +void Cmd_AddCommand (const char *cmd_name, xcommand_t function, const char *description); // 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 memory +/// used by the cvar code to check for cvar / command name overlap qboolean Cmd_Exists (const char *cmd_name); -// used by the cvar code to check for cvar / command name overlap +/// attempts to match a partial command for automatic command line completion +/// returns NULL if nothing fits const char *Cmd_CompleteCommand (const char *partial); -// attempts to match a partial command for automatic command line completion -// returns NULL if nothing fits int Cmd_CompleteAliasCountPossible (const char *partial); @@ -104,8 +121,12 @@ int Cmd_CompleteCountPossible (const char *partial); const char **Cmd_CompleteBuildList (const char *partial); +void Cmd_CompleteCommandPrint (const char *partial); + const char *Cmd_CompleteAlias (const char *partial); +void Cmd_CompleteAliasPrint (const char *partial); + // Enhanced console completion by Fett erich@heintz.com // Added by EvilTypeGuy eviltypeguy@qeradiant.com @@ -117,30 +138,40 @@ const char *Cmd_Args (void); // functions. Cmd_Argv () will return an empty string, not a NULL // if arg > argc, so string operations are always safe. +/// Returns the position (1 to argc-1) in the command's argument list +/// where the given parameter apears, or 0 if not present int Cmd_CheckParm (const char *parm); -// Returns the position (1 to argc-1) in the command's argument list -// where the given parameter apears, or 0 if not present //void Cmd_TokenizeString (char *text); // Takes a null terminated string. Does not need to be /n terminated. // breaks the string up into arg tokens. -void Cmd_ExecuteString (const char *text, cmd_source_t src); -// 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. +/// 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, qboolean lockmutex); +/// adds the string as a clc_stringcmd to the client message. +/// (used when there is no reason to generate a local command to do it) void Cmd_ForwardStringToServer (const char *s); -// adds the string as a clc_stringcmd to the client message. -// (used when there is no reason to generate a local command to do it) +/// 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 (void); -// 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. +/// used by command functions to send output to either the graphics console or +/// passed as a print message to the client void Cmd_Print(const char *text); -// used by command functions to send output to either the graphics console or -// passed as a print message to the client + +/// quotes a string so that it can be used as a command argument again; +/// quoteset is a string that contains one or more of ", \, $ and specifies +/// the characters to be quoted (you usually want to either pass "\"\\" or +/// "\"\\$"). Returns true on success, and false on overrun (in which case out +/// will contain a part of the quoted string). If putquotes is set, the +/// enclosing quote marks are also put. +qboolean Cmd_QuoteString(char *out, size_t outlen, const char *in, const char *quoteset, qboolean putquotes); + +void Cmd_ClearCsqcFuncs (void); #endif