void AddHelp( int pane_key, const char *image, const char *desc ) { int index = m_vHelpPanes.Find( pane_key ); if ( index == m_vHelpPanes.InvalidIndex() ) { Warning( "[ScenarioHelp] Invalid pane id provided to add help to, Pane %i\n", pane_key ); return; } sHelpPane *pPane = m_vHelpPanes[ index ]; if ( pPane->nHelpCount >= 4 ) { Warning( "[ScenarioHelp] No more than 4 help items are allowed per pane, Pane %i\n", pane_key ); return; } pPane->nHelpCount++; // Restrict string lengths char desc_clip[128]; char image_clip[32]; Q_strncpy( desc_clip, (desc && desc[0]) ? desc : " ", 128 ); Q_strncpy( image_clip, (image && image[0]) ? image : " ", 32 ); if ( pPane->szHelpString[0] != '\0' ) Q_strncat( pPane->szHelpString, ";;;", 1024 ); // Build and append the string to our help char szHelp[256]; Q_snprintf( szHelp, 256, "%s::%s", desc_clip, image_clip ); Q_strncat( pPane->szHelpString, szHelp, 1024 ); }
// This looks for pDBInfoFilename in the same path as pBaseExeFilename. // The file has 3 lines: machine name (with database), database name, username void GetDBInfo( const char *pDBInfoFilename, CDBInfo *pInfo ) { char baseExeFilename[512]; if ( !GetModuleFileName( GetModuleHandle( NULL ), baseExeFilename, sizeof( baseExeFilename ) ) ) Error( "GetModuleFileName failed." ); // Look for the info file in the same directory as the exe. char dbInfoFilename[512]; Q_strncpy( dbInfoFilename, baseExeFilename, sizeof( dbInfoFilename ) ); Q_StripFilename( dbInfoFilename ); if ( dbInfoFilename[0] == 0 ) Q_strncpy( dbInfoFilename, ".", sizeof( dbInfoFilename ) ); Q_strncat( dbInfoFilename, "/", sizeof( dbInfoFilename ), COPY_ALL_CHARACTERS ); Q_strncat( dbInfoFilename, pDBInfoFilename, sizeof( dbInfoFilename ), COPY_ALL_CHARACTERS ); FILE *fp = fopen( dbInfoFilename, "rt" ); if ( !fp ) { Error( "Can't open %s for database info.\n", dbInfoFilename ); } if ( !ReadStringFromFile( fp, pInfo->m_HostName, sizeof( pInfo->m_HostName ) ) || !ReadStringFromFile( fp, pInfo->m_DBName, sizeof( pInfo->m_DBName ) ) || !ReadStringFromFile( fp, pInfo->m_UserName, sizeof( pInfo->m_UserName ) ) ) { Error( "%s is not a valid database info file.\n", dbInfoFilename ); } fclose( fp ); }
//----------------------------------------------------------------------------- // Purpose: Helper for spewing verbose sample information // Input : flags - // Output : char const //----------------------------------------------------------------------------- char const *DescribeFlags( int flags ) { static char outbuf[ 256 ]; outbuf[ 0 ] = 0; if ( flags & FDEMO_USE_ORIGIN2 ) { Q_strncat( outbuf, "USE_ORIGIN2, ", sizeof( outbuf ), COPY_ALL_CHARACTERS ); } if ( flags & FDEMO_USE_ANGLES2 ) { Q_strncat( outbuf, "USE_ANGLES2, ", sizeof( outbuf ), COPY_ALL_CHARACTERS ); } if ( flags & FDEMO_NOINTERP ) { Q_strncat( outbuf, "NOINTERP, ", sizeof( outbuf ), COPY_ALL_CHARACTERS ); } int len = Q_strlen( outbuf ); if ( len > 2 ) { outbuf[ len - 2 ] = 0; } else { Q_strncpy( outbuf, "N/A", sizeof( outbuf ) ); } return outbuf; }
// Caller is responsible for delete[]'ing the array. char *CTimer::GetMapFilePath() { const char *pszMapname = (gpGlobals->mapname).ToCStr(); size_t sz = Q_strlen("maps/") + strlen(pszMapname) + Q_strlen(".bla") + 1; char *pszPath = new char[sz]; Q_strncpy(pszPath, "maps/", sz); Q_strncat(pszPath, pszMapname, sz); Q_strncat(pszPath, ".bla", sz); Q_FixSlashes(pszPath); return pszPath; }
/* =============== Cmd_Echo_f Just prints the rest of the line to the console =============== */ void Cmd_Echo_f( void ) { int i; static char buf[1024]; for( i = 1; i < Cmd_Argc(); i++ ) { Q_strncat( buf, Cmd_Argv( i ), 1024 ); Q_strncat( buf, " ", 1024 ); } Q_strncat( buf, "\n", 1024 ); Sys_Print( buf ); }
void MakeFullPath( const char *pIn, char *pOut, int outLen ) { if ( pIn[0] == '/' || pIn[0] == '\\' || pIn[1] == ':' ) { // It's already a full path. Q_strncpy( pOut, pIn, outLen ); } else { _getcwd( pOut, outLen ); Q_strncat( pOut, "\\", outLen, COPY_ALL_CHARACTERS ); Q_strncat( pOut, pIn, outLen, COPY_ALL_CHARACTERS ); } }
void CRagdollProp::GetAngleOverrideFromCurrentState( char *pOut, int size ) { pOut[0] = 0; for ( int i = 0; i < m_ragdoll.listCount; i++ ) { if ( i != 0 ) { Q_strncat( pOut, ",", size, COPY_ALL_CHARACTERS ); } CFmtStr str("%d,%.2f %.2f %.2f", i, m_ragAngles[i].x, m_ragAngles[i].y, m_ragAngles[i].z ); Q_strncat( pOut, str, size, COPY_ALL_CHARACTERS ); } }
bool FileSystem_GetExecutableDir( char *exedir, int exeDirLen ) { exedir[0] = 0; if ( s_bUseVProjectBinDir ) { const char *pProject = GetVProjectCmdLineValue(); if ( !pProject ) { // Check their registry. pProject = getenv( GAMEDIR_TOKEN ); } if ( pProject ) { Q_snprintf( exedir, exeDirLen, "%s%c..%cbin", pProject, CORRECT_PATH_SEPARATOR, CORRECT_PATH_SEPARATOR ); return true; } return false; } if ( !Sys_GetExecutableName( exedir, exeDirLen ) ) return false; Q_StripFilename( exedir ); if ( IsX360() ) { // The 360 can have its exe and dlls reside on different volumes // use the optional basedir as the exe dir if ( CommandLine()->FindParm( "-basedir" ) ) { strcpy( exedir, CommandLine()->ParmValue( "-basedir", "" ) ); } } Q_FixSlashes( exedir ); // Return the bin directory as the executable dir if it's not in there // because that's really where we're running from... char ext[MAX_PATH]; Q_StrRight( exedir, 4, ext, sizeof( ext ) ); if ( ext[0] != CORRECT_PATH_SEPARATOR || Q_stricmp( ext+1, "bin" ) != 0 ) { Q_strncat( exedir, CORRECT_PATH_SEPARATOR_S, exeDirLen, COPY_ALL_CHARACTERS ); Q_strncat( exedir, "bin", exeDirLen, COPY_ALL_CHARACTERS ); Q_FixSlashes( exedir ); } return true; }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- int CTeamControlPoint::DrawDebugTextOverlays( void ) { int text_offset = BaseClass::DrawDebugTextOverlays(); if (m_debugOverlays & OVERLAY_TEXT_BIT) { char tempstr[1024]; Q_snprintf(tempstr, sizeof(tempstr), "INDEX: (%d)", GetPointIndex() ); EntityText(text_offset,tempstr,0); text_offset++; Q_snprintf( tempstr, sizeof(tempstr), "Red Previous Points: "); for ( int i = 0; i < MAX_PREVIOUS_POINTS; i++ ) { if ( m_TeamData[2].iszPreviousPoint[i] != NULL_STRING ) { Q_strncat( tempstr, STRING(m_TeamData[2].iszPreviousPoint[i]), 1024, COPY_ALL_CHARACTERS ); Q_strncat( tempstr, ", ", 1024, COPY_ALL_CHARACTERS ); } } EntityText(text_offset,tempstr,0); text_offset++; Q_snprintf( tempstr, sizeof(tempstr), "Blue Previous Points: " ); for ( int i = 0; i < MAX_PREVIOUS_POINTS; i++ ) { if ( m_TeamData[3].iszPreviousPoint[i] != NULL_STRING ) { Q_strncat( tempstr, STRING(m_TeamData[3].iszPreviousPoint[i]), 1024, COPY_ALL_CHARACTERS ); Q_strncat( tempstr, ", ", 1024, COPY_ALL_CHARACTERS ); } } EntityText(text_offset,tempstr,0); text_offset++; for ( int i = 0; i < MAX_CONTROL_POINT_TEAMS; i++ ) { if ( ObjectiveResource()->GetBaseControlPointForTeam(i) == GetPointIndex() ) { Q_snprintf(tempstr, sizeof(tempstr), "Base Control Point for Team %d", i ); EntityText(text_offset,tempstr,0); text_offset++; } } } return text_offset; }
static void AppendTimer( int idx, char *buf, size_t bufsize, CFastTimer& timer ) { char s[ 32 ]; Q_snprintf( s, sizeof( s ), "%d %6.3f ms", idx, timer.GetDuration().GetMillisecondsF() ); Q_strncat( buf, s, bufsize ); }
void SetPathSettings( ) { char pPathBuf[ MAX_PATH*32 ]; if ( GetVConfigRegistrySetting( "PATH", pPathBuf, sizeof(pPathBuf) ) ) { Q_FixSlashes( pPathBuf ); const char *pPath = pPathBuf; const char *pFound = Q_stristr( pPath, VPROJECT_BIN_PATH ); int nLen = Q_strlen( VPROJECT_BIN_PATH ); while ( pFound ) { if ( pFound[nLen] == '\\' ) { ++nLen; } if ( !pFound[nLen] || pFound[nLen] == ';' ) return; pPath += nLen; pFound = Q_stristr( pPath, VPROJECT_BIN_PATH ); } Q_strncat( pPathBuf, ";%VPROJECT%\\..\\bin", sizeof(pPathBuf) ); } else { Q_strncpy( pPathBuf, "%VPROJECT%\\..\\bin", sizeof(pPathBuf) ); } SetVConfigRegistrySetting( "PATH", pPathBuf, false ); }
//Called every time a new time is achieved void CTimer::SaveTime() { const char *szMapName = gpGlobals->mapname.ToCStr(); KeyValues *timesKV = new KeyValues(szMapName); int count = localTimes.Count(); for (int i = 0; i < count; i++) { Time t = localTimes[i]; char timeName[512]; Q_snprintf(timeName, 512, "%i", t.ticks); KeyValues *pSubkey = new KeyValues(timeName); pSubkey->SetFloat("rate", t.tickrate); pSubkey->SetInt("date", t.date); timesKV->AddSubKey(pSubkey); } char file[MAX_PATH]; Q_strcpy(file, c_mapDir); Q_strcat(file, szMapName, MAX_PATH); Q_strncat(file, c_timesExt, MAX_PATH); if (timesKV->SaveToFile(filesystem, file, "MOD", true)) { Log("Successfully saved new time!\n"); IGameEvent *savedEvent = gameeventmanager->CreateEvent("runtime_saved"); if (savedEvent) gameeventmanager->FireEvent(savedEvent); } timesKV->deleteThis(); }
//----------------------------------------------------------------------------- // Purpose: // Input : handle - // Output : const char //----------------------------------------------------------------------------- bool CUtlFilenameSymbolTable::String( const FileNameHandle_t& handle, char *buf, int buflen ) { buf[ 0 ] = 0; FileNameHandleInternal_t *internal = ( FileNameHandleInternal_t * )&handle; if ( !internal ) { return false; } m_lock.LockForRead(); const char *path = m_StringPool.HandleToString(internal->path); const char *fn = m_StringPool.HandleToString(internal->file); m_lock.UnlockRead(); if ( !path || !fn ) { return false; } Q_strncpy( buf, path, buflen ); Q_strncat( buf, fn, buflen, COPY_ALL_CHARACTERS ); return true; }
/* <269e8> ../engine/filesystem_internal.cpp:292 */ void FS_Rename(const char *originalName, const char *newName) { char *cut; char localPath[512]; char newPath[512]; if (FS_GetLocalPath(originalName, localPath, ARRAYSIZE(localPath))) { Q_strcpy(newPath, localPath); cut = Q_strstr(newPath, originalName); if (cut) { *cut = 0; #ifdef REHLDS_CHECKS Q_strncat(newPath, newName, ARRAYSIZE(newPath) - Q_strlen(newPath)); newPath[ARRAYSIZE(newPath) - 1] = 0; #else Q_strcat(newPath, newName); #endif rename(localPath, newPath); } } }
FSReturnCode_t GetSteamCfgPath( char *steamCfgPath, int steamCfgPathLen ) { steamCfgPath[0] = 0; char executablePath[MAX_PATH]; if ( !FileSystem_GetExecutableDir( executablePath, sizeof( executablePath ) ) ) { return SetupFileSystemError( false, FS_INVALID_PARAMETERS, "FileSystem_GetExecutableDir failed." ); } Q_strncpy( steamCfgPath, executablePath, steamCfgPathLen ); while ( 1 ) { if ( DoesFileExistIn( steamCfgPath, "steam.cfg" ) ) break; if ( !Q_StripLastDir( steamCfgPath, steamCfgPathLen) ) { // the file isnt found, thats ok, its not mandatory return FS_OK; } } Q_AppendSlash( steamCfgPath, steamCfgPathLen ); Q_strncat( steamCfgPath, "steam.cfg", steamCfgPathLen, COPY_ALL_CHARACTERS ); return FS_OK; }
/* ==================== CL_Init ==================== */ void CL_Init( void ) { qboolean loaded; if( host.type == HOST_DEDICATED ) return; // nothing running on the client Con_Init(); CL_InitLocal(); R_Init(); // init renderer S_Init(); // init sound // unreliable buffer. unsed for unreliable commands and voice stream BF_Init( &cls.datagram, "cls.datagram", cls.datagram_buf, sizeof( cls.datagram_buf )); loaded = CL_LoadProgs( va( "%s/%s" , GI->dll_path, GI->client_lib )); if( !loaded ) #if defined (__ANDROID__) { char clientlib[256]; Q_strncpy( clientlib, getenv("XASH3D_ENGLIBDIR"), 256 ); Q_strncat( clientlib, "/" CLIENTDLL, 256 ); loaded = CL_LoadProgs( clientlib ); } #else loaded = CL_LoadProgs( CLIENTDLL ); #endif if( loaded ) { cls.initialized = true; cl.maxclients = 1; // allow to drawing player in menu cls.olddemonum = -1; cls.demonum = -1; } }
// Path is relative to game folder void OpenLocalPage( const char *title, const char *path ) { if ( webwindowpanel->GetFullPanel()->IsVisible() ) { webwindowpanel->GetFullPanel()->ShowPanel( false ); } // Need to do this to display a local html file KeyValues *data = new KeyValues( "WebWindowData" ); data->SetString( "title", title ); // it's a local HTML file char localURL[ _MAX_PATH + 7 ]; Q_strncpy( localURL, "file://", sizeof( localURL ) ); char pPathData[ _MAX_PATH ]; g_pFullFileSystem->GetLocalPath( path, pPathData, sizeof(pPathData) ); Q_strncat( localURL, pPathData, sizeof( localURL ), COPY_ALL_CHARACTERS ); Msg( "%s", localURL ); data->SetString( "url", localURL ); webwindowpanel->GetFullPanel()->SetData( data ); webwindowpanel->Show(); data->deleteThis(); }
void CBaseHudChat::MsgFunc_VoiceSubtitle( bf_read &msg ) { // Got message during connection if ( !g_PR ) return; if ( !cl_showtextmsg.GetInt() ) return; char szString[2048]; char szPrefix[64]; //(Voice) wchar_t szBuf[128]; int client = msg.ReadByte(); int iMenu = msg.ReadByte(); int iItem = msg.ReadByte(); const char *pszSubtitle = ""; CGameRules *pGameRules = GameRules(); CMultiplayRules *pMultiRules = dynamic_cast< CMultiplayRules * >( pGameRules ); Assert( pMultiRules ); if ( pMultiRules ) { pszSubtitle = pMultiRules->GetVoiceCommandSubtitle( iMenu, iItem ); } SetVoiceSubtitleState( true ); const wchar_t *pBuf = g_pVGuiLocalize->Find( pszSubtitle ); if ( pBuf ) { // Copy pBuf into szBuf[i]. int nMaxChars = sizeof( szBuf ) / sizeof( wchar_t ); wcsncpy( szBuf, pBuf, nMaxChars ); szBuf[nMaxChars-1] = 0; } else { g_pVGuiLocalize->ConvertANSIToUnicode( pszSubtitle, szBuf, sizeof(szBuf) ); } int len; g_pVGuiLocalize->ConvertUnicodeToANSI( szBuf, szString, sizeof(szString) ); len = strlen( szString ); if ( len && szString[len-1] != '\n' && szString[len-1] != '\r' ) { Q_strncat( szString, "\n", sizeof(szString), 1 ); } const wchar_t *pVoicePrefix = g_pVGuiLocalize->Find( "#Voice" ); g_pVGuiLocalize->ConvertUnicodeToANSI( pVoicePrefix, szPrefix, sizeof(szPrefix) ); ChatPrintf( client, CHAT_FILTER_NONE, "%c(%s) %s%c: %s", COLOR_PLAYERNAME, szPrefix, GetDisplayedSubtitlePlayerName( client ), COLOR_NORMAL, ConvertCRtoNL( szString ) ); SetVoiceSubtitleState( false ); }
// Precache all wave files referenced in wave or rndwave keys virtual void LevelInitPreEntity() { char mapname[ 256 ]; #if !defined( CLIENT_DLL ) StartLog(); Q_snprintf( mapname, sizeof( mapname ), "maps/%s", STRING( gpGlobals->mapname ) ); #else Q_strncpy( mapname, engine->GetLevelName(), sizeof( mapname ) ); #endif Q_FixSlashes( mapname ); Q_strlower( mapname ); // Load in any map specific overrides char scriptfile[ 512 ]; Q_StripExtension( mapname, scriptfile, sizeof( scriptfile ) ); Q_strncat( scriptfile, "_level_sounds.txt", sizeof( scriptfile ), COPY_ALL_CHARACTERS ); if ( filesystem->FileExists( scriptfile, "GAME" ) ) { soundemitterbase->AddSoundOverrides( scriptfile ); } #if !defined( CLIENT_DLL ) for ( int i=soundemitterbase->First(); i != soundemitterbase->InvalidIndex(); i=soundemitterbase->Next( i ) ) { CSoundParametersInternal *pParams = soundemitterbase->InternalGetParametersForSound( i ); if ( pParams->ShouldPreload() ) { InternalPrecacheWaves( i ); } } #endif }
void SetSteamAppUser( KeyValues *pSteamInfo, const char *steamInstallPath, CSteamEnvVars &steamEnvVars ) { // Always inherit the Steam user if it's already set, since it probably means we (or the // the app that launched us) were launched from Steam. char appUser[MAX_PATH]; if ( steamEnvVars.m_SteamAppUser.GetValue( appUser, sizeof( appUser ) ) ) return; const char *pTempAppUser = NULL; if ( pSteamInfo && (pTempAppUser = pSteamInfo->GetString( "SteamAppUser", NULL )) != NULL ) { Q_strncpy( appUser, pTempAppUser, sizeof( appUser ) ); } else { // They don't have SteamInfo.txt, or it's missing SteamAppUser. Try to figure out the user // by looking in <steam install path>\config\SteamAppData.vdf. char fullFilename[MAX_PATH]; Q_strncpy( fullFilename, steamInstallPath, sizeof( fullFilename ) ); Q_AppendSlash( fullFilename, sizeof( fullFilename ) ); Q_strncat( fullFilename, "config\\SteamAppData.vdf", sizeof( fullFilename ), COPY_ALL_CHARACTERS ); KeyValues *pSteamAppData = ReadKeyValuesFile( fullFilename ); if ( !pSteamAppData || (pTempAppUser = pSteamAppData->GetString( "AutoLoginUser", NULL )) == NULL ) { Error( "Can't find steam app user info." ); } Q_strncpy( appUser, pTempAppUser, sizeof( appUser ) ); pSteamAppData->deleteThis(); } Q_strlower( appUser ); steamEnvVars.m_SteamAppUser.SetValue( "%s", appUser ); }
/* ================== SV_ConSay_f ================== */ void SV_ConSay_f( void ) { char *p, text[MAX_SYSPATH]; sv_client_t *client; int i; if( Cmd_Argc() < 2 ) return; if( !svs.clients || sv.background ) { Msg( "^3No server running.\n" ); return; } Q_strncpy( text, "console: ", MAX_SYSPATH ); p = Cmd_Args(); if( *p == '"' ) { p++; p[Q_strlen(p) - 1] = 0; } Q_strncat( text, p, MAX_SYSPATH ); for( i = 0, client = svs.clients; i < sv_maxclients->integer; i++, client++ ) { if( client->state != cs_spawned ) continue; SV_ClientPrintf( client, PRINT_CHAT, "%s\n", text ); } }
void CSentence::ParsePlaintext( CUtlBuffer& buf ) { char token[ 4096 ]; char text[ 4096 ]; text[ 0 ] = 0; while ( 1 ) { buf.GetString( token ); if ( !stricmp( token, "}" ) ) break; Q_strncat( text, token, sizeof( text ), COPY_ALL_CHARACTERS ); Q_strncat( text, " ", sizeof( text ), COPY_ALL_CHARACTERS ); } SetText( text ); }
const char *CTilegenExpression_StringConcatenate::DirectEvaluate( CFreeVariableMap *pContext, const CTilegenExpression_StringConcatenate::TExpressionValue ¶m1, const CTilegenExpression_StringConcatenate::TExpressionValue ¶m2 ) { char buf[MAX_TILEGEN_IDENTIFIER_LENGTH]; Q_strncpy( buf, param1, MAX_TILEGEN_IDENTIFIER_LENGTH ); Q_strncat( buf, param2, MAX_TILEGEN_IDENTIFIER_LENGTH ); buf[MAX_TILEGEN_IDENTIFIER_LENGTH - 1] = '\0'; return pContext->m_StringPool.Allocate( buf ); }
//----------------------------------------------------------------------------- // Purpose: // Input : *error - // Output : const char //----------------------------------------------------------------------------- const char *TokenReader::Error(char *error, ...) { static char szErrorBuf[256]; Q_snprintf(szErrorBuf, sizeof( szErrorBuf ), "File %s, line %d: ", m_szFilename, m_nLine); Q_strncat(szErrorBuf, error, sizeof( szErrorBuf ), COPY_ALL_CHARACTERS ); m_nErrorCount++; return(szErrorBuf); }
// Message handler for ShowMenu message // takes four values: // short: a bitfield of keys that are valid input // char : the duration, in seconds, the menu should stay up. -1 means is stays until something is chosen. // byte : a boolean, TRUE if there is more string yet to be received before displaying the menu, FALSE if it's the last string // string: menu string to display // if this message is never received, then scores will simply be the combined totals of the players. int CHudMenu :: MsgFunc_ShowMenu( const char *pszName, int iSize, void *pbuf ) { char *temp = NULL; BEGIN_READ( pszName, pbuf, iSize ); m_bitsValidSlots = READ_SHORT(); int DisplayTime = READ_CHAR(); int NeedMore = READ_BYTE(); if( DisplayTime > 0 ) m_flShutoffTime = DisplayTime + gHUD.m_flTime; else m_flShutoffTime = -1; if( m_bitsValidSlots ) { if( !m_fWaitingForMore ) { // this is the start of a new menu Q_strncpy( g_szPrelocalisedMenuString, READ_STRING(), MAX_MENU_STRING ); } else { // append to the current menu string Q_strncat( g_szPrelocalisedMenuString, READ_STRING(), MAX_MENU_STRING - Q_strlen( g_szPrelocalisedMenuString )); } g_szPrelocalisedMenuString[MAX_MENU_STRING-1] = 0; // ensure null termination (strncat/strncpy does not) if( !NeedMore ) { // we have the whole string, so we can localise it now Q_strcpy( g_szMenuString, gHUD.m_TextMessage.BufferedLocaliseTextString( g_szPrelocalisedMenuString )); // Swap in characters if( KB_ConvertString( g_szMenuString, &temp )) { Q_strcpy( g_szMenuString, temp ); free( temp ); } } m_fMenuDisplayed = 1; m_iFlags |= HUD_ACTIVE; } else { m_fMenuDisplayed = 0; // no valid slots means that the menu should be turned off m_iFlags &= ~HUD_ACTIVE; } m_fWaitingForMore = NeedMore; END_READ(); return 1; }
//----------------------------------------------------------------------------- // Purpose: Writes out a new .dem file based on the existing dem file with new camera positions saved into the dem file // Note: The new file is named filename_smooth.dem // Input : *filename - // smoothing - //----------------------------------------------------------------------------- void SaveSmoothingInfo( char const *filename, CSmoothingContext& smoothing ) { // Nothing to do int c = smoothing.smooth.Count(); if ( !c ) return; IBaseFileSystem *fs = g_pFileSystem; FileHandle_t infile, outfile; infile = fs->Open( filename, "rb", "GAME" ); if ( infile == FILESYSTEM_INVALID_HANDLE ) return; int filesize = fs->Size( infile ); char outfilename[ 512 ]; Q_StripExtension( filename, outfilename, sizeof( outfilename ) ); Q_strncat( outfilename, "_smooth", sizeof(outfilename), COPY_ALL_CHARACTERS ); Q_DefaultExtension( outfilename, ".dem", sizeof( outfilename ) ); outfile = fs->Open( outfilename, "wb", "GAME" ); if ( outfile == FILESYSTEM_INVALID_HANDLE ) { fs->Close( infile ); return; } int i; // The basic algorithm is to seek to each sample and "overwrite" it during copy with the new data... int lastwritepos = 0; for ( i = 0; i < c; i++ ) { demosmoothing_t *p = &smoothing.smooth[ i ]; int copyamount = p->file_offset - lastwritepos; COM_CopyFileChunk( outfile, infile, copyamount ); fs->Seek( infile, p->file_offset, FILESYSTEM_SEEK_HEAD ); // wacky hacky overwriting fs->Write( &p->info, sizeof( democmdinfo_t ), outfile ); lastwritepos = fs->Tell( outfile ); fs->Seek( infile, p->file_offset + sizeof( democmdinfo_t ), FILESYSTEM_SEEK_HEAD ); } // Copy the final bit of data, if any... int final = filesize - lastwritepos; COM_CopyFileChunk( outfile, infile, final ); fs->Close( outfile ); fs->Close( infile ); }
FSReturnCode_t LoadGameInfoFile( const char *pDirectoryName, KeyValues *&pMainFile, KeyValues *&pFileSystemInfo, KeyValues *&pSearchPaths ) { // If GameInfo.txt exists under pBaseDir, then this is their game directory. // All the filesystem mappings will be in this file. char gameinfoFilename[MAX_PATH]; Q_strncpy( gameinfoFilename, pDirectoryName, sizeof( gameinfoFilename ) ); Q_AppendSlash( gameinfoFilename, sizeof( gameinfoFilename ) ); Q_strncat( gameinfoFilename, GAMEINFO_FILENAME, sizeof( gameinfoFilename ), COPY_ALL_CHARACTERS ); Q_FixSlashes( gameinfoFilename ); pMainFile = ReadKeyValuesFile( gameinfoFilename ); if ( IsX360() && !pMainFile ) { // try again Q_strncpy( gameinfoFilename, pDirectoryName, sizeof( gameinfoFilename ) ); Q_AppendSlash( gameinfoFilename, sizeof( gameinfoFilename ) ); Q_strncat( gameinfoFilename, GAMEINFO_FILENAME_ALTERNATE, sizeof( gameinfoFilename ), COPY_ALL_CHARACTERS ); Q_FixSlashes( gameinfoFilename ); pMainFile = ReadKeyValuesFile( gameinfoFilename ); } if ( !pMainFile ) { return SetupFileSystemError( true, FS_MISSING_GAMEINFO_FILE, "%s is missing.", gameinfoFilename ); } pFileSystemInfo = pMainFile->FindKey( "FileSystem" ); if ( !pFileSystemInfo ) { pMainFile->deleteThis(); return SetupFileSystemError( true, FS_INVALID_GAMEINFO_FILE, "%s is not a valid format.", gameinfoFilename ); } // Now read in all the search paths. pSearchPaths = pFileSystemInfo->FindKey( "SearchPaths" ); if ( !pSearchPaths ) { pMainFile->deleteThis(); return SetupFileSystemError( true, FS_INVALID_GAMEINFO_FILE, "%s is not a valid format.", gameinfoFilename ); } return FS_OK; }
//----------------------------------------------------------------------------- // Purpose: Message handler for ShowMenu message // takes four values: // short: a bitfield of keys that are valid input // char : the duration, in seconds, the menu should stay up. -1 means is stays until something is chosen. // byte : a boolean, TRUE if there is more string yet to be received before displaying the menu, false if it's the last string // string: menu string to display // if this message is never received, then scores will simply be the combined totals of the players. //----------------------------------------------------------------------------- void CHudMenu::MsgFunc_ShowMenu( bf_read &msg) { m_bitsValidSlots = (short)msg.ReadWord(); int DisplayTime = msg.ReadChar(); int NeedMore = msg.ReadByte(); if ( DisplayTime > 0 ) { m_flShutoffTime = m_flOpenCloseTime + DisplayTime + gpGlobals->realtime; } else { m_flShutoffTime = -1; } if ( m_bitsValidSlots ) { char szString[2048]; msg.ReadString( szString, sizeof(szString) ); if ( !m_fWaitingForMore ) // this is the start of a new menu { Q_strncpy( g_szPrelocalisedMenuString, szString, sizeof( g_szPrelocalisedMenuString ) ); } else { // append to the current menu string Q_strncat( g_szPrelocalisedMenuString, szString, sizeof( g_szPrelocalisedMenuString ), COPY_ALL_CHARACTERS ); } if ( !NeedMore ) { GetClientMode()->GetViewportAnimationController()->StartAnimationSequence("MenuOpen"); m_nSelectedItem = -1; // we have the whole string, so we can localise it now char szMenuString[MAX_MENU_STRING]; Q_strncpy( szMenuString, ConvertCRtoNL( hudtextmessage->BufferedLocaliseTextString( g_szPrelocalisedMenuString ) ), sizeof( szMenuString ) ); g_pVGuiLocalize->ConvertANSIToUnicode( szMenuString, g_szMenuString, sizeof( g_szMenuString ) ); ProcessText(); } m_bMenuDisplayed = true; m_bMenuTakesInput = true; m_flSelectionTime = gpGlobals->curtime; } else { HideMenu(); } m_fWaitingForMore = NeedMore; }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CSentence::SetTextFromWords( void ) { #if PHONEME_EDITOR char fulltext[ 1024 ]; fulltext[ 0 ] = 0; for ( int i = 0 ; i < m_Words.Size(); i++ ) { CWordTag *word = m_Words[ i ]; Q_strncat( fulltext, word->GetWord(), sizeof( fulltext ), COPY_ALL_CHARACTERS ); if ( i != m_Words.Size() ) { Q_strncat( fulltext, " ", sizeof( fulltext ), COPY_ALL_CHARACTERS ); } } SetText( fulltext ); #endif }
// ---------------------------------------------------------------------------------------------------- // // Helpers. // ---------------------------------------------------------------------------------------------------- // void Q_getwd( char *out, int outSize ) { #if defined( _WIN32 ) || defined( WIN32 ) _getcwd( out, outSize ); Q_strncat( out, "\\", outSize, COPY_ALL_CHARACTERS ); #else getcwd( out, outSize ); strcat( out, "/" ); #endif Q_FixSlashes( out ); }