hl2_src-leak-2017/src/replay/common/replayutils.cpp

131 lines
3.6 KiB
C++

//========= 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 );
}
//----------------------------------------------------------------------------------------