X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=cmd.h;h=bb1a84f2f8c8db3bb9b56a938c459a3587fdc173;hp=f9eab24ec8d22b3c21be3327df396910711fff6c;hb=fbb0a2559c0c5f6b5ff7ff80d028bb72b9cc4ad4;hpb=8dcce44300385b12c46d494c06aadcfa35a8bc14 diff --git a/cmd.h b/cmd.h index f9eab24e..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. @@ -34,24 +34,39 @@ 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 Cbuf_AddText (char *text); -// as new commands are generated from the console or keybindings, -// the text is added to the end of the command buffer. +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); -void Cbuf_InsertText (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. +/*! 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 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); //=========================================================================== @@ -70,52 +85,93 @@ 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; +extern cmd_source_t cmd_source; -void Cmd_Init (void); +void Cmd_Init (void); +void Cmd_Shutdown (void); -void Cmd_AddCommand (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 -qboolean Cmd_Exists (char *cmd_name); -// used by the cvar code to check for cvar / command name overlap +/// used by the cvar code to check for cvar / command name overlap +qboolean Cmd_Exists (const char *cmd_name); + +/// attempts to match a partial command for automatic command line completion +/// returns NULL if nothing fits +const char *Cmd_CompleteCommand (const char *partial); + +int Cmd_CompleteAliasCountPossible (const char *partial); + +const char **Cmd_CompleteAliasBuildList (const char *partial); + +int Cmd_CompleteCountPossible (const char *partial); + +const char **Cmd_CompleteBuildList (const char *partial); -char *Cmd_CompleteCommand (char *partial); -// attempts to match a partial command for automatic command line completion -// returns NULL if nothing fits +void Cmd_CompleteCommandPrint (const char *partial); -int Cmd_Argc (void); -char *Cmd_Argv (int arg); -char *Cmd_Args (void); +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 + +int Cmd_Argc (void); +const char *Cmd_Argv (int arg); +const char *Cmd_Args (void); // 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 allways safe. +// if arg > argc, so string operations are always safe. -int Cmd_CheckParm (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 +/// 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); -void Cmd_TokenizeString (char *text); +//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 (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 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); + +/// 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); + +/// 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_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. +void Cmd_ClearCsqcFuncs (void); -void Cmd_Print (char *text); -// used by command functions to send output to either the graphics console or -// passed as a print message to the client +#endif