//========= Copyright Valve Corporation, All rights reserved. ============// // //=======================================================================================// #include "replay/replayutils.h" #include "dbg.h" #include "strtools.h" #include "qlimits.h" #include "filesystem.h" #include "replay/replaytime.h" #include "fmtstr.h" // memdbgon must be the last include file in a .cpp file!!! #include "tier0/memdbgon.h" //---------------------------------------------------------------------------------------- static char gs_szGameDir[MAX_OSPATH]; //---------------------------------------------------------------------------------------- void Replay_GetFirstAvailableFilename( char *pDst, int nDstLen, const char *pIdealFilename, const char *pExt, const char *pFilePath, int nStartIndex ) { // Strip extension from ideal filename char szIdealFilename[ MAX_OSPATH ]; V_StripExtension( pIdealFilename, szIdealFilename, sizeof( szIdealFilename ) ); int i = nStartIndex; while ( 1 ) { V_strncpy( pDst, szIdealFilename, nDstLen ); V_strcat( pDst, Replay_va( "_%i%s", i, pExt ), nDstLen ); // Get a potential working path/filename CFmtStr fmtTestFilename( "%s%c%s", pFilePath, CORRECT_PATH_SEPARATOR, pDst ); // Make sure slashes are correct for platform V_FixSlashes( fmtTestFilename.Access() ); // Fix up double slashes V_FixDoubleSlashes( fmtTestFilename.Access() ); if ( !g_pFullFileSystem->FileExists( fmtTestFilename ) ) break; ++i; } } //---------------------------------------------------------------------------------------- void Replay_ConstructReplayFilenameString( CUtlString &strOut, const char *pReplaySubDir, const char *pFilename, const char *pGameDir ) { // Construct full filename strOut.Format( "%s%creplays%c%s%c%s", pGameDir, CORRECT_PATH_SEPARATOR, CORRECT_PATH_SEPARATOR, pReplaySubDir, CORRECT_PATH_SEPARATOR, pFilename ); } //---------------------------------------------------------------------------------------- char *Replay_va( const char *format, ... ) { va_list argptr; static char string[8][512]; static int curstring = 0; curstring = ( curstring + 1 ) % 8; va_start (argptr, format); Q_vsnprintf( string[curstring], sizeof( string[curstring] ), format, argptr ); va_end (argptr); return string[curstring]; } //---------------------------------------------------------------------------------------- void Replay_SetGameDir( const char *pGameDir ) { V_strcpy( gs_szGameDir, pGameDir ); } //---------------------------------------------------------------------------------------- const char *Replay_GetGameDir() { return gs_szGameDir; } //---------------------------------------------------------------------------------------- const char *Replay_GetBaseDir() { return Replay_va( "%s%creplays%c", Replay_GetGameDir(), CORRECT_PATH_SEPARATOR, CORRECT_PATH_SEPARATOR ); } //---------------------------------------------------------------------------------------- void Replay_GetAutoName( wchar_t *pDest, int nDestSize, const char *pMapName ) { // Get date/time CReplayTime now; now.InitDateAndTimeToNow(); // Convert map name to unicode wchar_t wszMapName[256]; extern vgui::ILocalize *g_pVGuiLocalize; g_pVGuiLocalize->ConvertANSIToUnicode( pMapName, wszMapName, sizeof( wszMapName ) ); // Get localized date as string const wchar_t *pLocalizedDate = CReplayTime::GetLocalizedDate( g_pVGuiLocalize, now, true ); // Create title g_pVGuiLocalize->ConstructString( pDest, nDestSize, L"%s1: %s2", 2, wszMapName, pLocalizedDate ); } //----------------------------------------------------------------------------------------