*/
// console.c
-#ifdef NeXT
-#include <libc.h>
+#ifndef WIN32
+# include <unistd.h>
#endif
-#ifndef _MSC_VER
-#ifndef __BORLANDC__
-#include <unistd.h>
-#endif
-#endif
-#ifdef WIN32
-#include <io.h>
-#endif
-#include <fcntl.h>
#include "quakedef.h"
int con_linewidth;
//seconds
cvar_t con_notifytime = {CVAR_SAVE, "con_notifytime","3"};
+cvar_t con_notify = {CVAR_SAVE, "con_notify","4"};
cvar_t logfile = {0, "logfile","0"};
-#define NUM_CON_TIMES 4
-// realtime time the line was generated for transparent notify lines
-float con_times[NUM_CON_TIMES];
+#define MAX_NOTIFYLINES 32
+// cl.time time the line was generated for transparent notify lines
+float con_times[MAX_NOTIFYLINES];
int con_vislines;
mempool_t *console_mempool;
-// scan lines to clear for notify lines
-int con_notifylines;
-
extern void M_Menu_Main_f (void);
/*
{
int i;
- for (i=0 ; i<NUM_CON_TIMES ; i++)
+ for (i=0 ; i<MAX_NOTIFYLINES ; i++)
con_times[i] = 0;
}
Con_MessageMode_f
================
*/
-extern qboolean team_message;
-
void Con_MessageMode_f (void)
{
key_dest = key_message;
- team_message = false;
+ chat_team = false;
}
void Con_MessageMode2_f (void)
{
key_dest = key_message;
- team_message = true;
+ chat_team = true;
}
}
-/*
-================
-Con_Init
-================
-*/
-void Con_Init (void)
+void Con_InitLogging (void)
{
#define MAXGAMEDIRLEN 1000
char temp[MAXGAMEDIRLEN+1];
char *t2 = "/qconsole.log";
- Cvar_RegisterVariable(&logfile);
con_debuglog = COM_CheckParm("-condebug");
-
if (con_debuglog)
{
- if (strlen (com_gamedir) < (MAXGAMEDIRLEN - strlen (t2)))
+ if (strlen (fs_gamedir) < (MAXGAMEDIRLEN - strlen (t2)))
{
- sprintf (temp, "%s%s", com_gamedir, t2);
+ sprintf (temp, "%s%s", fs_gamedir, t2);
unlink (temp);
}
logfile.integer = 1;
}
+}
+
+/*
+================
+Con_Init
+================
+*/
+void Con_Init (void)
+{
+ Cvar_RegisterVariable(&logfile);
console_mempool = Mem_AllocPool("console");
con_text = Mem_Alloc(console_mempool, CON_TEXTSIZE);
con_linewidth = -1;
Con_CheckResize ();
- Con_Printf ("Console initialized.\n");
+ Con_Print("Console initialized.\n");
//
// register our commands
//
Cvar_RegisterVariable (&con_notifytime);
+ Cvar_RegisterVariable (&con_notify);
Cmd_AddCommand ("toggleconsole", Con_ToggleConsole_f);
Cmd_AddCommand ("messagemode", Con_MessageMode_f);
/*
================
-Con_Print
+Con_PrintToHistory
Handles cursor positioning, line wrapping, etc
-All console printing must go through this in order to be logged to disk
+All console printing must go through this in order to be displayed
If no console is visible, the notify window will pop up.
================
*/
-void Con_Print (const char *txt)
+void Con_PrintToHistory(const char *txt)
{
int y, c, l, mask;
static int cr;
Con_Linefeed ();
// mark time for transparent overlay
if (con_current >= 0)
- con_times[con_current % NUM_CON_TIMES] = realtime;
+ {
+ if (con_notify.integer < 0)
+ Cvar_SetValueQuick(&con_notify, 0);
+ if (con_notify.integer > MAX_NOTIFYLINES)
+ Cvar_SetValueQuick(&con_notify, MAX_NOTIFYLINES);
+ if (con_notify.integer > 0)
+ con_times[con_current % con_notify.integer] = cl.time;
+ }
}
switch (c)
}
}
+// LordHavoc: increased from 4096 to 16384
+#define MAXPRINTMSG 16384
/*
================
-Con_DebugLog
+Con_LogPrint
================
*/
-void Con_DebugLog(const char *file, const char *fmt, ...)
+void Con_LogPrint(const char *logfilename, const char *msg)
{
- va_list argptr;
- FILE* fd;
-
- fd = fopen(file, "at");
- va_start(argptr, fmt);
- vfprintf (fd, fmt, argptr);
- va_end(argptr);
- fclose(fd);
+ qfile_t *file;
+ file = FS_Open(logfilename, "at", true);
+ if (file)
+ {
+ FS_Print(file, msg);
+ FS_Close(file);
+ }
}
-
/*
================
-Con_Printf
-
-Handles cursor positioning, line wrapping, etc
+Con_LogPrintf
================
*/
-// LordHavoc: increased from 4096 to 16384
-#define MAXPRINTMSG 16384
-// FIXME: make a buffer size safe vsprintf?
-void Con_Printf (const char *fmt, ...)
+void Con_LogPrintf(const char *logfilename, const char *fmt, ...)
{
va_list argptr;
char msg[MAXPRINTMSG];
- va_start (argptr,fmt);
- vsprintf (msg,fmt,argptr);
- va_end (argptr);
+ va_start(argptr,fmt);
+ vsprintf(msg,fmt,argptr);
+ va_end(argptr);
+
+ Con_LogPrint(logfilename, msg);
+}
-// also echo to debugging console
- Sys_Printf ("%s", msg);
+/*
+================
+Con_Print
-// log all messages to file
+Prints to all appropriate console targets
+================
+*/
+void Con_Print(const char *msg)
+{
+ // also echo to debugging console
+ Sys_Print(msg);
+
+ // log all messages to file
if (con_debuglog)
- {
- // can't use va() here because it might overwrite other important things
- char logname[MAX_OSPATH];
- sprintf(logname, "%s/qconsole.log", com_gamedir);
- Con_DebugLog(logname, "%s", msg);
- }
+ Con_LogPrint("qconsole.log", msg);
if (!con_initialized)
return;
if (cls.state == ca_dedicated)
return; // no graphics mode
-// write it to the scrollable buffer
- Con_Print (msg);
+ // write it to the scrollable buffer
+ Con_PrintToHistory(msg);
+}
+
+/*
+================
+Con_Printf
+
+Prints to all appropriate console targets
+================
+*/
+void Con_Printf(const char *fmt, ...)
+{
+ va_list argptr;
+ char msg[MAXPRINTMSG];
+
+ va_start(argptr,fmt);
+ vsprintf(msg,fmt,argptr);
+ va_end(argptr);
+
+ Con_Print(msg);
+}
+
+/*
+================
+Con_DPrint
+
+A Con_Print that only shows up if the "developer" cvar is set
+================
+*/
+void Con_DPrint(const char *msg)
+{
+ if (!developer.integer)
+ return; // don't confuse non-developers with techie stuff...
+ Con_Print(msg);
}
/*
A Con_Printf that only shows up if the "developer" cvar is set
================
*/
-void Con_DPrintf (const char *fmt, ...)
+void Con_DPrintf(const char *fmt, ...)
{
va_list argptr;
char msg[MAXPRINTMSG];
if (!developer.integer)
return; // don't confuse non-developers with techie stuff...
- va_start (argptr,fmt);
- vsprintf (msg,fmt,argptr);
- va_end (argptr);
+ va_start(argptr,fmt);
+ vsprintf(msg,fmt,argptr);
+ va_end(argptr);
- Con_Printf ("%s", msg);
+ Con_Print(msg);
}
+/*
+================
+Con_SafePrint
+
+Okay to call even when the screen can't be updated
+==================
+*/
+void Con_SafePrint(const char *msg)
+{
+ Con_Print(msg);
+}
+
/*
==================
Con_SafePrintf
Okay to call even when the screen can't be updated
==================
*/
-void Con_SafePrintf (const char *fmt, ...)
+void Con_SafePrintf(const char *fmt, ...)
{
- va_list argptr;
- char msg[1024];
+ va_list argptr;
+ char msg[MAXPRINTMSG];
- va_start (argptr,fmt);
- vsprintf (msg,fmt,argptr);
- va_end (argptr);
+ va_start(argptr,fmt);
+ vsprintf(msg,fmt,argptr);
+ va_end(argptr);
- Con_Printf ("%s", msg);
+ Con_Print(msg);
}
*/
void Con_DrawInput (void)
{
- char editlinecopy[256], *text;
+ char editlinecopy[257], *text;
if (!key_consoleactive)
return; // don't draw anything
extern char chat_buffer[];
char temptext[256];
+ if (con_notify.integer < 0)
+ Cvar_SetValueQuick(&con_notify, 0);
+ if (con_notify.integer > MAX_NOTIFYLINES)
+ Cvar_SetValueQuick(&con_notify, MAX_NOTIFYLINES);
v = 0;
- for (i= con_current-NUM_CON_TIMES+1 ; i<=con_current ; i++)
+ for (i= con_current-con_notify.integer+1 ; i<=con_current ; i++)
{
if (i < 0)
continue;
- time = con_times[i % NUM_CON_TIMES];
+ time = con_times[i % con_notify.integer];
if (time == 0)
continue;
- time = realtime - time;
+ time = cl.time - time;
if (time > con_notifytime.value)
continue;
text = con_text + (i % con_totallines)*con_linewidth;
x = 0;
// LordHavoc: speedup, and other improvements
- if (team_message)
+ if (chat_team)
sprintf(temptext, "say_team:%s%c", chat_buffer, (int) 10+((int)(realtime*con_cursorspeed)&1));
else
sprintf(temptext, "say:%s%c", chat_buffer, (int) 10+((int)(realtime*con_cursorspeed)&1));
v += 8;
}
}
-
- if (v > con_notifylines)
- con_notifylines = v;
}
/*
The typing input line at the bottom should only be drawn if typing is allowed
================
*/
-extern cvar_t scr_conalpha;
extern char engineversion[40];
void Con_DrawConsole (int lines)
{
return;
// draw the background
- DrawQ_Pic(0, lines - vid.conheight, "gfx/conback", vid.conwidth, vid.conheight, 1, 1, 1, scr_conalpha.value * lines / vid.conheight, 0);
+ if (scr_conbrightness.value >= 0.01f)
+ DrawQ_Pic(0, lines - vid.conheight, "gfx/conback", vid.conwidth, vid.conheight, scr_conbrightness.value, scr_conbrightness.value, scr_conbrightness.value, scr_conalpha.value, 0);
+ else
+ DrawQ_Fill(0, lines - vid.conheight, vid.conwidth, vid.conheight, 0, 0, 0, scr_conalpha.value, 0);
DrawQ_String(vid.conwidth - strlen(engineversion) * 8 - 8, lines - 8, engineversion, 0, 8, 8, 1, 0, 0, 1, 0);
// draw the text
while (*list) {
len = strlen(*list);
if (pos + maxlen >= width) {
- Con_Printf("\n");
+ Con_Print("\n");
pos = 0;
}
- Con_Printf("%s", *list);
+ Con_Print(*list);
for (i = 0; i < (maxlen - len); i++)
- Con_Printf(" ");
+ Con_Print(" ");
pos += maxlen;
list++;
}
if (pos)
- Con_Printf("\n\n");
+ Con_Print("\n\n");
}
/*
cmd_len++;
} while (i == 3);
// 'quakebar'
- Con_Printf("\n\35");
+ Con_Print("\n\35");
for (i = 0; i < con_linewidth - 4; i++)
- Con_Printf("\36");
- Con_Printf("\37\n");
+ Con_Print("\36");
+ Con_Print("\37\n");
// Print Possible Commands
if (c) {