[PATCH] Align cmd.c for merge

There's a few more HACKs in this than I would normally like, but there's
enough common code to warrant merging. I'll try to shake out some of the HACKs
later.

diff -urN a/NQ/cmd.c head/NQ/cmd.c
--- a/NQ/cmd.c	2006-02-25 14:12:28.000000000 +1030
+++ head/NQ/cmd.c	2006-02-26 10:12:30.000000000 +1030
@@ -24,14 +24,20 @@
 #include "common.h"
 #include "console.h"
 #include "cvar.h"
-#include "host.h"
-#include "protocol.h"
 #include "quakedef.h"
 #include "shell.h"
 #include "sys.h"
 #include "zone.h"
 
+#ifdef NQ_HACK
+#include "host.h"
+#include "protocol.h"
+#endif
+
 void Cmd_ForwardToServer(void);
+#if defined(QW_HACK) && !defined(SERVERONLY)
+static void Cmd_ForwardToServer_f(void);
+#endif
 
 #define	MAX_ALIAS_NAME	32
 
@@ -46,6 +52,8 @@
 
 qboolean cmd_wait;
 
+cvar_t cl_warncmd = { "cl_warncmd", "0" };
+
 //=============================================================================
 
 /*
@@ -72,6 +80,9 @@
 */
 
 static sizebuf_t cmd_text;
+#ifdef QW_HACK
+static byte cmd_text_buf[8192];
+#endif
 
 /*
 ============
@@ -81,7 +92,14 @@
 void
 Cbuf_Init(void)
 {
-    SZ_Alloc(&cmd_text, 8192);	// space for commands and script files
+#ifdef NQ_HACK
+    SZ_Alloc(&cmd_text, 8192);
+#endif
+#ifdef QW_HACK
+    cmd_text.data = cmd_text_buf;
+    cmd_text.maxsize = sizeof(cmd_text_buf);
+    cmd_text.cursize = 0;
+#endif
 }
 
 
@@ -182,7 +200,12 @@
 	}
 
 	/* execute the command line */
+#ifdef NQ_HACK
 	Cmd_ExecuteString(line, src_command);
