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
|
||||
qboolean stdin_active = true;
|
||||
|
||||
// Terminal supports colors
|
||||
static qboolean color_active = false;
|
||||
|
||||
// Config dir
|
||||
char cfgdir[MAX_OSPATH] = CFGDIR;
|
||||
|
||||
|
@ -107,6 +110,37 @@ Sys_Quit(void)
|
|||
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
|
||||
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);
|
||||
}
|
||||
|
||||
|
|
|
@ -236,6 +236,12 @@ Sys_ConsoleOutput(char *string)
|
|||
char text[256];
|
||||
DWORD dummy;
|
||||
|
||||
if ((string[0] == 0x01) || (string[0] == 0x02))
|
||||
{
|
||||
// remove color marker
|
||||
string[0] = ' ';
|
||||
}
|
||||
|
||||
if (!dedicated || !dedicated->value)
|
||||
{
|
||||
fputs(string, stdout);
|
||||
|
|
|
@ -34,6 +34,7 @@ FILE *logfile;
|
|||
cvar_t *logfile_active; /* 1 = buffer log, 2 = flush after each print */
|
||||
jmp_buf abortframe; /* an ERR_DROP occured, exit the entire frame */
|
||||
int server_state;
|
||||
cvar_t *color_terminal;
|
||||
|
||||
static int rd_target;
|
||||
static char *rd_buffer;
|
||||
|
@ -105,10 +106,22 @@ Com_VPrintf(int print_level, const char *fmt, va_list argptr)
|
|||
Con_Print(msg);
|
||||
#endif
|
||||
|
||||
if ((msg[0] == 0x01 || msg[0] == 0x02) &&
|
||||
color_terminal && color_terminal->value)
|
||||
{
|
||||
// skip color marker
|
||||
i = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
i = 0;
|
||||
}
|
||||
|
||||
// remove unprintable characters
|
||||
for(i=0; i<msgLen; ++i)
|
||||
for(; i<msgLen; ++i)
|
||||
{
|
||||
char c = msg[i];
|
||||
|
||||
if(c < ' ' && (c < '\t' || c > '\r'))
|
||||
{
|
||||
switch(c)
|
||||
|
@ -143,6 +156,12 @@ Com_VPrintf(int print_level, const char *fmt, va_list argptr)
|
|||
{
|
||||
char name[MAX_OSPATH];
|
||||
|
||||
if ((msg[0] == 0x01) || (msg[0] == 0x02))
|
||||
{
|
||||
// remove color marker
|
||||
msg[0] = ' ';
|
||||
}
|
||||
|
||||
if (!logfile)
|
||||
{
|
||||
Com_sprintf(name, sizeof(name), "%s/qconsole.log", FS_Gamedir());
|
||||
|
|
|
@ -35,6 +35,7 @@ cvar_t *fixedtime;
|
|||
cvar_t *cl_maxfps;
|
||||
cvar_t *dedicated;
|
||||
|
||||
extern cvar_t *color_terminal;
|
||||
extern cvar_t *logfile_active;
|
||||
extern jmp_buf abortframe; /* an ERR_DROP occured, exit the entire frame */
|
||||
extern zhead_t z_chain;
|
||||
|
@ -353,6 +354,7 @@ Qcommon_Init(int argc, char **argv)
|
|||
developer = Cvar_Get("developer", "0", 0);
|
||||
fixedtime = Cvar_Get("fixedtime", "0", 0);
|
||||
|
||||
color_terminal = Cvar_Get("colorterminal", "1", CVAR_ARCHIVE);
|
||||
logfile_active = Cvar_Get("logfile", "1", CVAR_ARCHIVE);
|
||||
modder = Cvar_Get("modder", "0", 0);
|
||||
timescale = Cvar_Get("timescale", "1", 0);
|
||||
|
|
Loading…
Reference in a new issue