mirror of
https://bitbucket.org/CPMADevs/cnq3
synced 2025-02-17 01:11:20 +00:00
removing color codes before printing to the terminal
fixed Download_CleanUp calling closesocket on socket 0, messing with stdin
This commit is contained in:
parent
ac48bc3248
commit
484e9e7e40
3 changed files with 48 additions and 21 deletions
|
@ -143,6 +143,8 @@ add: automatic dedicated server process restarts for crashes and timed reboots (
|
||||||
this means 2 CNQ3 processes run per server: a parent (fixed pid) and a child (new pid after each restart)
|
this means 2 CNQ3 processes run per server: a parent (fixed pid) and a child (new pid after each restart)
|
||||||
this behavior can be disabled by passing "nohardreboot" as a command-line argument
|
this behavior can be disabled by passing "nohardreboot" as a command-line argument
|
||||||
|
|
||||||
|
fix: color codes (e.g. "^1") don't get printed to the terminal anymore
|
||||||
|
|
||||||
fix: tty handling of the leading "]" character
|
fix: tty handling of the leading "]" character
|
||||||
|
|
||||||
fix: dedicated servers no longer insert a leading backslash when running auto-completion
|
fix: dedicated servers no longer insert a leading backslash when running auto-completion
|
||||||
|
|
|
@ -61,6 +61,7 @@ struct mapDownload_t {
|
||||||
qbool lastErrorTimeOut; // qtrue if the last recv error was a timeout
|
qbool lastErrorTimeOut; // qtrue if the last recv error was a timeout
|
||||||
int sourceIndex; // index into the cl_mapDLSources array
|
int sourceIndex; // index into the cl_mapDLSources array
|
||||||
qbool exactMatch; // qtrue if an exact match is required
|
qbool exactMatch; // qtrue if an exact match is required
|
||||||
|
qbool cleared; // qtrue if Download_Clear was called at least once
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -208,6 +209,7 @@ static void Download_Clear( mapDownload_t* dl )
|
||||||
dl->lastErrorTimeOut = qfalse;
|
dl->lastErrorTimeOut = qfalse;
|
||||||
dl->sourceIndex = 0;
|
dl->sourceIndex = 0;
|
||||||
dl->exactMatch = qfalse;
|
dl->exactMatch = qfalse;
|
||||||
|
dl->cleared = qtrue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -315,6 +317,9 @@ static qbool Download_Rename( mapDownload_t* dl )
|
||||||
|
|
||||||
static qbool Download_CleanUp( mapDownload_t* dl, qbool rename )
|
static qbool Download_CleanUp( mapDownload_t* dl, qbool rename )
|
||||||
{
|
{
|
||||||
|
if (!cl_mapDL.cleared)
|
||||||
|
return qfalse;
|
||||||
|
|
||||||
if (dl->socket != INVALID_SOCKET) {
|
if (dl->socket != INVALID_SOCKET) {
|
||||||
Q_closesocket(dl->socket);
|
Q_closesocket(dl->socket);
|
||||||
dl->socket = INVALID_SOCKET;
|
dl->socket = INVALID_SOCKET;
|
||||||
|
@ -784,7 +789,7 @@ void CL_MapDownload_Init()
|
||||||
|
|
||||||
qbool CL_MapDownload_Active()
|
qbool CL_MapDownload_Active()
|
||||||
{
|
{
|
||||||
return cl_mapDL.socket != INVALID_SOCKET;
|
return cl_mapDL.cleared && cl_mapDL.socket != INVALID_SOCKET;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -77,7 +77,6 @@ static struct termios tty_tc;
|
||||||
static field_t tty_con;
|
static field_t tty_con;
|
||||||
|
|
||||||
static cvar_t *ttycon_ansicolor = NULL;
|
static cvar_t *ttycon_ansicolor = NULL;
|
||||||
static qboolean ttycon_color_on = qfalse;
|
|
||||||
|
|
||||||
static history_t tty_history;
|
static history_t tty_history;
|
||||||
|
|
||||||
|
@ -183,14 +182,14 @@ static void Sys_ConsoleInputInit()
|
||||||
{
|
{
|
||||||
if (isatty(STDIN_FILENO)!=1)
|
if (isatty(STDIN_FILENO)!=1)
|
||||||
{
|
{
|
||||||
Com_Printf("stdin is not a tty, tty console mode failed\n");
|
Com_Printf("stdin is not a tty, tty console mode failed: %s\n", strerror(errno));
|
||||||
Cvar_Set("ttycon", "0");
|
Cvar_Set("ttycon", "0");
|
||||||
ttycon_on = qfalse;
|
ttycon_on = qfalse;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Com_Printf("Started tty console (use +set ttycon 0 to disable)\n");
|
Com_Printf("Started tty console (use +set ttycon 0 to disable)\n");
|
||||||
Field_Clear(&tty_con);
|
Field_Clear(&tty_con);
|
||||||
tcgetattr (0, &tty_tc);
|
tcgetattr (STDIN_FILENO, &tty_tc);
|
||||||
tty_erase = tty_tc.c_cc[VERASE];
|
tty_erase = tty_tc.c_cc[VERASE];
|
||||||
tty_eof = tty_tc.c_cc[VEOF];
|
tty_eof = tty_tc.c_cc[VEOF];
|
||||||
tc = tty_tc;
|
tc = tty_tc;
|
||||||
|
@ -210,19 +209,15 @@ static void Sys_ConsoleInputInit()
|
||||||
tc.c_iflag &= ~(ISTRIP | INPCK);
|
tc.c_iflag &= ~(ISTRIP | INPCK);
|
||||||
tc.c_cc[VMIN] = 1;
|
tc.c_cc[VMIN] = 1;
|
||||||
tc.c_cc[VTIME] = 0;
|
tc.c_cc[VTIME] = 0;
|
||||||
tcsetattr (0, TCSADRAIN, &tc);
|
tcsetattr (STDIN_FILENO, TCSADRAIN, &tc);
|
||||||
ttycon_on = qtrue;
|
ttycon_on = qtrue;
|
||||||
|
|
||||||
ttycon_ansicolor = Cvar_Get( "ttycon_ansicolor", "0", CVAR_ARCHIVE );
|
ttycon_ansicolor = Cvar_Get( "ttycon_ansicolor", "0", CVAR_ARCHIVE );
|
||||||
if( ttycon_ansicolor && ttycon_ansicolor->value )
|
|
||||||
{
|
|
||||||
ttycon_color_on = qtrue;
|
|
||||||
}
|
|
||||||
} else
|
} else
|
||||||
ttycon_on = qfalse;
|
ttycon_on = qfalse;
|
||||||
|
|
||||||
// make stdin non-blocking
|
// make stdin non-blocking
|
||||||
fcntl( 0, F_SETFL, fcntl(0, F_GETFL, 0) | FNDELAY );
|
fcntl( STDIN_FILENO, F_SETFL, fcntl(STDIN_FILENO, F_GETFL, 0) | FNDELAY );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -236,7 +231,7 @@ const char* Sys_ConsoleInput()
|
||||||
|
|
||||||
if (ttycon && ttycon->value)
|
if (ttycon && ttycon->value)
|
||||||
{
|
{
|
||||||
avail = read(0, &key, 1);
|
avail = read(STDIN_FILENO, &key, 1);
|
||||||
if (avail != -1)
|
if (avail != -1)
|
||||||
{
|
{
|
||||||
// we have something
|
// we have something
|
||||||
|
@ -449,15 +444,15 @@ const char* Sys_ConsoleInput()
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
FD_ZERO(&fdset);
|
FD_ZERO(&fdset);
|
||||||
FD_SET(0, &fdset); // stdin
|
FD_SET(STDIN_FILENO, &fdset);
|
||||||
timeout.tv_sec = 0;
|
timeout.tv_sec = 0;
|
||||||
timeout.tv_usec = 0;
|
timeout.tv_usec = 0;
|
||||||
if (select (1, &fdset, NULL, NULL, &timeout) == -1 || !FD_ISSET(0, &fdset))
|
if (select (1, &fdset, NULL, NULL, &timeout) == -1 || !FD_ISSET(STDIN_FILENO, &fdset))
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
len = read (0, text, sizeof(text));
|
len = read (STDIN_FILENO, text, sizeof(text));
|
||||||
if (len == 0)
|
if (len == 0)
|
||||||
{ // eof!
|
{ // eof!
|
||||||
stdin_active = qfalse;
|
stdin_active = qfalse;
|
||||||
|
@ -479,12 +474,12 @@ void Sys_ConsoleInputShutdown()
|
||||||
if (ttycon_on)
|
if (ttycon_on)
|
||||||
{
|
{
|
||||||
tty_Back(); // delete the leading "]"
|
tty_Back(); // delete the leading "]"
|
||||||
tcsetattr (0, TCSADRAIN, &tty_tc);
|
tcsetattr (STDIN_FILENO, TCSADRAIN, &tty_tc);
|
||||||
ttycon_on = qfalse;
|
ttycon_on = qfalse;
|
||||||
}
|
}
|
||||||
|
|
||||||
// make stdin blocking
|
// make stdin blocking
|
||||||
fcntl( 0, F_SETFL, fcntl(0, F_GETFL, 0) & ~FNDELAY );
|
fcntl( STDIN_FILENO, F_SETFL, fcntl(STDIN_FILENO, F_GETFL, 0) & (~FNDELAY) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -737,6 +732,7 @@ static struct Q3ToAnsiColorTable_s
|
||||||
|
|
||||||
static const int tty_colorTableSize = sizeof( tty_colorTable ) / sizeof( tty_colorTable[0] );
|
static const int tty_colorTableSize = sizeof( tty_colorTable ) / sizeof( tty_colorTable[0] );
|
||||||
|
|
||||||
|
|
||||||
static void Sys_ANSIColorify( const char *msg, char *buffer, int bufferSize )
|
static void Sys_ANSIColorify( const char *msg, char *buffer, int bufferSize )
|
||||||
{
|
{
|
||||||
int msgLength, pos;
|
int msgLength, pos;
|
||||||
|
@ -793,21 +789,45 @@ static void Sys_ANSIColorify( const char *msg, char *buffer, int bufferSize )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static char* CleanTermStr( char* string )
|
||||||
|
{
|
||||||
|
char* s = string;
|
||||||
|
char* d = string;
|
||||||
|
char c;
|
||||||
|
|
||||||
|
while ((c = *s) != 0 ) {
|
||||||
|
if ( Q_IsColorString( s ) )
|
||||||
|
s++;
|
||||||
|
else
|
||||||
|
*d++ = c;
|
||||||
|
s++;
|
||||||
|
}
|
||||||
|
*d = '\0';
|
||||||
|
|
||||||
|
return string;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void Sys_Print( const char *msg )
|
void Sys_Print( const char *msg )
|
||||||
{
|
{
|
||||||
|
static char finalMsg[ MAXPRINTMSG ];
|
||||||
|
|
||||||
if (ttycon_on)
|
if (ttycon_on)
|
||||||
{
|
{
|
||||||
tty_Hide();
|
tty_Hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
if( ttycon_on && ttycon_color_on )
|
if( ttycon_on && ttycon_ansicolor && ttycon_ansicolor->integer )
|
||||||
{
|
{
|
||||||
char ansiColorString[ MAXPRINTMSG ];
|
Sys_ANSIColorify( msg, finalMsg, sizeof(finalMsg) );
|
||||||
Sys_ANSIColorify( msg, ansiColorString, MAXPRINTMSG );
|
|
||||||
fputs( ansiColorString, stderr );
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
fputs(msg, stderr);
|
{
|
||||||
|
Q_strncpyz( finalMsg, msg, sizeof(finalMsg) );
|
||||||
|
CleanTermStr( finalMsg );
|
||||||
|
}
|
||||||
|
fputs( finalMsg, stdout );
|
||||||
|
|
||||||
if (ttycon_on)
|
if (ttycon_on)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue