mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-01-17 22:50:51 +00:00
take cmd.[ch] back to basics. the gib code is temporarily gone pending
renovations. cmd_source handling is a little hacky in nq, but it's working.
This commit is contained in:
parent
021decc7bd
commit
ad6e025a91
41 changed files with 442 additions and 2586 deletions
|
@ -5,7 +5,6 @@
|
|||
@extern integer () Cmd_Argc;
|
||||
@extern string (integer arg) Cmd_Argv;
|
||||
@extern string (integer arg) Cmd_Args;
|
||||
@extern string (integer arg) Cmd_Argu;
|
||||
@extern void (string value) Cmd_Return;
|
||||
|
||||
#endif//__cmd_h
|
||||
|
|
|
@ -4,5 +4,4 @@ void (string name, void () func) Cmd_AddCommand = #0;
|
|||
integer () Cmd_Argc = #0;
|
||||
string (integer arg) Cmd_Argv = #0;
|
||||
string (integer arg) Cmd_Args = #0;
|
||||
string (integer arg) Cmd_Argu = #0;
|
||||
void (string value) Cmd_Return = #0;
|
||||
|
|
|
@ -32,6 +32,8 @@
|
|||
#ifndef __QF_cbuf_h
|
||||
#define __QF_cbuf_h
|
||||
|
||||
#include "QF/qtypes.h"
|
||||
|
||||
typedef struct cbuf_args_s {
|
||||
int argc;
|
||||
struct dstring_s **argv;
|
||||
|
@ -45,8 +47,19 @@ typedef struct cbuf_s {
|
|||
cbuf_args_t *args;
|
||||
void (*extract_line) (struct cbuf_s *cbuf);
|
||||
void (*parse_line) (struct cbuf_s *cbuf);
|
||||
qboolean wait;
|
||||
} cbuf_t;
|
||||
|
||||
extern cbuf_t *cbuf_active;
|
||||
|
||||
extern const char *com_token;
|
||||
const char *COM_Parse (const char *data);
|
||||
void COM_TokenizeString (const char *str, cbuf_args_t *args);
|
||||
|
||||
cbuf_args_t *Cbuf_ArgsNew (void);
|
||||
void Cbuf_ArgsDelete (cbuf_args_t *);
|
||||
void Cbuf_ArgsAdd (cbuf_args_t *args, const char *arg);
|
||||
|
||||
cbuf_t *Cbuf_New (void);
|
||||
void CBuf_Delete (cbuf_t *cbuf);
|
||||
void Cbuf_AddText (cbuf_t *cbuf, const char *text);
|
||||
|
|
204
include/QF/cmd.h
204
include/QF/cmd.h
|
@ -26,129 +26,16 @@
|
|||
$Id$
|
||||
*/
|
||||
|
||||
#ifndef __cmd_h
|
||||
#define __cmd_h
|
||||
|
||||
#ifndef __QF_cmd_h
|
||||
#define __QF_cmd_h
|
||||
|
||||
#include "QF/qtypes.h"
|
||||
|
||||
typedef struct cmd_localvar_s {
|
||||
struct dstring_s *key, *value;
|
||||
} cmd_localvar_t;
|
||||
|
||||
typedef struct cmd_token_s {
|
||||
struct dstring_s *original, *processed; // Token before and after processing
|
||||
enum {
|
||||
cmd_original,
|
||||
cmd_process,
|
||||
cmd_done
|
||||
} state;
|
||||
unsigned int pos; // Last position in string (used by Cmd_ProcessEmbedded)
|
||||
char delim; // Character that delimeted token
|
||||
} cmd_token_t;
|
||||
|
||||
typedef struct cmd_buffer_s {
|
||||
// Data
|
||||
struct dstring_s *buffer; // Actual text
|
||||
unsigned int argc, maxargc; // Number of args, number of args allocated
|
||||
struct cmd_token_s **argv; // Tokens
|
||||
struct dstring_s *realline; // Actual command being processed
|
||||
struct dstring_s *line; // Processed command line
|
||||
struct dstring_s *looptext; // If a looping buffer, the text we are looping on
|
||||
struct dstring_s *retval; // Value returned to this buffer
|
||||
unsigned int *args; // Array of positions of each token in processed line
|
||||
unsigned int *argsu; // Array of positions of each token in original line
|
||||
struct hashtab_s *locals; // Local variables
|
||||
|
||||
// Flags
|
||||
qboolean subroutine; // Temporarily stopped so a subroutine can run
|
||||
qboolean again; // The last command needs to be executed again for some reason
|
||||
qboolean wait; // Execution paused until next frame
|
||||
qboolean legacy; // Backwards compatible with old console buffer
|
||||
qboolean ownvars; // Buffer has its own set of local variables (as opposed to sharing with another buffer)
|
||||
unsigned int loop; // Buffer loops itself. If true, value signifies number of loops done so far
|
||||
qboolean embedded; // Buffer exists to evaluate embedded command
|
||||
qboolean restricted; // Restricted commands should not run in this buffer
|
||||
|
||||
// Sleep data
|
||||
double timeleft;
|
||||
double lasttime;
|
||||
|
||||
// Execution position
|
||||
enum {
|
||||
cmd_ready, // Ready to read a command
|
||||
cmd_tokenized, // Command successfully tokenized
|
||||
cmd_processed // Command successfully processed, it can be run
|
||||
} position;
|
||||
|
||||
// Return value status
|
||||
enum {
|
||||
cmd_normal, // Normal status
|
||||
cmd_waiting, // Waiting for a return value
|
||||
cmd_returned // Return value available
|
||||
} returned;
|
||||
|
||||
// Stack
|
||||
struct cmd_buffer_s *prev, *next; // Neighboring buffers in stack
|
||||
} cmd_buffer_t;
|
||||
|
||||
typedef struct cmd_thread_s {
|
||||
struct cmd_buffer_s *cbuf; // Actual buffer
|
||||
long int id; // Thread id
|
||||
struct cmd_thread_s *prev, *next; // Linked list
|
||||
} cmd_thread_t;
|
||||
|
||||
typedef struct cmd_event_s {
|
||||
struct dstring_s *name, *command;
|
||||
} cmd_event_t;
|
||||
//===========================================================================
|
||||
|
||||
void escape (struct dstring_s * dstr, const char *clist);
|
||||
|
||||
/*
|
||||
|
||||
Any number of commands can be added in a frame, from several different sources,
|
||||
into several different buffers.
|
||||
|
||||
Most commands come from either keybindings or console line input, but remote
|
||||
servers can also send across commands and entire text files can be execed.
|
||||
|
||||
The + command line options are also added to the command buffer.
|
||||
|
||||
The game starts with a Cbuf_AddText ("exec quake.rc\n"); Cbuf_Execute ();
|
||||
|
||||
*/
|
||||
|
||||
|
||||
void Cbuf_Init (void);
|
||||
// allocates all needed command buffers
|
||||
|
||||
void Cbuf_AddTextTo (cmd_buffer_t *buffer, const char *text);
|
||||
// adds text to the end of a specific buffer
|
||||
void Cbuf_AddText (const char *text);
|
||||
// adds text to the end of the active buffer. By default this is the console buffer.
|
||||
|
||||
void Cbuf_InsertText (const char *text);
|
||||
// inserts text at the beginning of the active buffer, ahead of other commands
|
||||
void Cbuf_InsertTextTo (cmd_buffer_t *buffer, const char *text);
|
||||
// insert text at the beginning of a particular buffer
|
||||
|
||||
void Cbuf_Execute_Sets (void);
|
||||
// executes all set and setrom commands in the console buffer. Used early in startup.
|
||||
void Cbuf_Execute (void);
|
||||
// Executes all threads in reverse order of creation, all commands from key binds,
|
||||
// all commands from the console buffer, and all commands stuffed by the server
|
||||
// Normally called once per frame, but may be explicitly invoked.
|
||||
// Do not call inside a command function!
|
||||
|
||||
|
||||
//===========================================================================
|
||||
|
||||
typedef void (*xcommand_t) (void);
|
||||
|
||||
typedef enum {
|
||||
src_client, // came in over a net connection as a clc_stringcmd
|
||||
// host_client will be valid during this state.
|
||||
// host_client will be valid during this state.
|
||||
src_command, // from a command buffer
|
||||
} cmd_source_t;
|
||||
|
||||
|
@ -156,90 +43,29 @@ extern cmd_source_t cmd_source;
|
|||
|
||||
void Cmd_Init_Hash (void);
|
||||
void Cmd_Init (void);
|
||||
void cl_Cmd_Init (void);
|
||||
|
||||
int Cmd_AddCommand (const char *cmd_name, xcommand_t function, const char *description);
|
||||
int Cmd_RemoveCommand (const char *cmd_name);
|
||||
|
||||
// called by the init functions of other parts of the program to
|
||||
// register commands and functions to call for them.
|
||||
// The cmd_name is referenced later, so it should not be in temp memory
|
||||
// if function is NULL, the command will be forwarded to the server
|
||||
// as a clc_stringcmd instead of being executed locally
|
||||
|
||||
qboolean Cmd_Exists (const char *cmd_name);
|
||||
// used by the cvar code to check for cvar / command name overlap
|
||||
|
||||
const char *Cmd_CompleteCommand (const char *partial);
|
||||
// attempts to match a partial command for automatic command line completion
|
||||
// returns NULL if nothing fits
|
||||
|
||||
int Cmd_CompleteCountPossible (const char *partial);
|
||||
const char **Cmd_CompleteBuildList (const char *partial);
|
||||
const char *Cmd_CompleteAlias (const char *partial);
|
||||
// Enhanced console completion by Fett erich@heintz.com
|
||||
// Added by EvilTypeGuy eviltypeguy@qeradiant.com
|
||||
|
||||
|
||||
int Cmd_Argc (void);
|
||||
// Returns the number of arguments passed to the console command
|
||||
const char *Cmd_Argv (int arg);
|
||||
// Returns the arg-th argument passed to the command, 0 being the name of the command
|
||||
const char *Cmd_Args (int start);
|
||||
// Returns the entire command line starting at the start-th token
|
||||
const char *Cmd_Argu (int arg);
|
||||
// Returns the unprocessed version of an argument
|
||||
const char *Cmd_Argsu (int arg);
|
||||
// Like Cmd_Args, but returns the unprocessed version
|
||||
|
||||
// The functions that execute commands get their parameters with these
|
||||
// functions. Cmd_Argv () will return an empty string, not a NULL
|
||||
// if arg > argc, so string operations are always safe.
|
||||
|
||||
|
||||
int Cmd_Process (void);
|
||||
// Processes all parsed tokens according to the type of buffer
|
||||
// and the settings of each token
|
||||
void Cmd_TokenizeString (const char *text, qboolean legacy);
|
||||
// Takes a null terminated string. Does not need to be /n terminated.
|
||||
// breaks the string up into arg tokens.
|
||||
|
||||
void Cmd_ExecuteParsed (cmd_source_t src);
|
||||
// Executes a previously tokenized command
|
||||
int Cmd_ExecuteString (const char *text, cmd_source_t src);
|
||||
// Executes a single command in the context of a private buffer
|
||||
// This allows the rest of QF to access console commands without
|
||||
// affecting the console buffer
|
||||
|
||||
|
||||
void Cmd_ForwardToServer (void);
|
||||
// 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_StuffCmds_f (void);
|
||||
// stuffs console commands on the command line into the console buffer
|
||||
|
||||
int Cmd_Argc (void);
|
||||
const char *Cmd_Argv (int arg);
|
||||
const char *Cmd_Args (int start);
|
||||
struct cbuf_args_s;
|
||||
void Cmd_Command (struct cbuf_args_s *args);
|
||||
int Cmd_ExecuteString (const char *text, cmd_source_t src);
|
||||
struct cbuf_s;
|
||||
void Cmd_StuffCmds (struct cbuf_s *cbuf);
|
||||
void Cmd_Exec_File (const char *path);
|
||||
// dumps a file into the console buffer. Does not execute it as a subroutine
|
||||
// like the exec command!
|
||||
|
||||
extern char *com_token;
|
||||
const char *COM_Parse (const char *data);
|
||||
// This is the legacy token parser. It exists only to satisfy certain portions
|
||||
// of the code
|
||||
|
||||
void Cmd_Return (const char *value);
|
||||
// Returns a value to GIB so that it can be picked up for embedded commands
|
||||
void Cmd_Error (const char *message);
|
||||
// Generates a GIB error
|
||||
qboolean Cmd_Restricted (void);
|
||||
// Returns true if current buffer is restricted
|
||||
void Cmd_Return (const char *value);
|
||||
void Cmd_Error (const char *message);
|
||||
|
||||
extern struct cbuf_args_s *cmd_args;
|
||||
extern struct cvar_s *cmd_warncmd;
|
||||
// Determines if warnings resulting from console commands are printed
|
||||
|
||||
extern cmd_buffer_t *cmd_legacybuffer; // Allow access to the legacy buffer as an alternate console buffer
|
||||
extern cmd_buffer_t *cmd_keybindbuffer; // Allow access to dedicated key binds command buffer
|
||||
|
||||
#endif // __cmd_h
|
||||
#endif//__QF_cmd_h
|
||||
|
|
|
@ -380,7 +380,7 @@ extern imt_t game_target;
|
|||
|
||||
extern struct keybind_s {
|
||||
char *str;
|
||||
qboolean restricted;
|
||||
struct cbuf_s *cbuf;
|
||||
} keybindings[IMT_LAST][QFK_LAST];
|
||||
extern int keydown[QFK_LAST];
|
||||
|
||||
|
@ -390,7 +390,7 @@ void Key_Init_Cvars (void);
|
|||
void Key_WriteBindings (VFile *f);
|
||||
void Key_ClearStates (void);
|
||||
const char *Key_GetBinding (imt_t imt, knum_t key);
|
||||
void Key_SetBinding (imt_t target, knum_t keynum, const char *binding, qboolean restricted);
|
||||
void Key_SetBinding (imt_t target, knum_t keynum, const char *binding);
|
||||
|
||||
|
||||
const char *Key_KeynumToString (knum_t keynum);
|
||||
|
|
|
@ -58,6 +58,7 @@ typedef struct console_data_s {
|
|||
int force_commandline;
|
||||
int ormask;
|
||||
void (*quit)(void);
|
||||
struct cbuf_s *cbuf;
|
||||
} console_data_t;
|
||||
|
||||
#endif // __QF_plugin_console_h_
|
||||
|
|
|
@ -40,6 +40,7 @@ static const char rcsid[] =
|
|||
#include <stdarg.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include "QF/cbuf.h"
|
||||
#include "QF/cmd.h"
|
||||
#include "QF/console.h"
|
||||
#include "QF/cvar.h"
|
||||
|
@ -290,17 +291,17 @@ C_ExecLine (const char *line)
|
|||
if (line[0] == '/' && line [1] == '/')
|
||||
goto no_lf;
|
||||
else if (line[0] == '|')
|
||||
Cbuf_AddText (line);
|
||||
Cbuf_AddText (con_data.cbuf, line);
|
||||
else if (line[0] == '\\' || line[0] == '/')
|
||||
Cbuf_AddText (line + 1);
|
||||
Cbuf_AddText (con_data.cbuf, line + 1);
|
||||
else if (cl_chatmode->int_val != 1 && CheckForCommand (line))
|
||||
Cbuf_AddText (line);
|
||||
Cbuf_AddText (con_data.cbuf, line);
|
||||
else if (cl_chatmode->int_val) {
|
||||
Cbuf_AddText ("say ");
|
||||
Cbuf_AddText (line);
|
||||
Cbuf_AddText (con_data.cbuf, "say ");
|
||||
Cbuf_AddText (con_data.cbuf, line);
|
||||
} else
|
||||
Cbuf_AddText (line);
|
||||
Cbuf_AddText ("\n");
|
||||
Cbuf_AddText (con_data.cbuf, line);
|
||||
Cbuf_AddText (con_data.cbuf, "\n");
|
||||
no_lf:
|
||||
Con_Printf ("%s\n", line);
|
||||
}
|
||||
|
@ -310,10 +311,9 @@ C_Say (const char *line)
|
|||
{
|
||||
dstring_t *dstr = dstring_newstr ();
|
||||
dstring_appendstr (dstr, line);
|
||||
escape (dstr, "\"$#~\\");
|
||||
Cbuf_AddTextTo (cmd_keybindbuffer, "say \"");
|
||||
Cbuf_AddTextTo (cmd_keybindbuffer, dstr->str);
|
||||
Cbuf_AddTextTo (cmd_keybindbuffer, "\"\n");
|
||||
Cbuf_AddText (con_data.cbuf, "say \"");
|
||||
Cbuf_AddText (con_data.cbuf, dstr->str);
|
||||
Cbuf_AddText (con_data.cbuf, "\"\n");
|
||||
dstring_delete (dstr);
|
||||
key_dest = key_game;
|
||||
game_target = IMT_0;
|
||||
|
@ -324,10 +324,9 @@ C_SayTeam (const char *line)
|
|||
{
|
||||
dstring_t *dstr = dstring_newstr ();
|
||||
dstring_appendstr (dstr, line);
|
||||
escape (dstr, "\"");
|
||||
Cbuf_AddTextTo (cmd_keybindbuffer, "say_team \"");
|
||||
Cbuf_AddTextTo (cmd_keybindbuffer, dstr->str);
|
||||
Cbuf_AddTextTo (cmd_keybindbuffer, "\"\n");
|
||||
Cbuf_AddText (con_data.cbuf, "say_team \"");
|
||||
Cbuf_AddText (con_data.cbuf, dstr->str);
|
||||
Cbuf_AddText (con_data.cbuf, "\"\n");
|
||||
dstring_delete (dstr);
|
||||
key_dest = key_game;
|
||||
game_target = IMT_0;
|
||||
|
@ -515,7 +514,7 @@ C_KeyEvent (knum_t key, short unicode, qboolean down)
|
|||
return;
|
||||
case key_console:
|
||||
if (!con_data.force_commandline) {
|
||||
Cbuf_AddTextTo (cmd_keybindbuffer, "toggleconsole\n");
|
||||
Cbuf_AddText (con_data.cbuf, "toggleconsole\n");
|
||||
return;
|
||||
}
|
||||
case key_game:
|
||||
|
|
|
@ -55,6 +55,7 @@ static const char rcsid[] =
|
|||
#include <signal.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "QF/cbuf.h"
|
||||
#include "QF/cmd.h"
|
||||
#include "QF/console.h"
|
||||
#include "QF/cvar.h"
|
||||
|
@ -66,6 +67,7 @@ static const char rcsid[] =
|
|||
|
||||
#include "compat.h"
|
||||
|
||||
static console_data_t con_data;
|
||||
|
||||
#ifdef HAVE_CURSES_H
|
||||
static int use_curses = 1;
|
||||
|
@ -115,7 +117,7 @@ C_ExecLine (const char *line)
|
|||
{
|
||||
if (line[0] == '/')
|
||||
line++;
|
||||
Cbuf_AddText (line);
|
||||
Cbuf_AddText (con_data.cbuf, line);
|
||||
}
|
||||
|
||||
static inline void
|
||||
|
@ -410,7 +412,7 @@ C_ProcessInput (void)
|
|||
const char *cmd = Sys_ConsoleInput ();
|
||||
if (!cmd)
|
||||
break;
|
||||
Cbuf_AddText (cmd);
|
||||
Cbuf_AddText (con_data.cbuf, cmd);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -448,7 +450,6 @@ static console_funcs_t plugin_info_console_funcs = {
|
|||
C_CheckResize,
|
||||
C_NewMap,
|
||||
};
|
||||
static console_data_t plugin_info_console_data;
|
||||
|
||||
static plugin_funcs_t plugin_info_funcs = {
|
||||
&plugin_info_general_funcs,
|
||||
|
@ -461,7 +462,7 @@ static plugin_data_t plugin_info_data = {
|
|||
&plugin_info_general_data,
|
||||
0,
|
||||
0,
|
||||
&plugin_info_console_data,
|
||||
&con_data,
|
||||
};
|
||||
|
||||
static plugin_t plugin_info = {
|
||||
|
|
|
@ -30,15 +30,25 @@ static const char rcsid[] =
|
|||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
#include "QF/cmd.h"
|
||||
#include "QF/cbuf.h"
|
||||
#include "QF/progs.h"
|
||||
|
||||
static cbuf_t *cbuf; //FIXME use a properly allocated cbuf rather than this hack
|
||||
|
||||
static inline void
|
||||
check_cbuf (void)
|
||||
{
|
||||
if (!cbuf)
|
||||
cbuf = Cbuf_New ();
|
||||
}
|
||||
|
||||
static void
|
||||
bi_Cbuf_AddText (progs_t *pr)
|
||||
{
|
||||
const char *text = P_STRING (pr, 0);
|
||||
|
||||
Cbuf_AddText (text);
|
||||
check_cbuf ();
|
||||
Cbuf_AddText (cbuf, text);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -46,19 +56,22 @@ bi_Cbuf_InsertText (progs_t *pr)
|
|||
{
|
||||
const char *text = P_STRING (pr, 0);
|
||||
|
||||
Cbuf_InsertText (text);
|
||||
check_cbuf ();
|
||||
Cbuf_InsertText (cbuf, text);
|
||||
}
|
||||
|
||||
static void
|
||||
bi_Cbuf_Execute (progs_t *pr)
|
||||
{
|
||||
Cbuf_Execute ();
|
||||
check_cbuf ();
|
||||
Cbuf_Execute (cbuf);
|
||||
}
|
||||
|
||||
static void
|
||||
bi_Cbuf_Execute_Sets (progs_t *pr)
|
||||
{
|
||||
Cbuf_Execute_Sets ();
|
||||
check_cbuf ();
|
||||
Cbuf_Execute_Sets (cbuf);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -142,12 +142,6 @@ bi_Cmd_Args (progs_t *pr)
|
|||
RETURN_STRING (pr, Cmd_Args (P_INT (pr, 0)));
|
||||
}
|
||||
|
||||
static void
|
||||
bi_Cmd_Argu (progs_t *pr)
|
||||
{
|
||||
RETURN_STRING (pr, Cmd_Argu (P_INT (pr, 0)));
|
||||
}
|
||||
|
||||
static void
|
||||
bi_Cmd_Return (progs_t *pr)
|
||||
{
|
||||
|
@ -172,6 +166,5 @@ Cmd_Progs_Init (progs_t *pr)
|
|||
PR_AddBuiltin (pr, "Cmd_Argc", bi_Cmd_Argc, -1);
|
||||
PR_AddBuiltin (pr, "Cmd_Argv", bi_Cmd_Argv, -1);
|
||||
PR_AddBuiltin (pr, "Cmd_Args", bi_Cmd_Args, -1);
|
||||
PR_AddBuiltin (pr, "Cmd_Argu", bi_Cmd_Argu, -1);
|
||||
PR_AddBuiltin (pr, "Cmd_Return", bi_Cmd_Return, -1);
|
||||
}
|
||||
|
|
|
@ -38,10 +38,20 @@ static const char rcsid[] =
|
|||
# include <strings.h>
|
||||
#endif
|
||||
|
||||
#include "QF/cbuf.h"
|
||||
#include "QF/keys.h"
|
||||
#include "QF/progs.h"
|
||||
#include "QF/zone.h"
|
||||
|
||||
static cbuf_t *cbuf; //FIXME use a properly allocated cbuf rather than this hack
|
||||
|
||||
static inline void
|
||||
check_cbuf (void)
|
||||
{
|
||||
if (!cbuf)
|
||||
cbuf = Cbuf_New ();
|
||||
}
|
||||
|
||||
/*
|
||||
bi_Key_SetBinding
|
||||
|
||||
|
@ -53,12 +63,16 @@ bi_Key_SetBinding (progs_t *pr)
|
|||
int target = P_INT (pr, 0);
|
||||
int keynum = P_INT (pr, 1);
|
||||
const char *binding = P_STRING (pr, 2);
|
||||
cbuf_t *tcb = cbuf_active;
|
||||
|
||||
if(strlen(binding) == 0 || binding[0] == '\0') {
|
||||
binding = NULL; /* unbind a binding */
|
||||
}
|
||||
|
||||
Key_SetBinding (target, keynum, binding, false);
|
||||
check_cbuf ();
|
||||
cbuf_active = cbuf;
|
||||
Key_SetBinding (target, keynum, binding);
|
||||
cbuf_active = tcb;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -39,7 +39,7 @@ static const char rcsid[] =
|
|||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "QF/cmd.h"
|
||||
#include "QF/cbuf.h"
|
||||
#include "QF/crc.h"
|
||||
#include "QF/cvar.h"
|
||||
#include "QF/hash.h"
|
||||
|
@ -785,6 +785,7 @@ ED_ParseEdict (progs_t * pr, const char *data, edict_t *ent)
|
|||
qboolean anglehack;
|
||||
qboolean init;
|
||||
char keyname[256];
|
||||
const char *token;
|
||||
int n;
|
||||
|
||||
init = false;
|
||||
|
@ -802,19 +803,19 @@ ED_ParseEdict (progs_t * pr, const char *data, edict_t *ent)
|
|||
if (!data)
|
||||
PR_Error (pr, "ED_ParseEntity: EOF without closing brace");
|
||||
|
||||
token = com_token;
|
||||
// anglehack is to allow QuakeEd to write single scalar angles
|
||||
// and allow them to be turned into vectors. (FIXME...)
|
||||
if (!strcmp (com_token, "angle")) {
|
||||
strcpy (com_token, "angles");
|
||||
if (!strcmp (token, "angle")) {
|
||||
token = "angles";
|
||||
anglehack = true;
|
||||
} else
|
||||
anglehack = false;
|
||||
|
||||
// FIXME: change light to _light to get rid of this hack
|
||||
if (!strcmp (com_token, "light"))
|
||||
strcpy (com_token, "light_lev"); // hack for single light def
|
||||
if (!strcmp (token, "light"))
|
||||
token = "light_lev"; // hack for single light def
|
||||
|
||||
strcpy (keyname, com_token);
|
||||
strcpy (keyname, token);
|
||||
|
||||
// another hack to fix heynames with trailing spaces
|
||||
n = strlen (keyname);
|
||||
|
|
|
@ -26,7 +26,7 @@ libQFutil_la_LDFLAGS= -version-info 1:0:0
|
|||
libQFutil_la_LIBADD= libasm.la $(Z_LIBS) $(DL_LIBS)
|
||||
libQFutil_la_DEPENDENCIES= libasm.la
|
||||
libQFutil_la_SOURCES= \
|
||||
buildnum.c checksum.c cmd.c crc.c cvar.c dstring.c exp.c fendian.c \
|
||||
buildnum.c cbuf.c checksum.c cmd.c crc.c cvar.c dstring.c exp.c fendian.c \
|
||||
getopt.c getopt1.c hash.c info.c link.c mathlib.c mdfour.c msg.c ops.c \
|
||||
pakfile.c pcx.c plugin.c qargs.c qendian.c qfplist.c quakefs.c quakeio.c \
|
||||
sizebuf.c string.c sys.c tga.c va.c ver_check.c wad.c zone.c $(fnmatch)
|
||||
|
|
|
@ -43,6 +43,7 @@ static const char rcsid[] =
|
|||
#include <stdlib.h>
|
||||
|
||||
#include "QF/cbuf.h"
|
||||
#include "QF/cmd.h"
|
||||
#include "QF/dstring.h"
|
||||
#include "QF/qtypes.h"
|
||||
|
||||
|
@ -50,6 +51,7 @@ static const char rcsid[] =
|
|||
|
||||
static dstring_t *_com_token;
|
||||
const char *com_token;
|
||||
cbuf_t *cbuf_active;
|
||||
|
||||
cbuf_args_t *
|
||||
Cbuf_ArgsNew (void)
|
||||
|
@ -184,7 +186,7 @@ extract_line (cbuf_t *cbuf)
|
|||
if (text[i] == '/' && text[i + 1] == '/') {
|
||||
int j = i;
|
||||
while (j < len && text[j] != '\n' && text[j] != '\r')
|
||||
i++;
|
||||
j++;
|
||||
dstring_snip (cbuf->buf, i, j - i);
|
||||
len -= j - i;
|
||||
}
|
||||
|
@ -248,25 +250,33 @@ Cbuf_InsertText (cbuf_t *cbuf, const char *text)
|
|||
void
|
||||
Cbuf_Execute (cbuf_t *cbuf)
|
||||
{
|
||||
cbuf_args_t *args = cbuf->args;
|
||||
|
||||
cbuf_active = cbuf;
|
||||
while (cbuf->buf->str[0]) {
|
||||
cbuf->extract_line (cbuf);
|
||||
cbuf->parse_line (cbuf);
|
||||
if (!cbuf->args->argc)
|
||||
if (!args->argc)
|
||||
continue;
|
||||
Cmd_ExecCmd (cbuf->args);
|
||||
Cmd_Command (args);
|
||||
if (cbuf->wait)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
Cbuf_Execute_Sets (cbuf_t *cbuf)
|
||||
{
|
||||
cbuf_args_t *args = cbuf->args;
|
||||
|
||||
cbuf_active = cbuf;
|
||||
while (cbuf->buf->str[0]) {
|
||||
cbuf->extract_line (cbuf);
|
||||
cbuf->parse_line (cbuf);
|
||||
if (!cbuf->args->argc)
|
||||
if (!args->argc)
|
||||
continue;
|
||||
if (strequal (cbuf->args->argv[0]->str, "set")
|
||||
|| strequal (cbuf->args->argv[0]->str, "setrom"))
|
||||
Cmd_ExecCmd (cbuf);
|
||||
if (strequal (args->argv[0]->str, "set")
|
||||
|| strequal (args->argv[0]->str, "setrom"))
|
||||
Cmd_Command (args);
|
||||
}
|
||||
}
|
||||
|
|
2354
libs/util/cmd.c
2354
libs/util/cmd.c
File diff suppressed because it is too large
Load diff
|
@ -41,6 +41,7 @@ static const char rcsid[] =
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "QF/cbuf.h"
|
||||
#include "QF/cmd.h"
|
||||
#include "QF/console.h"
|
||||
#include "QF/cvar.h"
|
||||
|
@ -385,10 +386,10 @@ Key_Game (knum_t key, short unicode)
|
|||
{
|
||||
const char *kb;
|
||||
char cmd[1024];
|
||||
cmd_buffer_t *tbuffer;
|
||||
cbuf_t *cbuf;
|
||||
|
||||
kb = Key_GetBinding(game_target, key);
|
||||
tbuffer = keybindings[game_target][key].restricted ? cmd_legacybuffer : cmd_keybindbuffer;
|
||||
cbuf = keybindings[game_target][key].cbuf;
|
||||
if (!kb && (game_target > IMT_0))
|
||||
kb = Key_GetBinding(IMT_0, key);
|
||||
|
||||
|
@ -399,20 +400,17 @@ Key_Game (knum_t key, short unicode)
|
|||
if (!kb)
|
||||
return false;
|
||||
|
||||
if (!keydown[key]) {
|
||||
if (kb[0] == '+') {
|
||||
snprintf (cmd, sizeof (cmd), "-%s %d\n", kb + 1, key);
|
||||
Cbuf_AddTextTo (tbuffer, cmd);
|
||||
}
|
||||
} else if (keydown[key] == 1) {
|
||||
if (kb[0] == '+') {
|
||||
if (kb[0] == '+') {
|
||||
if (keydown[key] == 1)
|
||||
snprintf (cmd, sizeof (cmd), "%s %d\n", kb, key);
|
||||
Cbuf_AddTextTo (tbuffer, cmd);
|
||||
} else {
|
||||
snprintf (cmd, sizeof (cmd), "%s\n", kb);
|
||||
Cbuf_AddTextTo (tbuffer, cmd);
|
||||
}
|
||||
else
|
||||
snprintf (cmd, sizeof (cmd), "-%s %d\n", kb + 1, key);
|
||||
} else {
|
||||
if (!keydown[key])
|
||||
return true;
|
||||
snprintf (cmd, sizeof (cmd), "%s\n", kb);
|
||||
}
|
||||
Cbuf_AddText (cbuf, cmd);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -535,7 +533,7 @@ Key_In_Unbind (const char *imt, const char *key)
|
|||
return;
|
||||
}
|
||||
|
||||
Key_SetBinding (t, b, NULL, false);
|
||||
Key_SetBinding (t, b, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -555,11 +553,11 @@ Key_Unbindall_f (void)
|
|||
|
||||
for (j = 0; j < IMT_LAST; j++)
|
||||
for (i = 0; i < QFK_LAST; i++)
|
||||
Key_SetBinding (j, i, NULL, false);
|
||||
Key_SetBinding (j, i, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
Key_In_Bind (const char *imt, const char *key, const char *cmd, qboolean restricted)
|
||||
Key_In_Bind (const char *imt, const char *key, const char *cmd)
|
||||
{
|
||||
int t, b;
|
||||
|
||||
|
@ -583,7 +581,7 @@ Key_In_Bind (const char *imt, const char *key, const char *cmd, qboolean restric
|
|||
Con_Printf ("%s %s is not bound\n", imt, key);
|
||||
return;
|
||||
}
|
||||
Key_SetBinding (t, b, cmd, restricted);
|
||||
Key_SetBinding (t, b, cmd);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -616,7 +614,7 @@ Key_In_Bind_f (void)
|
|||
}
|
||||
}
|
||||
|
||||
Key_In_Bind (imt, key, cmd, Cmd_Restricted ());
|
||||
Key_In_Bind (imt, key, cmd);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -661,7 +659,7 @@ Key_Bind_f (void)
|
|||
}
|
||||
}
|
||||
|
||||
Key_In_Bind (imt, key, cmd, Cmd_Restricted ());
|
||||
Key_In_Bind (imt, key, cmd);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -833,7 +831,7 @@ Key_GetBinding (imt_t imt, knum_t key)
|
|||
}
|
||||
|
||||
void
|
||||
Key_SetBinding (imt_t target, knum_t keynum, const char *binding, qboolean restricted)
|
||||
Key_SetBinding (imt_t target, knum_t keynum, const char *binding)
|
||||
{
|
||||
if (keynum == -1)
|
||||
return;
|
||||
|
@ -847,5 +845,5 @@ Key_SetBinding (imt_t target, knum_t keynum, const char *binding, qboolean restr
|
|||
if (binding) {
|
||||
keybindings[target][keynum].str = strdup(binding);
|
||||
}
|
||||
keybindings[target][keynum].restricted = restricted;
|
||||
keybindings[target][keynum].cbuf = cbuf_active;
|
||||
}
|
||||
|
|
|
@ -388,4 +388,6 @@ void CL_UpdateScreen (double realtime);
|
|||
|
||||
void CL_SetState (cactive_t state);
|
||||
|
||||
void CL_Cmd_ForwardToServer (void);
|
||||
|
||||
#endif // __client_h
|
||||
|
|
|
@ -58,6 +58,8 @@ extern int host_framecount; // incremented every frame, never reset
|
|||
extern double realtime; // not bounded in any way, changed at
|
||||
// start of every frame, never reset
|
||||
|
||||
extern struct cbuf_s *host_cbuf;
|
||||
|
||||
void Host_ClearMemory (void);
|
||||
void Host_ServerFrame (void);
|
||||
void Host_InitCommands (void);
|
||||
|
|
|
@ -46,12 +46,12 @@ static const char rcsid[] =
|
|||
|
||||
|
||||
/*
|
||||
Cmd_ForwardToServer
|
||||
CL_Cmd_ForwardToServer
|
||||
|
||||
Sends the entire command line over to the server
|
||||
*/
|
||||
void
|
||||
Cmd_ForwardToServer (void)
|
||||
CL_Cmd_ForwardToServer (void)
|
||||
{
|
||||
if (cls.state != ca_connected) {
|
||||
Con_Printf ("Can't \"%s\", not connected\n", Cmd_Argv (0));
|
||||
|
@ -76,7 +76,7 @@ void
|
|||
cl_Cmd_Init (void)
|
||||
{
|
||||
// register our commands
|
||||
Cmd_AddCommand ("cmd", Cmd_ForwardToServer, "Send a command to the "
|
||||
Cmd_AddCommand ("cmd", CL_Cmd_ForwardToServer, "Send a command to the "
|
||||
"server.\n"
|
||||
"Commands:\n"
|
||||
"download - Same as the command.\n"
|
||||
|
|
|
@ -31,6 +31,7 @@ static const char rcsid[] =
|
|||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#include "QF/cbuf.h"
|
||||
#include "QF/cmd.h"
|
||||
#include "QF/console.h"
|
||||
#include "QF/cvar.h"
|
||||
|
@ -356,7 +357,7 @@ CL_NextDemo (void)
|
|||
}
|
||||
|
||||
snprintf (str, sizeof (str), "playdemo %s\n", cls.demos[cls.demonum]);
|
||||
Cbuf_InsertText (str);
|
||||
Cbuf_InsertText (host_cbuf, str);
|
||||
cls.demonum++;
|
||||
}
|
||||
|
||||
|
|
|
@ -37,6 +37,7 @@ static const char rcsid[] =
|
|||
# include <strings.h>
|
||||
#endif
|
||||
|
||||
#include "QF/cbuf.h"
|
||||
#include "QF/cdaudio.h"
|
||||
#include "QF/cmd.h"
|
||||
#include "QF/console.h"
|
||||
|
@ -773,7 +774,7 @@ CL_ParseServerMessage (void)
|
|||
break;
|
||||
|
||||
case svc_stufftext:
|
||||
Cbuf_AddTextTo (cmd_legacybuffer, MSG_ReadString (net_message));
|
||||
Cbuf_AddText (host_cbuf, MSG_ReadString (net_message));
|
||||
break;
|
||||
|
||||
case svc_damage:
|
||||
|
|
|
@ -31,6 +31,7 @@ static const char rcsid[] =
|
|||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#include "QF/cbuf.h"
|
||||
#include "QF/cdaudio.h"
|
||||
#include "QF/cmd.h"
|
||||
#include "QF/console.h"
|
||||
|
@ -78,6 +79,8 @@ qboolean host_initialized; // true if into command execution
|
|||
|
||||
quakeparms_t host_parms;
|
||||
|
||||
cbuf_t *host_cbuf;
|
||||
|
||||
double host_frametime;
|
||||
double host_time;
|
||||
double realtime; // without any filtering or bounding
|
||||
|
@ -599,7 +602,8 @@ _Host_Frame (float time)
|
|||
}
|
||||
|
||||
// process console commands
|
||||
Cbuf_Execute ();
|
||||
cmd_source = src_command;
|
||||
Cbuf_Execute (host_cbuf);
|
||||
|
||||
NET_Poll ();
|
||||
|
||||
|
@ -843,17 +847,19 @@ Host_Init (void)
|
|||
{
|
||||
Con_Printf ("Host_Init\n");
|
||||
|
||||
host_cbuf = Cbuf_New ();
|
||||
cmd_source = src_command;
|
||||
|
||||
Cvar_Init_Hash ();
|
||||
Cmd_Init_Hash ();
|
||||
Cvar_Init ();
|
||||
Sys_Init_Cvars ();
|
||||
|
||||
Cbuf_Init ();
|
||||
Cmd_Init ();
|
||||
|
||||
// execute +set as early as possible
|
||||
Cmd_StuffCmds_f ();
|
||||
Cbuf_Execute_Sets ();
|
||||
Cmd_StuffCmds (host_cbuf);
|
||||
Cbuf_Execute_Sets (host_cbuf);
|
||||
|
||||
// execute the global configuration file if it exists
|
||||
// would have been nice if Cmd_Exec_f could have been used, but it
|
||||
|
@ -862,20 +868,20 @@ Host_Init (void)
|
|||
fs_globalcfg = Cvar_Get ("fs_globalcfg", FS_GLOBALCFG,
|
||||
CVAR_ROM, NULL, "global configuration file");
|
||||
Cmd_Exec_File (fs_globalcfg->string);
|
||||
Cbuf_Execute_Sets ();
|
||||
Cbuf_Execute_Sets (host_cbuf);
|
||||
|
||||
// execute +set again to override the config file
|
||||
Cmd_StuffCmds_f ();
|
||||
Cbuf_Execute_Sets ();
|
||||
Cmd_StuffCmds (host_cbuf);
|
||||
Cbuf_Execute_Sets (host_cbuf);
|
||||
|
||||
fs_usercfg = Cvar_Get ("fs_usercfg", FS_USERCFG, CVAR_ROM, NULL,
|
||||
"user configuration file");
|
||||
Cmd_Exec_File (fs_usercfg->string);
|
||||
Cbuf_Execute_Sets ();
|
||||
Cbuf_Execute_Sets (host_cbuf);
|
||||
|
||||
// execute +set again to override the config file
|
||||
Cmd_StuffCmds_f ();
|
||||
Cbuf_Execute_Sets ();
|
||||
Cmd_StuffCmds (host_cbuf);
|
||||
Cbuf_Execute_Sets (host_cbuf);
|
||||
|
||||
CL_Init_Memory ();
|
||||
|
||||
|
@ -915,6 +921,7 @@ Host_Init (void)
|
|||
if (con_module) {
|
||||
con_module->data->console->realtime = &realtime;
|
||||
con_module->data->console->quit = Host_Quit_f;
|
||||
con_module->data->console->cbuf = host_cbuf;
|
||||
}
|
||||
|
||||
Host_InitVCR (&host_parms);
|
||||
|
@ -958,12 +965,12 @@ Host_Init (void)
|
|||
Host_Skin_Init ();
|
||||
|
||||
if (!isDedicated && cl_quakerc->int_val)
|
||||
Cbuf_InsertText ("exec quake.rc\n");
|
||||
Cbuf_InsertText (host_cbuf, "exec quake.rc\n");
|
||||
Cmd_Exec_File (fs_usercfg->string);
|
||||
// reparse the command line for + commands other than set
|
||||
// (sets still done, but it doesn't matter)
|
||||
if (isDedicated || (cl_quakerc->int_val && check_quakerc ()))
|
||||
Cmd_StuffCmds_f ();
|
||||
Cmd_StuffCmds (host_cbuf);
|
||||
|
||||
Hunk_AllocName (0, "-HOST_HUNKLEVEL-");
|
||||
host_hunklevel = Hunk_LowMark ();
|
||||
|
|
|
@ -31,8 +31,8 @@ static const char rcsid[] =
|
|||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#include "QF/cbuf.h"
|
||||
#include "QF/cmd.h"
|
||||
#include "compat.h"
|
||||
#include "QF/cvar.h"
|
||||
#include "QF/va.h"
|
||||
#include "QF/screen.h"
|
||||
|
@ -43,6 +43,7 @@ static const char rcsid[] =
|
|||
#include "QF/sys.h"
|
||||
|
||||
#include "client.h"
|
||||
#include "compat.h"
|
||||
#include "host.h"
|
||||
#include "server.h"
|
||||
#include "sv_progs.h"
|
||||
|
@ -80,7 +81,7 @@ Host_Status_f (void)
|
|||
|
||||
if (cmd_source == src_command) {
|
||||
if (!sv.active) {
|
||||
Cmd_ForwardToServer ();
|
||||
CL_Cmd_ForwardToServer ();
|
||||
return;
|
||||
}
|
||||
print = Con_Printf;
|
||||
|
@ -124,7 +125,7 @@ void
|
|||
Host_God_f (void)
|
||||
{
|
||||
if (cmd_source == src_command) {
|
||||
Cmd_ForwardToServer ();
|
||||
CL_Cmd_ForwardToServer ();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -142,7 +143,7 @@ void
|
|||
Host_Notarget_f (void)
|
||||
{
|
||||
if (cmd_source == src_command) {
|
||||
Cmd_ForwardToServer ();
|
||||
CL_Cmd_ForwardToServer ();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -163,7 +164,7 @@ void
|
|||
Host_Noclip_f (void)
|
||||
{
|
||||
if (cmd_source == src_command) {
|
||||
Cmd_ForwardToServer ();
|
||||
CL_Cmd_ForwardToServer ();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -190,7 +191,7 @@ void
|
|||
Host_Fly_f (void)
|
||||
{
|
||||
if (cmd_source == src_command) {
|
||||
Cmd_ForwardToServer ();
|
||||
CL_Cmd_ForwardToServer ();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -214,7 +215,7 @@ Host_Ping_f (void)
|
|||
client_t *client;
|
||||
|
||||
if (cmd_source == src_command) {
|
||||
Cmd_ForwardToServer ();
|
||||
CL_Cmd_ForwardToServer ();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -631,7 +632,7 @@ Host_Name_f (void)
|
|||
return;
|
||||
Cvar_Set (cl_name, va ("%.15s", newName));
|
||||
if (cls.state == ca_connected)
|
||||
Cmd_ForwardToServer ();
|
||||
CL_Cmd_ForwardToServer ();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -670,7 +671,7 @@ Host_Say (qboolean teamonly)
|
|||
fromServer = true;
|
||||
teamonly = false;
|
||||
} else {
|
||||
Cmd_ForwardToServer ();
|
||||
CL_Cmd_ForwardToServer ();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -736,7 +737,7 @@ Host_Tell_f (void)
|
|||
char text[64];
|
||||
|
||||
if (cmd_source == src_command) {
|
||||
Cmd_ForwardToServer ();
|
||||
CL_Cmd_ForwardToServer ();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -779,7 +780,7 @@ void
|
|||
Host_Kill_f (void)
|
||||
{
|
||||
if (cmd_source == src_command) {
|
||||
Cmd_ForwardToServer ();
|
||||
CL_Cmd_ForwardToServer ();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -798,7 +799,7 @@ Host_Pause_f (void)
|
|||
{
|
||||
|
||||
if (cmd_source == src_command) {
|
||||
Cmd_ForwardToServer ();
|
||||
CL_Cmd_ForwardToServer ();
|
||||
return;
|
||||
}
|
||||
if (!pausable->int_val)
|
||||
|
@ -979,7 +980,7 @@ Host_Kick_f (void)
|
|||
|
||||
if (cmd_source == src_command) {
|
||||
if (!sv.active) {
|
||||
Cmd_ForwardToServer ();
|
||||
CL_Cmd_ForwardToServer ();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -1051,7 +1052,7 @@ Host_Give_f (void)
|
|||
int v;
|
||||
|
||||
if (cmd_source == src_command) {
|
||||
Cmd_ForwardToServer ();
|
||||
CL_Cmd_ForwardToServer ();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1274,7 +1275,7 @@ Host_Startdemos_f (void)
|
|||
|
||||
if (cls.state == ca_dedicated) {
|
||||
if (!sv.active)
|
||||
Cbuf_AddText ("map start\n");
|
||||
Cbuf_AddText (host_cbuf, "map start\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -88,7 +88,7 @@ Host_Color_f (void)
|
|||
if (cmd_source == src_command) {
|
||||
Cvar_SetValue (cl_color, playercolor);
|
||||
if (cls.state == ca_connected)
|
||||
Cmd_ForwardToServer ();
|
||||
CL_Cmd_ForwardToServer ();
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -148,7 +148,7 @@ NET_Ban_f (void)
|
|||
|
||||
if (cmd_source == src_command) {
|
||||
if (!sv.active) {
|
||||
Cmd_ForwardToServer ();
|
||||
CL_Cmd_ForwardToServer ();
|
||||
return;
|
||||
}
|
||||
print = Con_Printf;
|
||||
|
|
|
@ -37,6 +37,7 @@ static const char rcsid[] =
|
|||
# include <strings.h>
|
||||
#endif
|
||||
|
||||
#include "QF/cbuf.h"
|
||||
#include "QF/cmd.h"
|
||||
#include "QF/console.h"
|
||||
#include "QF/cvar.h"
|
||||
|
@ -45,6 +46,8 @@ static const char rcsid[] =
|
|||
#include "QF/sizebuf.h"
|
||||
#include "QF/sys.h"
|
||||
#include "QF/vfile.h"
|
||||
|
||||
#include "host.h"
|
||||
#include "net.h"
|
||||
#include "net_vcr.h"
|
||||
#include "server.h"
|
||||
|
@ -246,10 +249,10 @@ MaxPlayers_f (void)
|
|||
}
|
||||
|
||||
if ((n == 1) && listening)
|
||||
Cbuf_AddText ("listen 0\n");
|
||||
Cbuf_AddText (host_cbuf, "listen 0\n");
|
||||
|
||||
if ((n > 1) && (!listening))
|
||||
Cbuf_AddText ("listen 1\n");
|
||||
Cbuf_AddText (host_cbuf, "listen 1\n");
|
||||
|
||||
svs.maxclients = n;
|
||||
if (n == 1)
|
||||
|
@ -280,8 +283,8 @@ NET_Port_f (void)
|
|||
|
||||
if (listening) {
|
||||
// force a change to the new port
|
||||
Cbuf_AddText ("listen 0\n");
|
||||
Cbuf_AddText ("listen 1\n");
|
||||
Cbuf_AddText (host_cbuf, "listen 0\n");
|
||||
Cbuf_AddText (host_cbuf, "listen 1\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -37,6 +37,7 @@ static const char rcsid[] =
|
|||
# include <strings.h>
|
||||
#endif
|
||||
|
||||
#include "QF/cbuf.h"
|
||||
#include "QF/clip_hull.h"
|
||||
#include "QF/console.h"
|
||||
#include "QF/cvar.h"
|
||||
|
@ -631,7 +632,7 @@ PF_localcmd (progs_t *pr)
|
|||
const char *str;
|
||||
|
||||
str = P_STRING (pr, 0);
|
||||
Cbuf_AddText (str);
|
||||
Cbuf_AddText (host_cbuf, str);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1167,7 +1168,7 @@ PF_changelevel (progs_t *pr)
|
|||
svs.changelevel_issued = true;
|
||||
|
||||
s = P_STRING (pr, 0);
|
||||
Cbuf_AddText (va ("changelevel %s\n", s));
|
||||
Cbuf_AddText (host_cbuf, va ("changelevel %s\n", s));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -80,7 +80,7 @@ CL_UpdateScreen (double realtime)
|
|||
}
|
||||
|
||||
void
|
||||
Cmd_ForwardToServer (void)
|
||||
CL_Cmd_ForwardToServer (void)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
@ -31,6 +31,7 @@ static const char rcsid[] =
|
|||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#include "QF/cbuf.h"
|
||||
#include "QF/console.h"
|
||||
#include "QF/cmd.h"
|
||||
#include "QF/cvar.h"
|
||||
|
@ -529,7 +530,7 @@ SV_ReadClientMessage (void)
|
|||
else if (strncasecmp (s, "ban", 3) == 0)
|
||||
ret = 1;
|
||||
if (ret == 2)
|
||||
Cbuf_InsertText (s);
|
||||
Cbuf_InsertText (host_cbuf, s);
|
||||
else if (ret == 1)
|
||||
Cmd_ExecuteString (s, src_client);
|
||||
else
|
||||
|
|
|
@ -338,6 +338,8 @@ extern char *server_version; // version of server we connected to
|
|||
|
||||
extern double realtime;
|
||||
|
||||
extern struct cbuf_s *cl_cbuf;
|
||||
|
||||
|
||||
void Cvar_Info (struct cvar_s *var);
|
||||
|
||||
|
@ -350,6 +352,9 @@ void V_ParseDamage (void);
|
|||
|
||||
void V_PrepBlend (void);
|
||||
|
||||
void CL_Cmd_ForwardToServer (void);
|
||||
void CL_Cmd_Init (void);
|
||||
|
||||
#define RSSHOT_WIDTH 320
|
||||
#define RSSHOT_HEIGHT 200
|
||||
|
||||
|
|
|
@ -420,6 +420,9 @@ extern struct progs_s sv_pr_state;
|
|||
|
||||
extern const char *client_info_filters[];
|
||||
|
||||
extern struct cbuf_s *sv_cbuf;
|
||||
extern struct cbuf_args_s *sv_args;
|
||||
|
||||
//===========================================================
|
||||
// FIXME: declare exported functions in their own relevant .h
|
||||
|
||||
|
|
|
@ -37,8 +37,9 @@ static const char rcsid[] =
|
|||
# include <strings.h>
|
||||
#endif
|
||||
|
||||
#include "QF/console.h"
|
||||
#include "QF/cbuf.h"
|
||||
#include "QF/cmd.h"
|
||||
#include "QF/console.h"
|
||||
#include "QF/msg.h"
|
||||
#include "QF/teamplay.h"
|
||||
|
||||
|
@ -46,14 +47,14 @@ static const char rcsid[] =
|
|||
|
||||
|
||||
/*
|
||||
Cmd_ForwardToServer
|
||||
CL_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)
|
||||
CL_Cmd_ForwardToServer (void)
|
||||
{
|
||||
if (cls.state == ca_disconnected) {
|
||||
Con_Printf ("Can't \"%s\", not connected\n", Cmd_Argv (0));
|
||||
|
@ -91,7 +92,7 @@ Cmd_ForwardToServer (void)
|
|||
|
||||
// don't forward the first argument
|
||||
void
|
||||
Cmd_ForwardToServer_f (void)
|
||||
CL_Cmd_ForwardToServer_f (void)
|
||||
{
|
||||
if (cls.state == ca_disconnected) {
|
||||
Con_Printf ("Can't \"%s\", not connected\n", Cmd_Argv (0));
|
||||
|
@ -99,7 +100,7 @@ Cmd_ForwardToServer_f (void)
|
|||
}
|
||||
|
||||
if (strcasecmp (Cmd_Argv (1), "snap") == 0) {
|
||||
Cbuf_InsertText ("snap\n");
|
||||
Cbuf_InsertText (cl_cbuf, "snap\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -113,10 +114,10 @@ Cmd_ForwardToServer_f (void)
|
|||
}
|
||||
|
||||
void
|
||||
cl_Cmd_Init (void)
|
||||
CL_Cmd_Init (void)
|
||||
{
|
||||
// register our commands
|
||||
Cmd_AddCommand ("cmd", Cmd_ForwardToServer_f, "Send a command to the "
|
||||
Cmd_AddCommand ("cmd", CL_Cmd_ForwardToServer_f, "Send a command to the "
|
||||
"server.\n"
|
||||
"Commands:\n"
|
||||
"download - Same as the command.\n"
|
||||
|
|
|
@ -63,6 +63,7 @@ static const char rcsid[] =
|
|||
# undef model_t // allow qf to use it's model_t
|
||||
#endif
|
||||
|
||||
#include "QF/cbuf.h"
|
||||
#include "QF/cdaudio.h"
|
||||
#include "QF/cmd.h"
|
||||
#include "QF/console.h"
|
||||
|
@ -120,6 +121,8 @@ void CL_RemoveQFInfoKeys ();
|
|||
|
||||
qboolean noclip_anglehack; // remnant from old quake
|
||||
|
||||
cbuf_t *cl_cbuf;
|
||||
|
||||
cvar_t *fs_globalcfg;
|
||||
cvar_t *fs_usercfg;
|
||||
|
||||
|
@ -730,7 +733,7 @@ CL_SetInfo_f (void)
|
|||
(!strequal (Cmd_Argv (1), "name")) |
|
||||
(strequal (Cmd_Argv (2), "team") << 1));
|
||||
if (cls.state >= ca_connected)
|
||||
Cmd_ForwardToServer ();
|
||||
CL_Cmd_ForwardToServer ();
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -813,7 +816,7 @@ CL_NextDemo (void)
|
|||
}
|
||||
|
||||
snprintf (str, sizeof (str), "playdemo %s\n", cls.demos[cls.demonum]);
|
||||
Cbuf_InsertText (str);
|
||||
Cbuf_InsertText (cl_cbuf, str);
|
||||
cls.demonum++;
|
||||
}
|
||||
|
||||
|
@ -952,7 +955,7 @@ CL_ConnectionlessPacket (void)
|
|||
}
|
||||
|
||||
Con_Printf ("%s\n", cmdtext);
|
||||
Cbuf_AddText (cmdtext);
|
||||
Cbuf_AddText (cl_cbuf, cmdtext);
|
||||
allowremotecmd = false;
|
||||
return;
|
||||
}
|
||||
|
@ -1236,13 +1239,13 @@ CL_Init (void)
|
|||
Cmd_AddCommand ("force_centerview", Force_CenterView_f, "force the view "
|
||||
"to be level");
|
||||
// forward to server commands
|
||||
Cmd_AddCommand ("kill", Cmd_ForwardToServer, "Suicide :)");
|
||||
Cmd_AddCommand ("pause", Cmd_ForwardToServer, "Pause the game");
|
||||
Cmd_AddCommand ("say", Cmd_ForwardToServer, "Say something to all other "
|
||||
Cmd_AddCommand ("kill", CL_Cmd_ForwardToServer, "Suicide :)");
|
||||
Cmd_AddCommand ("pause", CL_Cmd_ForwardToServer, "Pause the game");
|
||||
Cmd_AddCommand ("say", CL_Cmd_ForwardToServer, "Say something to all other "
|
||||
"players");
|
||||
Cmd_AddCommand ("say_team", Cmd_ForwardToServer, "Say something only to "
|
||||
Cmd_AddCommand ("say_team", CL_Cmd_ForwardToServer, "Say something only to "
|
||||
"people on your team");
|
||||
Cmd_AddCommand ("serverinfo", Cmd_ForwardToServer, "Report the current "
|
||||
Cmd_AddCommand ("serverinfo", CL_Cmd_ForwardToServer, "Report the current "
|
||||
"server info");
|
||||
}
|
||||
|
||||
|
@ -1531,7 +1534,7 @@ Host_Frame (float time)
|
|||
IN_Commands ();
|
||||
|
||||
// process console commands
|
||||
Cbuf_Execute ();
|
||||
Cbuf_Execute (cl_cbuf);
|
||||
|
||||
// fetch results from server
|
||||
CL_ReadPackets ();
|
||||
|
@ -1659,17 +1662,18 @@ CL_Init_Memory (void)
|
|||
void
|
||||
Host_Init (void)
|
||||
{
|
||||
cl_cbuf = Cbuf_New ();
|
||||
|
||||
Cvar_Init_Hash ();
|
||||
Cmd_Init_Hash ();
|
||||
Cvar_Init ();
|
||||
Sys_Init_Cvars ();
|
||||
|
||||
Cbuf_Init ();
|
||||
Cmd_Init ();
|
||||
|
||||
// execute +set as early as possible
|
||||
Cmd_StuffCmds_f ();
|
||||
Cbuf_Execute_Sets ();
|
||||
Cmd_StuffCmds (cl_cbuf);
|
||||
Cbuf_Execute_Sets (cl_cbuf);
|
||||
|
||||
// execute the global configuration file if it exists
|
||||
// would have been nice if Cmd_Exec_f could have been used, but it
|
||||
|
@ -1678,20 +1682,20 @@ Host_Init (void)
|
|||
fs_globalcfg = Cvar_Get ("fs_globalcfg", FS_GLOBALCFG, CVAR_ROM, NULL,
|
||||
"global configuration file");
|
||||
Cmd_Exec_File (fs_globalcfg->string);
|
||||
Cbuf_Execute_Sets ();
|
||||
Cbuf_Execute_Sets (cl_cbuf);
|
||||
|
||||
// execute +set again to override the config file
|
||||
Cmd_StuffCmds_f ();
|
||||
Cbuf_Execute_Sets ();
|
||||
Cmd_StuffCmds (cl_cbuf);
|
||||
Cbuf_Execute_Sets (cl_cbuf);
|
||||
|
||||
fs_usercfg = Cvar_Get ("fs_usercfg", FS_USERCFG, CVAR_ROM, NULL,
|
||||
"user configuration file");
|
||||
Cmd_Exec_File (fs_usercfg->string);
|
||||
Cbuf_Execute_Sets ();
|
||||
Cbuf_Execute_Sets (cl_cbuf);
|
||||
|
||||
// execute +set again to override the config file
|
||||
Cmd_StuffCmds_f ();
|
||||
Cbuf_Execute_Sets ();
|
||||
Cmd_StuffCmds (cl_cbuf);
|
||||
Cbuf_Execute_Sets (cl_cbuf);
|
||||
|
||||
CL_Init_Memory ();
|
||||
|
||||
|
@ -1727,7 +1731,7 @@ Host_Init (void)
|
|||
PR_Init ();
|
||||
BI_Init ();
|
||||
|
||||
cl_Cmd_Init ();
|
||||
CL_Cmd_Init ();
|
||||
V_Init ();
|
||||
COM_Filesystem_Init ();
|
||||
Game_Init ();
|
||||
|
@ -1740,6 +1744,7 @@ Host_Init (void)
|
|||
con_module->data->console->dl_percent = &cls.downloadpercent;
|
||||
con_module->data->console->realtime = &realtime;
|
||||
con_module->data->console->quit = CL_Quit_f;
|
||||
con_module->data->console->cbuf = cl_cbuf;
|
||||
}
|
||||
|
||||
NET_Init (cl_port->int_val);
|
||||
|
@ -1785,12 +1790,12 @@ Host_Init (void)
|
|||
Locs_Init ();
|
||||
|
||||
if (cl_quakerc->int_val)
|
||||
Cbuf_InsertText ("exec quake.rc\n");
|
||||
Cbuf_InsertText (cl_cbuf, "exec quake.rc\n");
|
||||
Cmd_Exec_File (fs_usercfg->string);
|
||||
// Reparse the command line for + commands.
|
||||
// (Note, no non-base commands exist yet)
|
||||
if (!cl_quakerc->int_val || check_quakerc ())
|
||||
Cmd_StuffCmds_f ();
|
||||
Cmd_StuffCmds (cl_cbuf);
|
||||
|
||||
Hunk_AllocName (0, "-HOST_HUNKLEVEL-");
|
||||
host_hunklevel = Hunk_LowMark ();
|
||||
|
@ -1805,9 +1810,10 @@ Host_Init (void)
|
|||
|
||||
CL_UpdateScreen (realtime);
|
||||
|
||||
Cbuf_AddText ("echo Type connect <internet address> or use a server "
|
||||
Cbuf_AddText (cl_cbuf,
|
||||
"echo Type connect <internet address> or use a server "
|
||||
"browser to connect to a game.\n");
|
||||
Cbuf_AddText ("cmd_warncmd 1\n");
|
||||
Cbuf_AddText (cl_cbuf, "cmd_warncmd 1\n");
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -43,6 +43,7 @@ static const char rcsid[] =
|
|||
# include <unistd.h>
|
||||
#endif
|
||||
|
||||
#include "QF/cbuf.h"
|
||||
#include "QF/cdaudio.h"
|
||||
#include "QF/cmd.h"
|
||||
#include "QF/console.h"
|
||||
|
@ -629,14 +630,14 @@ CL_ParseServerData (void)
|
|||
if (cflag) {
|
||||
int cmd_warncmd_val = cmd_warncmd->int_val;
|
||||
|
||||
Cbuf_AddText ("cmd_warncmd 0\n");
|
||||
Cbuf_AddText ("exec config.cfg\n");
|
||||
Cbuf_AddText ("exec frontend.cfg\n");
|
||||
Cbuf_AddText (cl_cbuf, "cmd_warncmd 0\n");
|
||||
Cbuf_AddText (cl_cbuf, "exec config.cfg\n");
|
||||
Cbuf_AddText (cl_cbuf, "exec frontend.cfg\n");
|
||||
if (cl_autoexec->int_val) {
|
||||
Cbuf_AddText ("exec autoexec.cfg\n");
|
||||
Cbuf_AddText (cl_cbuf, "exec autoexec.cfg\n");
|
||||
}
|
||||
snprintf (fn, sizeof (fn), "cmd_warncmd %d\n", cmd_warncmd_val);
|
||||
Cbuf_AddText (fn);
|
||||
Cbuf_AddText (cl_cbuf, fn);
|
||||
}
|
||||
// parse player slot, high bit means spectator
|
||||
cl.playernum = MSG_ReadByte (net_message);
|
||||
|
@ -1187,12 +1188,12 @@ CL_ParseServerMessage (void)
|
|||
if (s[strlen (s) - 1] == '\n') {
|
||||
if (stuffbuf && stuffbuf->str[0]) {
|
||||
Con_DPrintf ("stufftext: %s%s\n", stuffbuf->str, s);
|
||||
Cbuf_AddTextTo (cmd_legacybuffer, stuffbuf->str);
|
||||
Cbuf_AddText (cl_cbuf, stuffbuf->str);
|
||||
dstring_clearstr (stuffbuf);
|
||||
} else {
|
||||
Con_DPrintf ("stufftext: %s\n", s);
|
||||
}
|
||||
Cbuf_AddTextTo (cmd_legacybuffer, s);
|
||||
Cbuf_AddText (cl_cbuf, s);
|
||||
} else {
|
||||
Con_DPrintf ("partial stufftext: %s\n", s);
|
||||
if (!stuffbuf)
|
||||
|
@ -1206,7 +1207,8 @@ CL_ParseServerMessage (void)
|
|||
break;
|
||||
|
||||
case svc_serverdata:
|
||||
Cbuf_Execute (); // make sure any stuffed commands are done
|
||||
// make sure any stuffed commands are done
|
||||
Cbuf_Execute (cl_cbuf);
|
||||
CL_ParseServerData ();
|
||||
vid.recalc_refdef = true; // leave full screen intermission
|
||||
break;
|
||||
|
|
|
@ -388,16 +388,18 @@ SV_Map_f (void)
|
|||
level[sizeof (level) - 1] = 0;
|
||||
|
||||
// check to make sure the level exists
|
||||
snprintf (expanded, sizeof (expanded), "maps/%s.bsp", level);
|
||||
COM_FOpenFile (expanded, &f);
|
||||
if (!f) {
|
||||
SV_Printf ("Can't find %s\n", expanded);
|
||||
// If curlevel == level, something is SCREWED! --KB
|
||||
if (strcaseequal (level, curlevel))
|
||||
Sys_Error ("map: cannot restart level");
|
||||
else
|
||||
Cbuf_AddText (va ("map %s", curlevel));
|
||||
return;
|
||||
while (1) {
|
||||
snprintf (expanded, sizeof (expanded), "maps/%s.bsp", level);
|
||||
COM_FOpenFile (expanded, &f);
|
||||
if (!f) {
|
||||
SV_Printf ("Can't find %s\n", expanded);
|
||||
// If curlevel == level, something is SCREWED! --KB
|
||||
if (strcaseequal (level, curlevel))
|
||||
Sys_Error ("map: cannot restart level");
|
||||
strcpy (level, curlevel);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
Qclose (f);
|
||||
|
||||
|
|
|
@ -66,6 +66,7 @@ static const char rcsid[] =
|
|||
# undef model_t // allow qf to use it's model_t
|
||||
#endif
|
||||
|
||||
#include "QF/cbuf.h"
|
||||
#include "QF/cmd.h"
|
||||
#include "QF/console.h"
|
||||
#include "QF/cvar.h"
|
||||
|
@ -96,6 +97,9 @@ static plugin_list_t server_plugin_list[] = {
|
|||
SERVER_PLUGIN_LIST
|
||||
};
|
||||
|
||||
cbuf_t *sv_cbuf;
|
||||
cbuf_args_t *sv_args;
|
||||
|
||||
client_t *host_client; // current client
|
||||
client_static_t cls; //FIXME needed by netchan :/
|
||||
|
||||
|
@ -531,7 +535,6 @@ SVC_Status (void)
|
|||
return;
|
||||
|
||||
con_printf_no_log = 1;
|
||||
Cmd_TokenizeString ("status", true);
|
||||
SV_BeginRedirect (RD_PACKET);
|
||||
SV_Printf ("%s\n", Info_MakeString (svs.info, 0));
|
||||
for (i = 0; i < MAX_CLIENTS; i++) {
|
||||
|
@ -1044,9 +1047,10 @@ SV_ConnectionlessPacket (void)
|
|||
|
||||
s = MSG_ReadString (net_message);
|
||||
|
||||
Cmd_TokenizeString (s, true);
|
||||
COM_TokenizeString (s, sv_args);
|
||||
cmd_args = sv_args;
|
||||
|
||||
c = Cmd_Argv (0);
|
||||
c = sv_args->argv[0]->str;
|
||||
|
||||
if (!strcmp (c, "ping")
|
||||
|| (c[0] == A2A_PING && (c[1] == 0 || c[1] == '\n'))) {
|
||||
|
@ -1908,7 +1912,7 @@ SV_Frame (float time)
|
|||
SV_GetConsoleCommands ();
|
||||
|
||||
// process console commands
|
||||
Cbuf_Execute ();
|
||||
Cbuf_Execute (sv_cbuf);
|
||||
|
||||
SV_CheckVars ();
|
||||
|
||||
|
@ -2401,6 +2405,9 @@ SV_Init (void)
|
|||
// COM_AddParm ("-game");
|
||||
// COM_AddParm ("qw");
|
||||
|
||||
sv_cbuf = Cbuf_New ();
|
||||
sv_args = Cbuf_ArgsNew ();
|
||||
|
||||
Sys_RegisterShutdown (SV_Shutdown);
|
||||
|
||||
Cvar_Init_Hash ();
|
||||
|
@ -2410,12 +2417,11 @@ SV_Init (void)
|
|||
|
||||
Cvar_Get ("cmd_warncmd", "1", CVAR_NONE, NULL, NULL);
|
||||
|
||||
Cbuf_Init ();
|
||||
Cmd_Init ();
|
||||
|
||||
// execute +set as early as possible
|
||||
Cmd_StuffCmds_f ();
|
||||
Cbuf_Execute_Sets ();
|
||||
Cmd_StuffCmds (sv_cbuf);
|
||||
Cbuf_Execute_Sets (sv_cbuf);
|
||||
|
||||
// execute the global configuration file if it exists
|
||||
// would have been nice if Cmd_Exec_f could have been used, but it
|
||||
|
@ -2424,20 +2430,20 @@ SV_Init (void)
|
|||
fs_globalcfg = Cvar_Get ("fs_globalcfg", FS_GLOBALCFG,
|
||||
CVAR_ROM, 0, "global configuration file");
|
||||
Cmd_Exec_File (fs_globalcfg->string);
|
||||
Cbuf_Execute_Sets ();
|
||||
Cbuf_Execute_Sets (sv_cbuf);
|
||||
|
||||
// execute +set again to override the config file
|
||||
Cmd_StuffCmds_f ();
|
||||
Cbuf_Execute_Sets ();
|
||||
Cmd_StuffCmds (sv_cbuf);
|
||||
Cbuf_Execute_Sets (sv_cbuf);
|
||||
|
||||
fs_usercfg = Cvar_Get ("fs_usercfg", FS_USERCFG,
|
||||
CVAR_ROM, 0, "user configuration file");
|
||||
Cmd_Exec_File (fs_usercfg->string);
|
||||
Cbuf_Execute_Sets ();
|
||||
Cbuf_Execute_Sets (sv_cbuf);
|
||||
|
||||
// execute +set again to override the config file
|
||||
Cmd_StuffCmds_f ();
|
||||
Cbuf_Execute_Sets ();
|
||||
Cmd_StuffCmds (sv_cbuf);
|
||||
Cbuf_Execute_Sets (sv_cbuf);
|
||||
|
||||
SV_Init_Memory ();
|
||||
|
||||
|
@ -2452,6 +2458,8 @@ SV_Init (void)
|
|||
CVAR_ROM, 0, "Plugin used for the console");
|
||||
PI_RegisterPlugins (server_plugin_list);
|
||||
Con_Init (sv_console_plugin->string);
|
||||
if (con_module)
|
||||
con_module->data->console->cbuf = sv_cbuf;
|
||||
Sys_SetStdPrintf (SV_Print);
|
||||
Sys_SetErrPrintf (SV_Error);
|
||||
|
||||
|
@ -2465,8 +2473,8 @@ SV_Init (void)
|
|||
PR_Init_Cvars ();
|
||||
|
||||
// and now reprocess the cmdline's sets for overrides
|
||||
Cmd_StuffCmds_f ();
|
||||
Cbuf_Execute_Sets ();
|
||||
Cmd_StuffCmds (sv_cbuf);
|
||||
Cbuf_Execute_Sets (sv_cbuf);
|
||||
|
||||
COM_Filesystem_Init ();
|
||||
Game_Init ();
|
||||
|
@ -2484,7 +2492,7 @@ SV_Init (void)
|
|||
Hunk_AllocName (0, "-HOST_HUNKLEVEL-");
|
||||
host_hunklevel = Hunk_LowMark ();
|
||||
|
||||
Cbuf_InsertText ("exec server.cfg\n");
|
||||
Cbuf_InsertText (sv_cbuf, "exec server.cfg\n");
|
||||
|
||||
host_initialized = true;
|
||||
|
||||
|
@ -2500,8 +2508,8 @@ SV_Init (void)
|
|||
|
||||
// process command line arguments
|
||||
Cmd_Exec_File (fs_usercfg->string);
|
||||
Cmd_StuffCmds_f ();
|
||||
Cbuf_Execute ();
|
||||
Cmd_StuffCmds (sv_cbuf);
|
||||
Cbuf_Execute (sv_cbuf);
|
||||
|
||||
// if a map wasn't specified on the command line, spawn start.map
|
||||
if (sv.state == ss_dead)
|
||||
|
|
|
@ -37,6 +37,7 @@ static const char rcsid[] =
|
|||
# include <strings.h>
|
||||
#endif
|
||||
|
||||
#include "QF/cbuf.h"
|
||||
#include "QF/clip_hull.h"
|
||||
#include "QF/cmd.h"
|
||||
#include "QF/cvar.h"
|
||||
|
@ -586,7 +587,7 @@ PF_localcmd (progs_t *pr)
|
|||
const char *str;
|
||||
|
||||
str = P_STRING (pr, 0);
|
||||
Cbuf_AddText (str);
|
||||
Cbuf_AddText (sv_cbuf, str);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1202,7 +1203,7 @@ PF_changelevel (progs_t *pr)
|
|||
last_spawncount = svs.spawncount;
|
||||
|
||||
s = P_STRING (pr, 0);
|
||||
Cbuf_AddText (va ("map %s\n", s));
|
||||
Cbuf_AddText (sv_cbuf, va ("map %s\n", s));
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -42,10 +42,12 @@ static const char rcsid[] =
|
|||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#include "QF/cbuf.h"
|
||||
#include "QF/checksum.h"
|
||||
#include "QF/clip_hull.h"
|
||||
#include "QF/cmd.h"
|
||||
#include "QF/cvar.h"
|
||||
#include "QF/dstring.h"
|
||||
#include "QF/hash.h"
|
||||
#include "QF/msg.h"
|
||||
#include "QF/sys.h"
|
||||
|
@ -1291,14 +1293,15 @@ SV_ExecuteUserCommand (const char *s)
|
|||
{
|
||||
ucmd_t *u;
|
||||
|
||||
Cmd_TokenizeString (s, true);
|
||||
COM_TokenizeString (s, sv_args);
|
||||
cmd_args = sv_args;
|
||||
sv_player = host_client->edict;
|
||||
|
||||
u = (ucmd_t*) Hash_Find (ucmd_table, Cmd_Argv(0));
|
||||
u = (ucmd_t*) Hash_Find (ucmd_table, sv_args->argv[0]->str);
|
||||
|
||||
if (!u) {
|
||||
SV_BeginRedirect (RD_CLIENT);
|
||||
SV_Printf ("Bad user command: %s\n", Cmd_Argv (0));
|
||||
SV_Printf ("Bad user command: %s\n", sv_args->argv[0]->str);
|
||||
SV_EndRedirect ();
|
||||
} else {
|
||||
if (!u->no_redirect)
|
||||
|
|
|
@ -41,6 +41,7 @@ static const char rcsid[] =
|
|||
|
||||
#include <ctype.h>
|
||||
|
||||
#include "QF/cbuf.h"
|
||||
#include "QF/console.h"
|
||||
#include "QF/cmd.h"
|
||||
#include "QF/cvar.h"
|
||||
|
@ -460,7 +461,7 @@ Team_ParseChat (const char *string)
|
|||
if (!strncmp(f_replies[i].name, s, strlen(f_replies[i].name)) && cl_freply->value) {
|
||||
while (*s && !isspace((byte) *s))
|
||||
s++;
|
||||
Cbuf_AddText(f_replies[i].func(s));
|
||||
Cbuf_AddText(cl_cbuf, f_replies[i].func(s));
|
||||
f_replies[i].lasttime = realtime;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -165,7 +165,6 @@ init_qf (void)
|
|||
Cmd_Init_Hash ();
|
||||
Cvar_Init ();
|
||||
Sys_Init_Cvars ();
|
||||
Cbuf_Init ();
|
||||
Cmd_Init ();
|
||||
|
||||
membase = malloc (memsize);
|
||||
|
|
|
@ -66,7 +66,6 @@ main ()
|
|||
SYS_CHECKMEM (membase);
|
||||
Memory_Init (membase, memsize);
|
||||
Cvar_Init ();
|
||||
Cbuf_Init ();
|
||||
Cmd_Init ();
|
||||
|
||||
Cvar_Get ("pr_debug", "1", 0, 0, 0);
|
||||
|
|
Loading…
Reference in a new issue