]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - cmd.c
cl_deathfade: new effect which makes the screen fade to dark red when you die......
[xonotic/darkplaces.git] / cmd.c
diff --git a/cmd.c b/cmd.c
index 133865c931aacbe965287f3da20f090dba57b49f..476ec67b549136595865a3954e116f269c1beb53 100644 (file)
--- a/cmd.c
+++ b/cmd.c
@@ -25,7 +25,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 // this is the largest script file that can be executed in one step
 // LordHavoc: inreased this from 8192 to 32768
 // div0: increased this from 32k to 128k
-#define CMDBUFSIZE 131072
+// div0: increased this from 128k to 640k which ought to be enough for anyone
+#define CMDBUFSIZE 655360
 // maximum number of parameters to a command
 #define        MAX_ARGS 80
 // maximum tokenizable commandline length (counting NUL terminations)
@@ -320,7 +321,7 @@ void Cbuf_Execute (void)
                                }
                                else
                                {
-                                       if(text[i] == '/' && text[i + 1] == '/')
+                                       if(text[i] == '/' && text[i + 1] == '/' && (i == 0 || ISWHITESPACE(text[i-1])))
                                                comment = true;
                                        if(text[i] == ';')
                                                break;  // don't break if inside a quoted string or comment
@@ -665,6 +666,47 @@ static void Cmd_Alias_f (void)
        memcpy (a->value, cmd, alloclen);
 }
 
+/*
+===============
+Cmd_UnAlias_f
+
+Remove existing aliases.
+===============
+*/
+static void Cmd_UnAlias_f (void)
+{
+       cmdalias_t      *a, *p;
+       int i;
+       const char *s;
+
+       if(Cmd_Argc() == 1)
+       {
+               Con_Print("unalias: Usage: unalias alias1 [alias2 ...]\n");
+               return;
+       }
+
+       for(i = 1; i < Cmd_Argc(); ++i)
+       {
+               s = Cmd_Argv(i);
+               p = NULL;
+               for(a = cmd_alias; a; p = a, a = a->next)
+               {
+                       if(!strcmp(s, a->name))
+                       {
+                               if(a == cmd_alias)
+                                       cmd_alias = a->next;
+                               if(p)
+                                       p->next = a->next;
+                               Z_Free(a->value);
+                               Z_Free(a);
+                               break;
+                       }
+               }
+               if(!a)
+                       Con_Printf("unalias: %s alias not found\n", s);
+       }
+}
+
 /*
 =============================================================================
 
@@ -875,7 +917,7 @@ static const char *Cmd_GetCvarValue(const char *var, size_t varlen, cmdalias_t *
 /*
 Cmd_PreprocessString
 
-Preprocesses strings and replaces $*, $param#, $cvar accordingly
+Preprocesses strings and replaces $*, $param#, $cvar accordingly. Also strips comments.
 */
 static void Cmd_PreprocessString( const char *intext, char *outtext, unsigned maxoutlen, cmdalias_t *alias ) {
        const char *in;
@@ -982,9 +1024,9 @@ static void Cmd_PreprocessString( const char *intext, char *outtext, unsigned ma
                                        --eat;
                                }
                        }
-               } else {
-                       outtext[outlen++] = *in++;
                }
+               else 
+                       outtext[outlen++] = *in++;
        }
        outtext[outlen] = 0;
 }
@@ -1090,33 +1132,31 @@ static void Cmd_Apropos_f(void)
        }
 
        count = 0;
-       Con_Printf("Cvars:\n");
        for (cvar = cvar_vars; cvar; cvar = cvar->next)
        {
-               if (!matchpattern_with_separator(cvar->name, partial, false, "", false))
-               if (!matchpattern_with_separator(cvar->description, partial, false, "", false))
+               if (!matchpattern_with_separator(cvar->name, partial, true, "", false))
+               if (!matchpattern_with_separator(cvar->description, partial, true, "", false))
                        continue;
-               Con_Printf("^3%s^7: %s\n", cvar->name, cvar->description);
+               Con_Printf ("cvar ^3%s^7 is \"%s\" [\"%s\"] %s\n", cvar->name, cvar->string, cvar->defstring, cvar->description);
                count++;
        }
-       Con_Printf("Commands:\n");
        for (cmd = cmd_functions; cmd; cmd = cmd->next)
        {
-               if (!matchpattern_with_separator(cmd->name, partial, false, "", false))
-               if (!matchpattern_with_separator(cmd->description, partial, false, "", false))
+               if (!matchpattern_with_separator(cmd->name, partial, true, "", false))
+               if (!matchpattern_with_separator(cmd->description, partial, true, "", false))
                        continue;
-               Con_Printf("^3%s^7: %s\n", cmd->name, cmd->description);
+               Con_Printf("command ^2%s^7: %s\n", cmd->name, cmd->description);
                count++;
        }
-       Con_Printf("Aliases:\n");
        for (alias = cmd_alias; alias; alias = alias->next)
        {
-               if (!matchpattern_with_separator(alias->name, partial, false, "", false))
-               if (!matchpattern_with_separator(alias->value, partial, false, "", false))
+               if (!matchpattern_with_separator(alias->name, partial, true, "", false))
+               if (!matchpattern_with_separator(alias->value, partial, true, "", false))
                        continue;
-               Con_Printf("^3%s^7: %s", alias->name, alias->value);
+               Con_Printf("alias ^5%s^7: %s", alias->name, alias->value);
                count++;
        }
+       Con_Printf("%i result%s\n\n", count, (count > 1) ? "s" : "");
 }
 
 /*
@@ -1141,11 +1181,15 @@ void Cmd_Init_Commands (void)
        Cmd_AddCommand ("stuffcmds",Cmd_StuffCmds_f, "execute commandline parameters (must be present in quake.rc script)");
        Cmd_AddCommand ("exec",Cmd_Exec_f, "execute a script file");
        Cmd_AddCommand ("echo",Cmd_Echo_f, "print a message to the console (useful in scripts)");
-       Cmd_AddCommand ("alias",Cmd_Alias_f, "create a script function (parameters are passed in as $1 through $9, and $* for all parameters)");
+       Cmd_AddCommand ("alias",Cmd_Alias_f, "create a script function (parameters are passed in as $X (being X a number), $* for all parameters, $X- for all parameters starting from $X). Without arguments show the list of all alias");
+       Cmd_AddCommand ("unalias",Cmd_UnAlias_f, "remove an alias");
        Cmd_AddCommand ("cmd", Cmd_ForwardToServer, "send a console commandline to the server (used by some mods)");
        Cmd_AddCommand ("wait", Cmd_Wait_f, "make script execution wait for next rendered frame");
        Cmd_AddCommand ("set", Cvar_Set_f, "create or change the value of a console variable");
        Cmd_AddCommand ("seta", Cvar_SetA_f, "create or change the value of a console variable that will be saved to config.cfg");
+#ifdef FILLALLCVARSWITHRUBBISH
+       Cmd_AddCommand ("fillallcvarswithrubbish", Cvar_FillAll_f, "fill all cvars with a specified number of characters to provoke buffer overruns");
+#endif /* FILLALLCVARSWITHRUBBISH */
 
        // 2000-01-09 CmdList, CvarList commands By Matthias "Maddes" Buecher
        // Added/Modified by EvilTypeGuy eviltypeguy@qeradiant.com
@@ -1434,7 +1478,7 @@ void Cmd_CompleteCommandPrint (const char *partial)
        // Loop through the command list and print all matches
        for (cmd = cmd_functions; cmd; cmd = cmd->next)
                if (!strncasecmp(partial, cmd->name, len))
-                       Con_Printf("%s : %s\n", cmd->name, cmd->description);
+                       Con_Printf("^2%s^7: %s\n", cmd->name, cmd->description);
 }
 
 /*
@@ -1472,7 +1516,7 @@ void Cmd_CompleteAliasPrint (const char *partial)
        // Loop through the alias list and print all matches
        for (alias = cmd_alias; alias; alias = alias->next)
                if (!strncasecmp(partial, alias->name, len))
-                       Con_Printf("%s : %s\n", alias->name, alias->value);
+                       Con_Printf("^5%s^7: %s", alias->name, alias->value);
 }