]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - cmd.c
don't draw score info in viewsize 120
[xonotic/darkplaces.git] / cmd.c
diff --git a/cmd.c b/cmd.c
index dbaf45690128c9fa0cc94062065678e603905fb1..aa697001e2c97af977c49f731b2cb2c8df7fabff 100644 (file)
--- a/cmd.c
+++ b/cmd.c
@@ -186,7 +186,13 @@ void Cbuf_Execute (void)
 
 // execute the command line
                firstchar = line + strspn(line, " \t");
-               if(strncmp(firstchar, "alias", 5) || (firstchar[5] != ' ' && firstchar[5] != '\t'))
+               if(
+                       (strncmp(firstchar, "alias", 5) || (firstchar[5] != ' ' && firstchar[5] != '\t'))
+                       &&
+                       (strncmp(firstchar, "bind", 4) || (firstchar[4] != ' ' && firstchar[4] != '\t'))
+                       &&
+                       (strncmp(firstchar, "in_bind", 7) || (firstchar[7] != ' ' && firstchar[7] != '\t'))
+               )
                {
                        Cmd_PreprocessString( line, preprocessed, sizeof(preprocessed), NULL );
                        Cmd_ExecuteString (preprocessed, src_command);
@@ -544,11 +550,63 @@ static const char *Cmd_GetDirectCvarValue(const char *varname, cmdalias_t *alias
        return NULL;
 }
 
+qboolean Cmd_QuoteString(char *out, size_t outlen, const char *in, const char *quoteset)
+{
+       qboolean quote_quot = !!strchr(quoteset, '"');
+       qboolean quote_backslash = !!strchr(quoteset, '\\');
+       qboolean quote_dollar = !!strchr(quoteset, '$');
+
+       while(*in)
+       {
+               if(*in == '"' && quote_quot)
+               {
+                       if(outlen <= 2)
+                       {
+                               *out++ = 0;
+                               return false;
+                       }
+                       *out++ = '\\'; --outlen;
+                       *out++ = '"'; --outlen;
+               }
+               else if(*in == '\\' && quote_backslash)
+               {
+                       if(outlen <= 2)
+                       {
+                               *out++ = 0;
+                               return false;
+                       }
+                       *out++ = '\\'; --outlen;
+                       *out++ = '\\'; --outlen;
+               }
+               else if(*in == '\\' && quote_dollar)
+               {
+                       if(outlen <= 2)
+                       {
+                               *out++ = 0;
+                               return false;
+                       }
+                       *out++ = '$'; --outlen;
+                       *out++ = '$'; --outlen;
+               }
+               else
+               {
+                       if(outlen <= 1)
+                       {
+                               *out++ = 0;
+                               return false;
+                       }
+                       *out++ = *in; --outlen;
+               }
+               ++in;
+       }
+       *out++ = 0;
+       return true;
+}
+
 static const char *Cmd_GetCvarValue(const char *var, size_t varlen, cmdalias_t *alias)
 {
        static char varname[MAX_INPUTLINE];
        static char varval[MAX_INPUTLINE];
-       char *p;
        const char *varstr;
        char *varfunc;
 
@@ -593,34 +651,8 @@ static const char *Cmd_GetCvarValue(const char *var, size_t varlen, cmdalias_t *
        if(!varfunc || !strcmp(varfunc, "q")) // note: quoted form is default, use "asis" to override!
        {
                // quote it so it can be used inside double quotes
-               // we just need to replace " by \"
-               p = varval;
-               while(*varstr)
-               {
-                       if(*varstr == '"')
-                       {
-                               if(p - varval >= (ssize_t)(sizeof(varval) - 2))
-                                       break;
-                               *p++ = '\\';
-                               *p++ = '"';
-                       }
-                       else if(*varstr == '\\')
-                       {
-                               if(p - varval >= (ssize_t)(sizeof(varval) - 2))
-                                       break;
-                               *p++ = '\\';
-                               *p++ = '\\';
-                       }
-                       else
-                       {
-                               if(p - varval >= (ssize_t)(sizeof(varval) - 1))
-                                       break;
-                               *p++ = *varstr;
-                       }
-                       ++varstr;
-               }
-               *p++ = 0;
-               //Con_Printf("quoted form: %s\n", varval);
+               // we just need to replace " by \", and of course, double backslashes
+               Cmd_QuoteString(varval, sizeof(varval), varstr, "\"\\");
                return varval;
        }
        else if(!strcmp(varfunc, "asis"))
@@ -760,8 +792,6 @@ static void Cmd_ExecuteAlias (cmdalias_t *alias)
 {
        static char buffer[ MAX_INPUTLINE + 2 ];
        static char buffer2[ MAX_INPUTLINE * 2 + 2 ];
-       char *q;
-       const char *p;
        Cmd_PreprocessString( alias->value, buffer, sizeof(buffer) - 2, alias );
        // insert at start of command buffer, so that aliases execute in order
        // (fixes bug introduced by Black on 20050705)
@@ -769,14 +799,7 @@ static void Cmd_ExecuteAlias (cmdalias_t *alias)
        // Note: Cbuf_PreprocessString will be called on this string AGAIN! So we
        // have to make sure that no second variable expansion takes place, otherwise
        // alias parameters containing dollar signs can have bad effects.
-       for(p = buffer, q = buffer2; *p; )
-       {
-               if(*p == '$')
-                       *q++ = '$';
-               *q++ = *p++;
-       }
-       *q++ = 0;
-
+       Cmd_QuoteString(buffer2, sizeof(buffer2), buffer, "$");
        Cbuf_InsertText( buffer2 );
 }