+#endif
+#ifdef QW_HACK
+	Cmd_ExecuteString(line);
+#endif
 
 	if (cmd_wait) {
 	    /*
@@ -295,7 +318,8 @@
 	Con_Printf("couldn't exec %s\n", Cmd_Argv(1));
 	return;
     }
-    Con_Printf("execing %s\n", Cmd_Argv(1));
+    if (cl_warncmd.value || developer.value)
+	Con_Printf("execing %s\n", Cmd_Argv(1));
 
     Cbuf_InsertText(f);
     Hunk_FreeToLowMark(mark);
@@ -423,8 +447,9 @@
 static char *cmd_null_string = "";
 static char *cmd_args = NULL;
 
+#ifdef NQ_HACK
 cmd_source_t cmd_source;
-
+#endif
 
 /*
 ============
@@ -441,8 +466,12 @@
     Cmd_AddCommand("exec", Cmd_Exec_f);
     Cmd_AddCommand("echo", Cmd_Echo_f);
     Cmd_AddCommand("alias", Cmd_Alias_f);
-    Cmd_AddCommand("cmd", Cmd_ForwardToServer);
     Cmd_AddCommand("wait", Cmd_Wait_f);
+#ifdef NQ_HACK
+    Cmd_AddCommand("cmd", Cmd_ForwardToServer);
+#elif defined(QW_HACK) && !defined(SERVERONLY)
+    Cmd_AddCommand("cmd", Cmd_ForwardToServer_f);
+#endif
 }
 
 /*
@@ -611,6 +640,7 @@
 }
 
 
+#ifdef NQ_HACK
 /*
 ===================
 Cmd_ForwardToServer
@@ -639,7 +669,66 @@
     else
 	SZ_Print(&cls.message, "\n");
 }
+#endif
+#ifdef QW_HACK
+#ifndef SERVERONLY
+/*
+===================
+Cmd_ForwardToServer
+
+adds the current command line as a clc_stringcmd to the client message.
+things like godmode, noclip, etc, are commands directed to the server,
+so when they are typed in at the console, they will need to be forwarded.
+===================
+*/
+void
+Cmd_ForwardToServer(void)
+{
+    if (cls.state == ca_disconnected) {
+	Con_Printf("Can't \"%s\", not connected\n", Cmd_Argv(0));
+	return;
+    }
+
+    if (cls.demoplayback)
+	return;			// not really connected
+
+    MSG_WriteByte(&cls.netchan.message, clc_stringcmd);
+    SZ_Print(&cls.netchan.message, Cmd_Argv(0));
+    if (Cmd_Argc() > 1) {
+	SZ_Print(&cls.netchan.message, " ");
+	SZ_Print(&cls.netchan.message, Cmd_Args());
+    }
+}
+
+// don't forward the first argument
+static void
+Cmd_ForwardToServer_f(void)
+{
+    if (cls.state == ca_disconnected) {
+	Con_Printf("Can't \"%s\", not connected\n", Cmd_Argv(0));
+	return;
+    }
+
+    if (strcasecmp(Cmd_Argv(1), "snap") == 0) {
+	Cbuf_InsertText("snap\n");
+	return;
+    }
+
+    if (cls.demoplayback)
+	return;			// not really connected
 
+    if (Cmd_Argc() > 1) {
+	MSG_WriteByte(&cls.netchan.message, clc_stringcmd);
+	SZ_Print(&cls.netchan.message, Cmd_Args());
+    }
+}
+#else
+void
+Cmd_ForwardToServer(void)
+{
+}
+#endif /* SERVERONLY */
+#endif /* QW_HACK */
 
 /*
 ============
@@ -650,12 +739,19 @@
 ============
 */
 void
+#ifdef NQ_HACK
 Cmd_ExecuteString(char *text, cmd_source_t src)
+#endif
+#ifdef QW_HACK
+Cmd_ExecuteString(char *text)
+#endif
 {
     cmd_function_t *cmd;
     cmdalias_t *a;
 
+#ifdef NQ_HACK
     cmd_source = src;
+#endif
     Cmd_TokenizeString(text);
 
 // execute the command line
@@ -665,7 +761,12 @@
 // check functions
     cmd = Cmd_FindCommand(cmd_argv[0]);
     if (cmd) {
-	cmd->function();
+	if (cmd->function)
+	    cmd->function();
+#ifdef QW_HACK
+	else
+	    Cmd_ForwardToServer();
+#endif
 	return;
     }
 
@@ -677,7 +778,7 @@
     }
 
 // check cvars
-    if (!Cvar_Command())
+    if (!Cvar_Command() && (cl_warncmd.value || developer.value))
 	Con_Printf("Unknown command \"%s\"\n", Cmd_Argv(0));
 }
 
diff -urN a/QW/common/cmd.c head/QW/common/cmd.c
--- a/QW/common/cmd.c	2006-02-25 14:12:28.000000000 +1030
+++ head/QW/common/cmd.c	2006-02-26 10:20:58.000000000 +1030
@@ -29,9 +29,13 @@
 #include "sys.h"
 #include "zone.h"
 
-void Cmd_ForwardToServer(void);
+#ifdef NQ_HACK
+#include "host.h"
+#include "protocol.h"
+#endif
 
-#ifndef SERVERONLY
+void Cmd_ForwardToServer(void);
+#if defined(QW_HACK) && !defined(SERVERONLY)
 static void Cmd_ForwardToServer_f(void);
 #endif
 
@@ -76,7 +80,9 @@
 */
 
 static sizebuf_t cmd_text;
+#ifdef QW_HACK
 static byte cmd_text_buf[8192];
+#endif
 
 /*
 ============
@@ -86,10 +92,14 @@
 void
 Cbuf_Init(void)
 {
-    //SZ_Alloc(&cmd_text, 8192); // space for commands and script files
+#ifdef NQ_HACK
+    SZ_Alloc(&cmd_text, 8192);
+#endif
+#ifdef QW_HACK
     cmd_text.data = cmd_text_buf;
     cmd_text.maxsize = sizeof(cmd_text_buf);
     cmd_text.cursize = 0;
+#endif
 }
 
 
@@ -106,7 +116,7 @@
     int l = strlen(text);
 
     if (cmd_text.cursize + l < cmd_text.maxsize)
-	SZ_Write(&cmd_text, text, strlen(text));
+	SZ_Write(&cmd_text, text, l);
     else
 	Con_Printf("Cbuf_AddText: overflow\n");
 }
@@ -181,7 +191,6 @@
 	 * down this is necessary because commands (exec, alias) can insert
 	 * data at the beginning of the text buffer
 	 */
