diff --git a/code/qcommon/common.c b/code/qcommon/common.c index 45ff6233..a225aa32 100644 --- a/code/qcommon/common.c +++ b/code/qcommon/common.c @@ -3065,6 +3065,12 @@ void Com_Frame( void ) { if ( com_speeds->integer ) { timeAfter = Sys_Milliseconds (); } +#else + if ( com_speeds->integer ) { + timeAfter = Sys_Milliseconds (); + timeBeforeEvents = timeAfter; + timeBeforeClient = timeAfter; + } #endif // diff --git a/code/sys/con_tty.c b/code/sys/con_tty.c index 71ee1004..7f5f6317 100644 --- a/code/sys/con_tty.c +++ b/code/sys/con_tty.c @@ -40,6 +40,7 @@ called before and after a stdout or stderr output ============================================================= */ +extern qboolean stdinIsATTY; static qboolean stdin_active; // general flag to tell about tty console mode static qboolean ttycon_on = qfalse; @@ -268,21 +269,19 @@ Initialize the console input (tty mode if possible) void CON_Init( void ) { struct termios tc; - const char* term = getenv("TERM"); // If the process is backgrounded (running non interactively) // then SIGTTIN or SIGTOU is emitted, if not caught, turns into a SIGSTP signal(SIGTTIN, SIG_IGN); signal(SIGTTOU, SIG_IGN); - + // If SIGCONT is received, reinitialize console signal(SIGCONT, CON_SigCont); // Make stdin reads non-blocking fcntl(STDIN_FILENO, F_SETFL, fcntl(STDIN_FILENO, F_GETFL, 0) | O_NONBLOCK ); - if (isatty(STDIN_FILENO) != 1 - || (term && (!strcmp(term, "raw") || !strcmp(term, "dumb")))) + if (!stdinIsATTY) { Com_Printf("tty console mode disabled\n"); ttycon_on = qfalse; diff --git a/code/sys/sys_unix.c b/code/sys/sys_unix.c index f0b2b201..c0b4ecb6 100644 --- a/code/sys/sys_unix.c +++ b/code/sys/sys_unix.c @@ -37,6 +37,8 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include #include +qboolean stdinIsATTY; + // Used to determine where to store user-specific files static char homePath[ MAX_OSPATH ] = { 0 }; @@ -354,7 +356,7 @@ char **Sys_ListFiles( const char *directory, const char *extension, char *filter } extLen = strlen( extension ); - + // search nfiles = 0; @@ -464,24 +466,35 @@ Block execution for msec or until input is recieved. */ void Sys_Sleep( int msec ) { - fd_set fdset; - if( msec == 0 ) return; - FD_ZERO(&fdset); - FD_SET(fileno(stdin), &fdset); - if( msec < 0 ) + if( stdinIsATTY ) { - select((fileno(stdin) + 1), &fdset, NULL, NULL, NULL); + fd_set fdset; + + FD_ZERO(&fdset); + FD_SET(STDIN_FILENO, &fdset); + if( msec < 0 ) + { + select(STDIN_FILENO + 1, &fdset, NULL, NULL, NULL); + } + else + { + struct timeval timeout; + + timeout.tv_sec = msec/1000; + timeout.tv_usec = (msec%1000)*1000; + select(STDIN_FILENO + 1, &fdset, NULL, NULL, &timeout); + } } else { - struct timeval timeout; + // With nothing to select() on, we can't wait indefinitely + if( msec < 0 ) + msec = 10; - timeout.tv_sec = msec/1000; - timeout.tv_usec = (msec%1000)*1000; - select((fileno(stdin) + 1), &fdset, NULL, NULL, &timeout); + usleep( msec * 1000 ); } } @@ -571,11 +584,16 @@ Unix specific initialisation */ void Sys_PlatformInit( void ) { + const char* term = getenv( "TERM" ); + signal( SIGHUP, Sys_SigHandler ); signal( SIGQUIT, Sys_SigHandler ); signal( SIGTRAP, Sys_SigHandler ); signal( SIGIOT, Sys_SigHandler ); signal( SIGBUS, Sys_SigHandler ); + + stdinIsATTY = isatty( STDIN_FILENO ) && + !( term && ( !strcmp( term, "raw" ) || !strcmp( term, "dumb" ) ) ); } /*