/* ============= Com_Printf Both client and server can use this, and it will output to the apropriate place. A raw string should NEVER be passed as fmt, because of "%f" type crashers. ============= */ void QDECL Com_Printf( const char *fmt, ... ) { va_list argptr; char msg[MAXPRINTMSG]; va_start (argptr,fmt); vsprintf (msg,fmt,argptr); va_end (argptr); if ( rd_buffer ) { if ((strlen (msg) + strlen(rd_buffer)) > (rd_buffersize - 1)) { rd_flush(rd_buffer); *rd_buffer = 0; } Q_strcat(rd_buffer, rd_buffersize, msg); rd_flush(rd_buffer); *rd_buffer = 0; return; } // echo to console if we're not a dedicated server if ( com_dedicated && !com_dedicated->integer ) { CL_ConsolePrint( msg ); } // echo to dedicated console and early console Sys_Print( msg ); // logfile #ifndef _XBOX if ( com_logfile && com_logfile->integer ) { if ( !logfile && FS_Initialized() ) { struct tm *newtime; time_t aclock; time( &aclock ); newtime = localtime( &aclock ); logfile = FS_FOpenFileWrite( "qconsole.log" ); Com_Printf( "logfile opened on %s\n", asctime( newtime ) ); if ( com_logfile->integer > 1 ) { // force it to not buffer so we get valid // data even if we are crashing FS_ForceFlush(logfile); } } if ( logfile && FS_Initialized()) { FS_Write(msg, strlen(msg), logfile); } } #endif #if defined(_WIN32) && defined(_DEBUG) && !defined(_XBOX) if ( *msg ) { OutputDebugString ( Q_CleanStr(msg) ); OutputDebugString ("\n"); } #endif }
void QDECL Com_PrintfAlways( const char *fmt, ... ) { va_list argptr; char msg[MAXPRINTMSG]; va_start (argptr,fmt); vsprintf (msg,fmt,argptr); va_end (argptr); #ifndef _XBOX if ( rd_buffer ) { if ((strlen (msg) + strlen(rd_buffer)) > (rd_buffersize - 1)) { rd_flush(rd_buffer); *rd_buffer = 0; } strcat (rd_buffer, msg); return; } #endif CL_ConsolePrint( msg ); // echo to dedicated console and early console #ifndef FINAL_BUILD Sys_Print( msg ); #ifdef OUTPUT_TO_BUILD_WINDOW OutputDebugString(msg); #endif #endif #ifndef _XBOX // logfile if ( com_logfile && com_logfile->integer ) { if ( !logfile ) { logfile = FS_FOpenFileWrite( "qconsole.log" ); if ( com_logfile->integer > 1 ) { // force it to not buffer so we get valid // data even if we are crashing FS_ForceFlush(logfile); } } if ( logfile ) { FS_Write(msg, strlen(msg), logfile); } } #endif }
/* ============= Com_Printf Both client and server can use this, and it will output to the apropriate place. A raw string should NEVER be passed as fmt, because of "%f" type crashers. ============= */ void QDECL Com_Printf( const char *fmt, ... ) { va_list argptr; char msg[MAXPRINTMSG]; va_start (argptr,fmt); Q_vsnprintf (msg, sizeof(msg), fmt, argptr); va_end (argptr); if ( rd_buffer ) { if ((strlen (msg) + strlen(rd_buffer)) > (unsigned)(rd_buffersize - 1)) { rd_flush(rd_buffer); *rd_buffer = 0; } Q_strcat (rd_buffer, strlen(rd_buffer), msg); return; } CL_ConsolePrint( msg ); // Strip out color codes because these aren't needed in the log/viewlog or in the output window --eez Q_StripColor( msg ); // echo to dedicated console and early console Sys_Print( msg ); #ifdef OUTPUT_TO_BUILD_WINDOW OutputDebugString(msg); #endif // logfile if ( com_logfile && com_logfile->integer ) { if ( !logfile ) { logfile = FS_FOpenFileWrite( "qconsole.log" ); if ( com_logfile->integer > 1 ) { // force it to not buffer so we get valid // data even if we are crashing FS_ForceFlush(logfile); } } if ( logfile ) { FS_Write(msg, strlen(msg), logfile); } } }
/* ============= Com_Printf Both client and server can use this, and it will output to the apropriate place. A raw string should NEVER be passed as fmt, because of "%f" type crashers. ============= */ void QDECL Com_Printf( const char *fmt, ... ) { va_list argptr; char msg[MAXPRINTMSG]; va_start (argptr,fmt); vsprintf (msg,fmt,argptr); va_end (argptr); if ( rd_buffer ) { if ((strlen (msg) + strlen(rd_buffer)) > (rd_buffersize - 1)) { rd_flush(rd_buffer); *rd_buffer = 0; } strcat (rd_buffer, msg); return; } CL_ConsolePrint( msg ); // echo to dedicated console and early console Sys_Print( msg ); // logfile if ( com_logfile && com_logfile->integer ) { if ( !logfile ) { logfile = FS_FOpenFileWrite( "qconsole.log" ); if ( com_logfile->integer > 1 ) { // force it to not buffer so we get valid // data even if we are crashing FS_ForceFlush(logfile); } } if ( logfile ) { FS_Write(msg, strlen(msg), logfile); } } }
/* ============= Com_Printf Both client and server can use this, and it will output to the apropriate place. A raw string should NEVER be passed as fmt, because of "%f" type crashers. ============= */ void QDECL Com_Printf( const char *fmt, ... ) { va_list argptr; char msg[MAXPRINTMSG]; static qboolean opening_qconsole = qfalse; va_start (argptr,fmt); Q_vsnprintf (msg, sizeof(msg), fmt, argptr); va_end (argptr); if ( rd_buffer ) { if ((strlen (msg) + strlen(rd_buffer)) > (rd_buffersize - 1)) { rd_flush(rd_buffer); *rd_buffer = 0; } Q_strcat(rd_buffer, rd_buffersize, msg); // TTimo nooo .. that would defeat the purpose //rd_flush(rd_buffer); //*rd_buffer = 0; return; } // echo to console if we're not a dedicated server if ( com_dedicated && !com_dedicated->integer ) { CL_ConsolePrint( msg ); } // echo to dedicated console and early console Sys_Print( msg ); // logfile if ( com_logfile && com_logfile->integer ) { // TTimo: only open the qconsole.log if the filesystem is in an initialized state // also, avoid recursing in the qconsole.log opening (i.e. if fs_debug is on) if ( !logfile && FS_Initialized() && !opening_qconsole ) { struct tm *newtime; time_t aclock; opening_qconsole = qtrue; time( &aclock ); newtime = localtime( &aclock ); logfile = FS_FOpenFileWrite( "qconsole.log" ); if ( logfile ) { Com_Printf( "logfile opened on %s\n", asctime( newtime ) ); if ( com_logfile->integer > 1 ) { // force it to not buffer so we get valid // data even if we are crashing FS_ForceFlush(logfile); } } else { Com_Printf( "Opening qconsole.log failed!\n" ); Cvar_SetValue( "logfile", 0 ); } } opening_qconsole = qfalse; if ( logfile && FS_Initialized()) { FS_Write(msg, strlen(msg), logfile); } } #if defined(_WIN32) && defined(_DEBUG) if ( *msg ) { OutputDebugString ( Q_CleanStr(msg) ); OutputDebugString ("\n"); } #endif }