mirror of
https://github.com/yquake2/yquake2remaster.git
synced 2024-11-10 07:12:07 +00:00
Linux: Add color output for console
Usecase: show map name on level load. Add colorterminal cvar for disable. xfce4-terminal has: * TERM=xterm-256color * COLORTERM=truecolor
This commit is contained in:
parent
1a450ef23d
commit
66d0751caf
4 changed files with 85 additions and 1 deletions
|
@ -53,6 +53,9 @@ static void *game_library;
|
||||||
// Evil hack to determine if stdin is available
|
// Evil hack to determine if stdin is available
|
||||||
qboolean stdin_active = true;
|
qboolean stdin_active = true;
|
||||||
|
|
||||||
|
// Terminal supports colors
|
||||||
|
static qboolean color_active = false;
|
||||||
|
|
||||||
// Config dir
|
// Config dir
|
||||||
char cfgdir[MAX_OSPATH] = CFGDIR;
|
char cfgdir[MAX_OSPATH] = CFGDIR;
|
||||||
|
|
||||||
|
@ -107,6 +110,37 @@ Sys_Quit(void)
|
||||||
void
|
void
|
||||||
Sys_Init(void)
|
Sys_Init(void)
|
||||||
{
|
{
|
||||||
|
char *envvar;
|
||||||
|
|
||||||
|
envvar = getenv("TERM");
|
||||||
|
if (envvar && strstr(envvar, "color"))
|
||||||
|
{
|
||||||
|
char buf[256];
|
||||||
|
|
||||||
|
color_active = true;
|
||||||
|
|
||||||
|
snprintf(buf, sizeof(buf),
|
||||||
|
"\2Terminal supports colors: TERM='%s'\n", envvar);
|
||||||
|
|
||||||
|
Sys_ConsoleOutput(buf);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
envvar = getenv("COLORTERM");
|
||||||
|
if (envvar && strlen(envvar))
|
||||||
|
{
|
||||||
|
char buf[256];
|
||||||
|
color_active = true;
|
||||||
|
|
||||||
|
snprintf(buf, sizeof(buf),
|
||||||
|
"\2Terminal supports colors: COLORTERM='%s'\n", envvar);
|
||||||
|
|
||||||
|
Sys_ConsoleOutput(buf);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Sys_ConsoleOutput("Terminal has no colors support.\n");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ================================================================ */
|
/* ================================================================ */
|
||||||
|
@ -160,6 +194,29 @@ Sys_ConsoleInput(void)
|
||||||
void
|
void
|
||||||
Sys_ConsoleOutput(char *string)
|
Sys_ConsoleOutput(char *string)
|
||||||
{
|
{
|
||||||
|
if ((string[0] == 0x01) || (string[0] == 0x02))
|
||||||
|
{
|
||||||
|
if (color_active)
|
||||||
|
{
|
||||||
|
if (string[0] == 0x01)
|
||||||
|
{
|
||||||
|
/* red */
|
||||||
|
fputs("\033[40m\033[31;1m", stdout);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* green */
|
||||||
|
fputs("\033[40m\033[32;1m", stdout);
|
||||||
|
}
|
||||||
|
|
||||||
|
fputs(string + 1, stdout);
|
||||||
|
|
||||||
|
/* back to black */
|
||||||
|
fputs("\033[40m\033[37;1m", stdout);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fputs(string, stdout);
|
fputs(string, stdout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -236,6 +236,12 @@ Sys_ConsoleOutput(char *string)
|
||||||
char text[256];
|
char text[256];
|
||||||
DWORD dummy;
|
DWORD dummy;
|
||||||
|
|
||||||
|
if ((string[0] == 0x01) || (string[0] == 0x02))
|
||||||
|
{
|
||||||
|
// remove color marker
|
||||||
|
string[0] = ' ';
|
||||||
|
}
|
||||||
|
|
||||||
if (!dedicated || !dedicated->value)
|
if (!dedicated || !dedicated->value)
|
||||||
{
|
{
|
||||||
fputs(string, stdout);
|
fputs(string, stdout);
|
||||||
|
|
|
@ -34,6 +34,7 @@ FILE *logfile;
|
||||||
cvar_t *logfile_active; /* 1 = buffer log, 2 = flush after each print */
|
cvar_t *logfile_active; /* 1 = buffer log, 2 = flush after each print */
|
||||||
jmp_buf abortframe; /* an ERR_DROP occured, exit the entire frame */
|
jmp_buf abortframe; /* an ERR_DROP occured, exit the entire frame */
|
||||||
int server_state;
|
int server_state;
|
||||||
|
cvar_t *color_terminal;
|
||||||
|
|
||||||
static int rd_target;
|
static int rd_target;
|
||||||
static char *rd_buffer;
|
static char *rd_buffer;
|
||||||
|
@ -105,10 +106,22 @@ Com_VPrintf(int print_level, const char *fmt, va_list argptr)
|
||||||
Con_Print(msg);
|
Con_Print(msg);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if ((msg[0] == 0x01 || msg[0] == 0x02) &&
|
||||||
|
color_terminal && color_terminal->value)
|
||||||
|
{
|
||||||
|
// skip color marker
|
||||||
|
i = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
i = 0;
|
||||||
|
}
|
||||||
|
|
||||||
// remove unprintable characters
|
// remove unprintable characters
|
||||||
for(i=0; i<msgLen; ++i)
|
for(; i<msgLen; ++i)
|
||||||
{
|
{
|
||||||
char c = msg[i];
|
char c = msg[i];
|
||||||
|
|
||||||
if(c < ' ' && (c < '\t' || c > '\r'))
|
if(c < ' ' && (c < '\t' || c > '\r'))
|
||||||
{
|
{
|
||||||
switch(c)
|
switch(c)
|
||||||
|
@ -143,6 +156,12 @@ Com_VPrintf(int print_level, const char *fmt, va_list argptr)
|
||||||
{
|
{
|
||||||
char name[MAX_OSPATH];
|
char name[MAX_OSPATH];
|
||||||
|
|
||||||
|
if ((msg[0] == 0x01) || (msg[0] == 0x02))
|
||||||
|
{
|
||||||
|
// remove color marker
|
||||||
|
msg[0] = ' ';
|
||||||
|
}
|
||||||
|
|
||||||
if (!logfile)
|
if (!logfile)
|
||||||
{
|
{
|
||||||
Com_sprintf(name, sizeof(name), "%s/qconsole.log", FS_Gamedir());
|
Com_sprintf(name, sizeof(name), "%s/qconsole.log", FS_Gamedir());
|
||||||
|
|
|
@ -35,6 +35,7 @@ cvar_t *fixedtime;
|
||||||
cvar_t *cl_maxfps;
|
cvar_t *cl_maxfps;
|
||||||
cvar_t *dedicated;
|
cvar_t *dedicated;
|
||||||
|
|
||||||
|
extern cvar_t *color_terminal;
|
||||||
extern cvar_t *logfile_active;
|
extern cvar_t *logfile_active;
|
||||||
extern jmp_buf abortframe; /* an ERR_DROP occured, exit the entire frame */
|
extern jmp_buf abortframe; /* an ERR_DROP occured, exit the entire frame */
|
||||||
extern zhead_t z_chain;
|
extern zhead_t z_chain;
|
||||||
|
@ -353,6 +354,7 @@ Qcommon_Init(int argc, char **argv)
|
||||||
developer = Cvar_Get("developer", "0", 0);
|
developer = Cvar_Get("developer", "0", 0);
|
||||||
fixedtime = Cvar_Get("fixedtime", "0", 0);
|
fixedtime = Cvar_Get("fixedtime", "0", 0);
|
||||||
|
|
||||||
|
color_terminal = Cvar_Get("colorterminal", "1", CVAR_ARCHIVE);
|
||||||
logfile_active = Cvar_Get("logfile", "1", CVAR_ARCHIVE);
|
logfile_active = Cvar_Get("logfile", "1", CVAR_ARCHIVE);
|
||||||
modder = Cvar_Get("modder", "0", 0);
|
modder = Cvar_Get("modder", "0", 0);
|
||||||
timescale = Cvar_Get("timescale", "1", 0);
|
timescale = Cvar_Get("timescale", "1", 0);
|
||||||
|
|
Loading…
Reference in a new issue