#include "quakedef.h"
#define MAX_ALIAS_NAME 32
+// this is the largest script file that can be executed in one step
+// LordHavoc: inreased this from 8192 to 32768
+#define CMDBUFSIZE 32768
+// maximum number of parameters to a command
+#define MAX_ARGS 80
+// maximum tokenizable commandline length (counting NUL terminations)
+#define CMD_TOKENIZELENGTH (MAX_INPUTLINE + 80)
typedef struct cmdalias_s
{
static mempool_t *cmd_mempool;
-#define CMD_TOKENIZELENGTH 4096
static char cmd_tokenizebuffer[CMD_TOKENIZELENGTH];
static int cmd_tokenizebufferpos = 0;
=============================================================================
*/
- // LordHavoc: inreased this from 8192 to 32768
static sizebuf_t cmd_text;
-static unsigned char cmd_text_buf[32768];
+static unsigned char cmd_text_buf[CMDBUFSIZE];
/*
============
Cbuf_Execute
============
*/
+static void Cmd_PreprocessString( const char *intext, char *outtext, unsigned maxoutlen, cmdalias_t *alias );
void Cbuf_Execute (void)
{
int i;
char *text;
- char line[1024];
+ char line[MAX_INPUTLINE];
+ char preprocessed[MAX_INPUTLINE];
int quotes;
// LordHavoc: making sure the tokenizebuffer doesn't get filled up by repeated crashes
}
// execute the command line
- Cmd_ExecuteString (line, src_command);
+ Cmd_PreprocessString( line, preprocessed, sizeof(preprocessed), NULL );
+ Cmd_ExecuteString (preprocessed, src_command);
if (cmd_wait)
{ // skip out while text still remains in buffer, leaving it
{
int i, j, l;
// this is per command, and bounds checked (no buffer overflows)
- char build[2048];
+ char build[MAX_INPUTLINE];
if (Cmd_Argc () != 1)
{
static void Cmd_Alias_f (void)
{
cmdalias_t *a;
- char cmd[1024];
+ char cmd[MAX_INPUTLINE];
int i, c;
const char *s;
struct cmd_function_s *next;
const char *name;
xcommand_t function;
+ qboolean csqcfunc;
} cmd_function_t;
-
-#define MAX_ARGS 80
-
static int cmd_argc;
static const char *cmd_argv[MAX_ARGS];
static const char *cmd_null_string = "";
-static const char *cmd_args = NULL;
-
+static const char *cmd_args;
cmd_source_t cmd_source;
*/
static void Cmd_ExecuteAlias (cmdalias_t *alias)
{
-#define ALIAS_BUFFER 1024
- static char buffer[ ALIAS_BUFFER + 2 ];
- Cmd_PreprocessString( alias->value, buffer, ALIAS_BUFFER, alias );
+ static char buffer[ MAX_INPUTLINE + 2 ];
+ Cmd_PreprocessString( alias->value, buffer, sizeof(buffer) - 2, alias );
Cbuf_AddText( buffer );
}
count++;
}
- Con_Printf("%i Command%s", count, (count > 1) ? "s" : "");
if (partial)
- Con_Printf(" beginning with \"%s\"", partial);
-
- Con_Print("\n\n");
+ Con_Printf("%i Command%s beginning with \"%s\"\n\n", count, (count > 1) ? "s" : "", partial);
+ else
+ Con_Printf("%i Command%s\n\n", count, (count > 1) ? "s" : "");
}
/*
{
if (!strcmp (cmd_name, cmd->name))
{
- Con_Printf("Cmd_AddCommand: %s already defined\n", cmd_name);
- return;
+ if (function)
+ {
+ Con_Printf("Cmd_AddCommand: %s already defined\n", cmd_name);
+ return;
+ }
+ else //[515]: csqc
+ {
+ cmd->csqcfunc = true;
+ return;
+ }
}
}
cmd = (cmd_function_t *)Mem_Alloc(cmd_mempool, sizeof(cmd_function_t));
cmd->name = cmd_name;
cmd->function = function;
+ if(!function) //[515]: csqc
+ cmd->csqcfunc = true;
cmd->next = cmd_functions;
// insert it at the right alphanumeric position
return buf;
}
+void Cmd_ClearCsqcFuncs (void)
+{
+ cmd_function_t *cmd;
+ for (cmd=cmd_functions ; cmd ; cmd=cmd->next)
+ cmd->csqcfunc = false;
+}
+
+qboolean CL_VM_ConsoleCommand (const char *cmd);
/*
============
Cmd_ExecuteString
*/
void Cmd_ExecuteString (const char *text, cmd_source_t src)
{
-#define EXECUTESTRING_BUFFER 4096
- static char buffer[ EXECUTESTRING_BUFFER ];
int oldpos;
cmd_function_t *cmd;
cmdalias_t *a;
oldpos = cmd_tokenizebufferpos;
cmd_source = src;
- Cmd_PreprocessString( text, buffer, EXECUTESTRING_BUFFER, NULL );
- Cmd_TokenizeString (buffer);
+ Cmd_TokenizeString (text);
// execute the command line
if (!Cmd_Argc())
{
if (!strcasecmp (cmd_argv[0],cmd->name))
{
- cmd->function ();
+ if(cmd->function && !cmd->csqcfunc)
+ cmd->function ();
+ else
+ if(CL_VM_ConsoleCommand (text)) //[515]: csqc
+ return;
+ else
+ if(cmd->function)
+ cmd->function ();
cmd_tokenizebufferpos = oldpos;
return;
}