void IniTest() { g_TestFilename = "file"; /* Read check. */ do { g_TestFile = "[test]\n" "abc=def"; g_BytesUntilError = -1; IniFile test; if( !test.ReadFile( "test/file" ) ) Fail( "INI: ReadFile failed: %s", test.GetError().c_str() ); RString sStr; if( !test.GetValue( "test", "abc", sStr ) ) Fail( "INI: GetValue failed" ); if( sStr != "def" ) Fail( "INI: GetValue failed: expected \"def\", got \"%s\"", sStr.c_str() ); } while(false); /* Read error check. */ do { g_TestFile = "[test]\n" "abc=def"; g_BytesUntilError = 5; IniFile test; if( test.ReadFile( "test/file" ) ) Fail( "INI: ReadFile should have failed" ); if( test.GetError() != "Fake error" ) Fail( "INI: ReadFile error check: wrong error return: got \"%s\"", test.GetError().c_str() ); } while(false); /* Write error check. */ do { g_BytesUntilError = 5; IniFile test; test.SetValue( "foo", "bar", RString("baz") ); if( test.WriteFile( "test/file" ) ) Fail( "INI: WriteFile should have failed" ); if( test.GetError() != "Fake error" ) Fail( "INI: ReadFile error check: wrong error return: got \"%s\"", test.GetError().c_str() ); } while(false); }
void AnimatedTexture::Load( const CString &sTexOrIniPath ) { ASSERT( vFrames.empty() ); // don't load more than once m_bSphereMapped = sTexOrIniPath.Find("sphere") != -1; if( sTexOrIniPath.Find("add") != -1 ) m_BlendMode = BLEND_ADD; else m_BlendMode = BLEND_NORMAL; if( GetExtension(sTexOrIniPath).CompareNoCase("ini")==0 ) { IniFile ini; if( !ini.ReadFile( sTexOrIniPath ) ) RageException::Throw( "Error reading %s: %s", sTexOrIniPath.c_str(), ini.GetError().c_str() ); if( !ini.GetKey("AnimatedTexture") ) RageException::Throw( "The animated texture file '%s' doesn't contain a section called 'AnimatedTexture'.", sTexOrIniPath.c_str() ); ini.GetValue( "AnimatedTexture", "TexVelocityX", m_fTexVelocityX ); ini.GetValue( "AnimatedTexture", "TexVelocityY", m_fTexVelocityY ); const CString sTexOrIniName = Dirname(sTexOrIniPath); RageTextureID ID; ID.bStretch = true; ID.bHotPinkColorKey = true; ID.bMipMaps = true; // use mipmaps in Models for( int i=0; i<1000; i++ ) { CString sFileName; float fDelay = 0; if( ini.GetValue( "AnimatedTexture", ssprintf("Frame%04d", i), sFileName ) && ini.GetValue( "AnimatedTexture", ssprintf("Delay%04d", i), fDelay ) ) { ID.filename = sTexOrIniName + sFileName; AnimatedTextureState state = { TEXTUREMAN->LoadTexture( ID ), fDelay }; vFrames.push_back( state ); } else break; } } else { RageTextureID ID; ID.filename = sTexOrIniPath; ID.bHotPinkColorKey = true; ID.bStretch = true; ID.bMipMaps = true; // use mipmaps in Models AnimatedTextureState state = { TEXTUREMAN->LoadTexture( ID ), 1 }; vFrames.push_back( state ); } }
void InputMapper::ReadMappingsFromDisk() { ASSERT( GAMEMAN != NULL ); ClearAllMappings(); IniFile ini; if( !ini.ReadFile( KEYMAPS_PATH ) ) LOG->Trace( "Couldn't open mapping file \"%s\": %s.", KEYMAPS_PATH, ini.GetError().c_str() ); const Game *pGame = GAMESTATE->GetCurrentGame(); const XNode *Key = ini.GetChild( pGame->m_szName ); if( Key ) { FOREACH_CONST_Attr( Key, i ) { const CString &name = i->m_sName; const CString &value = i->m_sValue; GameInput GameI; GameI.fromString( pGame, name ); CStringArray sDeviceInputStrings; split( value, ",", sDeviceInputStrings, false ); for( unsigned i=0; i<sDeviceInputStrings.size() && i<unsigned(NUM_GAME_TO_DEVICE_SLOTS); i++ ) { DeviceInput DeviceI; DeviceI.fromString( sDeviceInputStrings[i] ); if( DeviceI.IsValid() ) SetInputMap( DeviceI, GameI, i ); } } } AddDefaultMappingsForCurrentGameIfUnmapped(); }
void InputMapper::ReadMappingsFromDisk() { ASSERT( GAMEMAN != NULL ); ClearAllMappings(); IniFile ini; if( !ini.ReadFile( KEYMAPS_PATH ) ) LOG->Trace( "Couldn't open mapping file \"%s\": %s.", KEYMAPS_PATH, ini.GetError().c_str() ); const IniFile::key *Key = ini.GetKey( GAMESTATE->GetCurrentGame()->m_szName ); if( Key ) { for( IniFile::key::const_iterator i = Key->begin(); i != Key->end(); ++i ) { const CString &name = i->first; const CString &value = i->second; GameInput GameI; GameI.fromString( name ); CStringArray sDeviceInputStrings; split( value, ",", sDeviceInputStrings, false ); for( unsigned i=0; i<sDeviceInputStrings.size() && i<unsigned(NUM_GAME_TO_DEVICE_SLOTS); i++ ) { DeviceInput DeviceI; DeviceI.fromString( sDeviceInputStrings[i] ); if( DeviceI.IsValid() ) SetInputMap( DeviceI, GameI, i ); } } } AddDefaultMappingsForCurrentGameIfUnmapped(); }
void ChangeGameSettings::OnOK() { // TODO: Add extra validation here IniFile ini; ini.ReadFile( SpecialFiles::PREFERENCES_INI_PATH ); if( BST_CHECKED == IsDlgButtonChecked(IDC_RADIO_OPENGL) ) ini.SetValue( "Options", "VideoRenderers", (RString)"opengl" ); else if( BST_CHECKED == IsDlgButtonChecked(IDC_RADIO_DIRECT3D) ) ini.SetValue( "Options", "VideoRenderers", (RString)"d3d" ); else ini.SetValue( "Options", "VideoRenderers", RString() ); if( BST_CHECKED == IsDlgButtonChecked(IDC_RADIO_SOUND_DIRECTSOUND_HARDWARE) ) ini.SetValue( "Options", "SoundDrivers", (RString)"DirectSound" ); else if( BST_CHECKED == IsDlgButtonChecked(IDC_RADIO_SOUND_DIRECTSOUND_SOFTWARE) ) ini.SetValue( "Options", "SoundDrivers", (RString)"DirectSound-sw" ); else if( BST_CHECKED == IsDlgButtonChecked(IDC_RADIO_SOUND_WAVEOUT) ) ini.SetValue( "Options", "SoundDrivers", (RString)"WaveOut" ); else if( BST_CHECKED == IsDlgButtonChecked(IDC_RADIO_SOUND_NULL) ) ini.SetValue( "Options", "SoundDrivers", (RString)"null" ); else ini.SetValue( "Options", "SoundDrivers", RString() ); if( BST_CHECKED == IsDlgButtonChecked(IDC_CHECK_FORCE_60HZ) ) { ini.SetValue( "Options", "RefreshRate", 60 ); } else { int iRefresh = 0; ini.GetValue( "Options", "RefreshRate", iRefresh ); if( iRefresh == 60 ) ini.SetValue( "Options", "RefreshRate", 0 ); } ini.SetValue( "Options", "LogToDisk", BST_CHECKED == IsDlgButtonChecked(IDC_CHECK_LOG_TO_DISK) ); ini.SetValue( "Options", "ShowLogOutput", BST_CHECKED == IsDlgButtonChecked(IDC_CHECK_SHOW_LOG_WINDOW) ); if( !ini.WriteFile(SpecialFiles::PREFERENCES_INI_PATH) ) { RString sError = ssprintf( ERROR_WRITING_FILE.GetValue(), SpecialFiles::PREFERENCES_INI_PATH.c_str(), ini.GetError().c_str() ); Dialog::OK( sError ); } CDialog::OnOK(); }