2004-08-21 01:25:48 +00:00
/*
Copyright ( C ) 1996 - 1997 Id Software , Inc .
This program is free software ; you can redistribute it and / or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation ; either version 2
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 .
See the GNU General Public License for more details .
You should have received a copy of the GNU General Public License
along with this program ; if not , write to the Free Software
Foundation , Inc . , 59 Temple Place - Suite 330 , Boston , MA 02111 - 1307 , USA .
*/
// cmd.h -- 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 ( ) ;
*/
2015-06-29 23:46:31 +00:00
void Cbuf_Waited ( void ) ;
2004-08-21 01:25:48 +00:00
void Cbuf_Init ( void ) ;
// allocates an initial text buffer that will grow as needed
void Cbuf_AddText ( const char * text , int level ) ;
// as new commands are generated from the console or keybindings,
// the text is added to the end of the command buffer.
2006-02-06 01:06:17 +00:00
void Cbuf_InsertText ( const char * text , int level , qboolean addnl ) ;
2004-08-21 01:25:48 +00:00
// when a command wants to issue other commands immediately, the text is
// inserted at the beginning of the buffer, before any remaining unexecuted
// commands.
2011-12-05 15:23:40 +00:00
char * Cbuf_GetNext ( int level , qboolean ignoresemicolon ) ;
2004-08-21 01:25:48 +00:00
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!
2014-06-24 03:02:32 +00:00
extern qboolean cmd_blockwait ;
2012-07-05 19:42:36 +00:00
void Cbuf_ExecuteLevel ( int level ) ;
//executes only a single cbuf level. can be used to restrict cbuf execution to some 'safe' set of commands, so there are no surprise 'map' commands.
//will not magically make all commands safe to exec, but will prevent user commands slipping in too.
2004-08-21 01:25:48 +00:00
//===========================================================================
/*
Command execution takes a null terminated string , breaks it into tokens ,
then searches for a command or variable that matches the first token .
*/
typedef void ( * xcommand_t ) ( void ) ;
int Cmd_Level ( char * name ) ;
void Cmd_Init ( void ) ;
2009-11-04 21:16:50 +00:00
void Cmd_Shutdown ( void ) ;
2005-01-07 02:47:31 +00:00
void Cmd_StuffCmds ( void ) ;
2004-08-21 01:25:48 +00:00
2013-08-27 13:18:09 +00:00
void Cmd_RemoveCommands ( xcommand_t function ) ; //unregister all commands that use the same function. for wrappers and stuff.
2004-08-21 01:25:48 +00:00
void Cmd_RemoveCommand ( char * cmd_name ) ;
2005-01-15 17:39:12 +00:00
qboolean Cmd_AddCommand ( char * cmd_name , xcommand_t function ) ;
2012-11-27 03:23:19 +00:00
qboolean Cmd_AddCommandD ( char * cmd_name , xcommand_t function , char * description ) ;
2004-08-21 01:25:48 +00:00
// 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
// if function is NULL, the command will be forwarded to the server
// as a clc_stringcmd instead of executed locally
2014-03-30 08:55:06 +00:00
qboolean Cmd_Exists ( const char * cmd_name ) ;
2015-04-14 23:12:17 +00:00
char * Cmd_AliasExist ( const char * name , int restrictionlevel ) ;
2004-08-21 01:25:48 +00:00
// used by the cvar code to check for cvar / command name overlap
2012-03-19 06:30:41 +00:00
char * Cmd_Describe ( char * cmd_name ) ;
2012-11-27 03:23:19 +00:00
char * Cmd_CompleteCommand ( char * partial , qboolean fullonly , qboolean caseinsens , int matchnum , char * * descptr ) ;
2005-03-12 23:40:42 +00:00
qboolean Cmd_IsCommand ( char * line ) ;
2004-08-21 01:25:48 +00:00
// attempts to match a partial command for automatic command line completion
// returns NULL if nothing fits
2005-03-18 06:13:36 +00:00
int VARGS Cmd_Argc ( void ) ;
char * VARGS Cmd_Argv ( int arg ) ;
char * VARGS Cmd_Args ( void ) ;
2004-08-21 01:25:48 +00:00
extern int Cmd_ExecLevel ;
2005-03-12 23:40:42 +00:00
2013-10-29 17:38:22 +00:00
//if checkheader is false, an opening { is expected to already have been parsed.
//otherwise returns the contents of the block much like c.
//returns a zoned string.
char * Cmd_ParseMultiline ( qboolean checkheader ) ;
2005-03-12 23:40:42 +00:00
extern cvar_t cmd_gamecodelevel , cmd_allowaccess ;
2004-08-21 01:25:48 +00:00
// The functions that execute commands get their parameters with these
// functions. Cmd_Argv () will return an empty string, not a NULL
2005-07-28 15:33:27 +00:00
// if arg > argc, so string operations are always safe.
2004-08-21 01:25:48 +00:00
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
2014-03-30 08:55:06 +00:00
char * Cmd_AliasExist ( const char * name , int restrictionlevel ) ;
2013-08-27 13:18:09 +00:00
void Alias_WipeStuffedAliases ( void ) ;
2004-08-21 01:25:48 +00:00
2005-02-28 07:16:19 +00:00
void Cmd_AddMacro ( char * s , char * ( * f ) ( void ) , int disputableintentions ) ;
2008-11-09 22:29:28 +00:00
void Cmd_TokenizePunctation ( char * text , char * punctuation ) ;
2014-03-30 08:55:06 +00:00
const char * Cmd_TokenizeString ( const char * text , qboolean expandmacros , qboolean qctokenize ) ;
2004-08-21 01:25:48 +00:00
// Takes a null terminated string. Does not need to be /n terminated.
// breaks the string up into arg tokens.
void Cmd_ExecuteString ( char * text , int restrictionlevel ) ;
2014-03-30 08:55:06 +00:00
void Cmd_Args_Set ( const char * newargs ) ;
2007-08-06 21:13:15 +00:00
2013-06-23 02:17:02 +00:00
# define RESTRICT_MAX_TOTAL 31
# define RESTRICT_MAX_USER 29 //1-64 it's all about bit size. This is max settable. servers are +1 or +2
2009-11-04 21:16:50 +00:00
# define RESTRICT_DEFAULT 20 //rcon get's 63, local always gets 64
2004-08-21 01:25:48 +00:00
# define RESTRICT_MIN 1 //rcon get's 63, local always gets 64
2013-06-23 02:17:02 +00:00
# define RESTRICT_MAX RESTRICT_MAX_USER
2004-08-21 01:25:48 +00:00
# define RESTRICT_LOCAL RESTRICT_MAX
2005-04-16 16:21:27 +00:00
# define RESTRICT_INSECURE RESTRICT_MAX+1
# define RESTRICT_SERVER RESTRICT_MAX+2
2009-11-04 21:16:50 +00:00
# define RESTRICT_RCON rcon_level.ival
2004-08-21 01:25:48 +00:00
# define RESTRICT_PROGS RESTRICT_MAX-2
2013-03-12 22:35:33 +00:00
# define Cmd_FromGamecode() (Cmd_ExecLevel>=RESTRICT_SERVER) //cheat provention. block cheats if its not fromgamecode
# define Cmd_IsInsecure() (Cmd_ExecLevel>=RESTRICT_INSECURE) //prevention from the server from breaking/crashing/wiping us. if this returns true, block file access etc.
2004-08-21 01:25:48 +00:00
// Parses a single line of text into arguments and tries to execute it
// as if it was typed at the console
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.
qboolean Cmd_FilterMessage ( char * message , qboolean sameteam ) ;
void Cmd_MessageTrigger ( char * message , int type ) ;
2004-12-08 04:14:52 +00:00
void Cmd_ShiftArgs ( int ammount , qboolean expandstring ) ;
2004-08-21 01:25:48 +00:00
2008-05-25 22:23:43 +00:00
char * Cmd_ExpandString ( char * data , char * dest , int destlen , int maxaccesslevel , qboolean expandcvars , qboolean expandmacros ) ;
2015-09-07 14:34:39 +00:00
qboolean If_EvaluateBoolean ( const char * text , int restriction ) ;
2004-08-21 01:25:48 +00:00
extern cvar_t rcon_level ;