]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - cmd.c
cl_capturevideo_raw* modes now use O_NONBLOCKING file access for more performance
[xonotic/darkplaces.git] / cmd.c
diff --git a/cmd.c b/cmd.c
index a074795410fd9bdbd558accf55803abff9dc62ed..ce200ea2de3ad16414b041fe1a4b5978fcf3493b 100644 (file)
--- a/cmd.c
+++ b/cmd.c
@@ -77,6 +77,15 @@ void Cbuf_Init (void)
        SZ_Alloc (&cmd_text, 32768, "command buffer"); // space for commands and script files
 }
 
+/*
+============
+Cbuf_Shutdown
+============
+*/
+void Cbuf_Shutdown (void)
+{
+       SZ_Free (&cmd_text);
+}
 
 /*
 ============
@@ -252,6 +261,7 @@ void Cmd_StuffCmds_f (void)
                        build[l++] = '\n';
                        build[l++] = 0;
                        Cbuf_InsertText (build);
+                       i--;
                }
        }
 }
@@ -454,6 +464,18 @@ void Cmd_Init (void)
        Cmd_AddCommand ("cmdlist", Cmd_List_f);         // Added/Modified by EvilTypeGuy eviltypeguy@qeradiant.com
        Cmd_AddCommand ("cvarlist", Cvar_List_f);       // 2000-01-09 CmdList, CvarList commands
                                                                                                // By Matthias "Maddes" Buecher
+       Cmd_AddCommand ("set", Cvar_Set_f);
+       Cmd_AddCommand ("seta", Cvar_SetA_f);
+}
+
+/*
+============
+Cmd_Shutdown
+============
+*/
+void Cmd_Shutdown(void)
+{
+       Mem_FreePool(&cmd_mempool);
 }
 
 /*
@@ -506,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;
                }
@@ -780,7 +808,7 @@ void Cmd_ExecuteString (const char *text, cmd_source_t src)
        }
 
 // check functions (only after host_initialized)
-       if (host_initialized || !strcasecmp(cmd_argv[0], "exec"))
+       if (host_initialized || !strcasecmp(cmd_argv[0], "exec") || !strcasecmp(cmd_argv[0], "set") || !strcasecmp(cmd_argv[0], "seta"))
        {
                for (cmd=cmd_functions ; cmd ; cmd=cmd->next)
                {
@@ -817,17 +845,16 @@ void Cmd_ExecuteString (const char *text, cmd_source_t src)
 
 /*
 ===================
-Cmd_ForwardToServer
+Cmd_ForwardStringToServer
 
-Sends the entire command line over to the server
+Sends an entire command string over to the server, unprocessed
 ===================
 */
-void Cmd_ForwardToServer (void)
+void Cmd_ForwardStringToServer (const char *s)
 {
-       const char *s;
        if (cls.state != ca_connected)
        {
-               Con_Printf("Can't \"%s\", not connected\n", Cmd_Argv(0));
+               Con_Printf("Can't \"%s\", not connected\n", s);
                return;
        }
 
@@ -837,14 +864,27 @@ void Cmd_ForwardToServer (void)
        // LordHavoc: thanks to Fuh for bringing the pure evil of SZ_Print to my
        // attention, it has been eradicated from here, its only (former) use in
        // all of darkplaces.
-       if (strcasecmp(Cmd_Argv(0), "cmd") != 0)
-               s = va("%s %s", Cmd_Argv(0), Cmd_Argc() > 1 ? Cmd_Args() : "\n");
-       else
-               s = Cmd_Argc() > 1 ? Cmd_Args() : "\n";
        MSG_WriteByte(&cls.message, clc_stringcmd);
        SZ_Write(&cls.message, s, strlen(s) + 1);
 }
 
+/*
+===================
+Cmd_ForwardToServer
+
+Sends the entire command line over to the server
+===================
+*/
+void Cmd_ForwardToServer (void)
+{
+       const char *s;
+       if (strcasecmp(Cmd_Argv(0), "cmd"))
+               s = va("%s %s", Cmd_Argv(0), Cmd_Argc() > 1 ? Cmd_Args() : "");
+       else
+               s = Cmd_Argc() > 1 ? Cmd_Args() : "";
+       Cmd_ForwardStringToServer(s);
+}
+
 
 /*
 ================