X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=cmd.c;h=40d1b72d40afd524ed665e1c02a6033faaebe07e;hb=c3a1653e58a354780cc920457b7b29482386cbb9;hp=18ac78fe5bb7d851756ca2dd69b5b9f527572a5c;hpb=ac947d2fbb445473c266390a1fca26c8be8611c4;p=xonotic%2Fdarkplaces.git diff --git a/cmd.c b/cmd.c index 18ac78fe..40d1b72d 100644 --- a/cmd.c +++ b/cmd.c @@ -64,28 +64,9 @@ static void Cmd_Wait_f (void) ============================================================================= */ -static sizebuf_t cmd_text; - -/* -============ -Cbuf_Init -============ -*/ -void Cbuf_Init (void) -{ // LordHavoc: inreased this from 8192 to 32768 - SZ_Alloc (&cmd_text, 32768, "command buffer"); // space for commands and script files -} - -/* -============ -Cbuf_Shutdown -============ -*/ -void Cbuf_Shutdown (void) -{ - SZ_Free (&cmd_text); -} +static sizebuf_t cmd_text; +static qbyte cmd_text_buf[32768]; /* ============ @@ -223,6 +204,7 @@ quake +prog jctest.qp +cmd amlev1 quake -nosound +cmd amlev1 =============== */ +qboolean host_stuffcmdsrun = false; void Cmd_StuffCmds_f (void) { int i, j, l; @@ -235,6 +217,7 @@ void Cmd_StuffCmds_f (void) return; } + host_stuffcmdsrun = true; for (i = 0;i < com_argc;i++) { if (com_argv[i] && com_argv[i][0] == '+' && (com_argv[i][1] < '0' || com_argv[i][1] > '9')) @@ -352,11 +335,21 @@ static void Cmd_Alias_f (void) if (!a) { + cmdalias_t *prev, *current; + a = Z_Malloc (sizeof(cmdalias_t)); - a->next = cmd_alias; - cmd_alias = a; + strlcpy (a->name, s, sizeof (a->name)); + // insert it at the right alphanumeric position + for( prev = NULL, current = cmd_alias ; current && strcmp( current->name, a->name ) < 0 ; prev = current, current = current->next ) + ; + if( prev ) { + prev->next = a; + } else { + cmd_alias = a; + } + a->next = current; } - strlcpy (a->name, s, sizeof (a->name)); + // copy the rest of the command line cmd[0] = 0; // start out with a null string @@ -451,7 +444,14 @@ Cmd_Init void Cmd_Init (void) { cmd_mempool = Mem_AllocPool("commands", 0, NULL); + // space for commands and script files + cmd_text.data = cmd_text_buf; + cmd_text.maxsize = sizeof(cmd_text_buf); + cmd_text.cursize = 0; +} +void Cmd_Init_Commands (void) +{ // // register our commands // @@ -528,12 +528,18 @@ static void Cmd_TokenizeString (const char *text) while (1) { // skip whitespace up to a /n - while (*text && *text <= ' ' && *text != '\n') + while (*text && *text <= ' ' && *text != '\r' && *text != '\n') text++; - if (*text == '\n') + // line endings: + // UNIX: \n + // Mac: \r + // Windows: \r\n + if (*text == '\n' || *text == '\r') { // a newline seperates commands in the buffer + if (*text == '\r' && text[1] == '\n') + text++; text++; break; } @@ -570,6 +576,7 @@ Cmd_AddCommand void Cmd_AddCommand (const char *cmd_name, xcommand_t function) { cmd_function_t *cmd; + cmd_function_t *prev, *current; // fail if the command is a variable name if (Cvar_VariableString(cmd_name)[0]) @@ -592,7 +599,16 @@ void Cmd_AddCommand (const char *cmd_name, xcommand_t function) cmd->name = cmd_name; cmd->function = function; cmd->next = cmd_functions; - cmd_functions = cmd; + +// insert it at the right alphanumeric position + for( prev = NULL, current = cmd_functions ; current && strcmp( current->name, cmd->name ) < 0 ; prev = current, current = current->next ) + ; + if( prev ) { + prev->next = cmd; + } else { + cmd_functions = cmd; + } + cmd->next = current; } /* @@ -801,36 +817,30 @@ void Cmd_ExecuteString (const char *text, cmd_source_t src) return; // no tokens } -// check functions (only after host_initialized) - if (host_initialized || !strcasecmp(cmd_argv[0], "exec") || !strcasecmp(cmd_argv[0], "set") || !strcasecmp(cmd_argv[0], "seta")) +// check functions + for (cmd=cmd_functions ; cmd ; cmd=cmd->next) { - for (cmd=cmd_functions ; cmd ; cmd=cmd->next) + if (!strcasecmp (cmd_argv[0],cmd->name)) { - if (!strcasecmp (cmd_argv[0],cmd->name)) - { - cmd->function (); - cmd_tokenizebufferpos = oldpos; - return; - } + cmd->function (); + cmd_tokenizebufferpos = oldpos; + return; } } -// check alias (only after host_initialized) - if (host_initialized) +// check alias + for (a=cmd_alias ; a ; a=a->next) { - for (a=cmd_alias ; a ; a=a->next) + if (!strcasecmp (cmd_argv[0], a->name)) { - if (!strcasecmp (cmd_argv[0], a->name)) - { - Cbuf_InsertText (a->value); - cmd_tokenizebufferpos = oldpos; - return; - } + Cbuf_InsertText (a->value); + cmd_tokenizebufferpos = oldpos; + return; } } -// check cvars (always) - if (!Cvar_Command () && host_initialized) +// check cvars + if (!Cvar_Command () && host_framecount > 0) Con_Printf("Unknown command \"%s\"\n", Cmd_Argv(0)); cmd_tokenizebufferpos = oldpos;