-
 	if (i == cmd_text.cursize)
 	    cmd_text.cursize = 0;
 	else {
@@ -191,7 +200,12 @@
 	}
 
 	/* execute the command line */
+#ifdef NQ_HACK
+	Cmd_ExecuteString(line, src_command);
+#endif
+#ifdef QW_HACK
 	Cmd_ExecuteString(line);
+#endif
 
 	if (cmd_wait) {
 	    /*
@@ -304,7 +318,7 @@
 	Con_Printf("couldn't exec %s\n", Cmd_Argv(1));
 	return;
     }
-    if (!Cvar_Command() && (cl_warncmd.value || developer.value))
+    if (cl_warncmd.value || developer.value)
 	Con_Printf("execing %s\n", Cmd_Argv(1));
 
     Cbuf_InsertText(f);
@@ -433,6 +447,9 @@
 static char *cmd_null_string = "";
 static char *cmd_args = NULL;
 
+#ifdef NQ_HACK
+cmd_source_t cmd_source;
+#endif
 
 /*
 ============
@@ -450,7 +467,9 @@
     Cmd_AddCommand("echo", Cmd_Echo_f);
     Cmd_AddCommand("alias", Cmd_Alias_f);
     Cmd_AddCommand("wait", Cmd_Wait_f);
-#ifndef SERVERONLY
+#ifdef NQ_HACK
+    Cmd_AddCommand("cmd", Cmd_ForwardToServer);
+#elif defined(QW_HACK) && !defined(SERVERONLY)
     Cmd_AddCommand("cmd", Cmd_ForwardToServer_f);
 #endif
 }
@@ -621,7 +640,38 @@
 }
 
 
-#ifndef SERVERONLY		// FIXME
+#ifdef NQ_HACK
+/*
+===================
+Cmd_ForwardToServer
+
+Sends the entire command line over to the server
+===================
+*/
+void
+Cmd_ForwardToServer(void)
+{
+    if (cls.state < ca_connected) {
+	Con_Printf("Can't \"%s\", not connected\n", Cmd_Argv(0));
+	return;
+    }
+
+    if (cls.demoplayback)
+	return;			// not really connected
+
+    MSG_WriteByte(&cls.message, clc_stringcmd);
+    if (strcasecmp(Cmd_Argv(0), "cmd") != 0) {
+	SZ_Print(&cls.message, Cmd_Argv(0));
+	SZ_Print(&cls.message, " ");
+    }
+    if (Cmd_Argc() > 1)
+	SZ_Print(&cls.message, Cmd_Args());
+    else
+	SZ_Print(&cls.message, "\n");
+}
+#endif
+#ifdef QW_HACK
+#ifndef SERVERONLY
 /*
 ===================
 Cmd_ForwardToServer
@@ -677,7 +727,8 @@
 Cmd_ForwardToServer(void)
 {
 }
-#endif
+#endif /* SERVERONLY */
+#endif /* QW_HACK */
 
 /*
 ============
@@ -688,11 +739,19 @@
 ============
 */
 void
+#ifdef NQ_HACK
+Cmd_ExecuteString(char *text, cmd_source_t src)
+#endif
+#ifdef QW_HACK
 Cmd_ExecuteString(char *text)
+#endif
 {
     cmd_function_t *cmd;
     cmdalias_t *a;
 
+#ifdef NQ_HACK
+    cmd_source = src;
+#endif
     Cmd_TokenizeString(text);
 
 // execute the command line
@@ -702,10 +761,12 @@
 // check functions
     cmd = Cmd_FindCommand(cmd_argv[0]);
     if (cmd) {
-	if (!cmd->function)
-	    Cmd_ForwardToServer();
-	else
+	if (cmd->function)
 	    cmd->function();
+#ifdef QW_HACK
+	else
+	    Cmd_ForwardToServer();
+#endif
 	return;
     }
 
@@ -719,7 +780,6 @@
 // check cvars
     if (!Cvar_Command() && (cl_warncmd.value || developer.value))
 	Con_Printf("Unknown command \"%s\"\n", Cmd_Argv(0));
-
 }
 
 /*
