File Annotation

Not logged in
dcdd144598 2011-02-23        kinaba: #include "stdafx.h"
dcdd144598 2011-02-23        kinaba: #include "registry.h"
dcdd144598 2011-02-23        kinaba: using namespace ki;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: //=========================================================================
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void IniFile::SetFileName( const TCHAR* ini, bool exepath )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	iniName_ =
dcdd144598 2011-02-23        kinaba: 		(exepath  ? iniName_.BeSpecialPath(Path::Exe) : Path(TEXT("")));
dcdd144598 2011-02-23        kinaba: 	if( ini != NULL )
dcdd144598 2011-02-23        kinaba: 		iniName_ += ini;
dcdd144598 2011-02-23        kinaba: 	else
dcdd144598 2011-02-23        kinaba: 		iniName_ += (Path(Path::ExeName).body()+=TEXT(".ini"));
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void IniFile::SetSectionAsUserName()
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	TCHAR usr[256];
dcdd144598 2011-02-23        kinaba: 	DWORD siz = countof(usr);
dcdd144598 2011-02-23        kinaba: 	if( !::GetUserName( usr, &siz ) )
dcdd144598 2011-02-23        kinaba: 		::lstrcpy( usr, TEXT("Default") );
dcdd144598 2011-02-23        kinaba: 	SetSection( usr );
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: bool IniFile::HasSectionEnabled( const TCHAR* section ) const
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	return (0!=::GetPrivateProfileInt(
dcdd144598 2011-02-23        kinaba: 		section, TEXT("Enable"), 0, iniName_.c_str() ));
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: int IniFile::GetInt ( const TCHAR* key, int defval ) const
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	return ::GetPrivateProfileInt(
dcdd144598 2011-02-23        kinaba: 		section_.c_str(), key, defval, iniName_.c_str() );
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: bool IniFile::GetBool( const TCHAR* key, bool defval ) const
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	return (0!=::GetPrivateProfileInt(
dcdd144598 2011-02-23        kinaba: 		section_.c_str(), key, defval?1:0, iniName_.c_str() ));
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: String IniFile::GetStr ( const TCHAR* key, const String& defval ) const
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	RawString str;
dcdd144598 2011-02-23        kinaba: 	ulong l=256, s;
dcdd144598 2011-02-23        kinaba: 	for(;;)
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		TCHAR* x = str.AllocMem(l);
dcdd144598 2011-02-23        kinaba: 		s = ::GetPrivateProfileString( section_.c_str(), key,
dcdd144598 2011-02-23        kinaba: 			defval.c_str(), x, l, iniName_.c_str() );
dcdd144598 2011-02-23        kinaba: 		if( s < l-1 )
dcdd144598 2011-02-23        kinaba: 			break;
dcdd144598 2011-02-23        kinaba: 		l <<= 1;
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 	str.UnlockMem();
dcdd144598 2011-02-23        kinaba: 	return str;
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: Path IniFile::GetPath( const TCHAR* key, const Path& defval ) const
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: #ifdef _UNICODE
dcdd144598 2011-02-23        kinaba: 	String s = GetStr( key, defval );
dcdd144598 2011-02-23        kinaba: 	if( s.len()==0 || s[0]!='#' )
dcdd144598 2011-02-23        kinaba: 		return s;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// UTF-decoder
dcdd144598 2011-02-23        kinaba: 	String buf;
dcdd144598 2011-02-23        kinaba: 	for(uint i=0; 4*i+4<s.len(); ++i)
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		unsigned short v = 0;
dcdd144598 2011-02-23        kinaba: 		for(int j=1; j<=4; ++j)
dcdd144598 2011-02-23        kinaba: 		{
dcdd144598 2011-02-23        kinaba: 			int ch = s[4*i+j];
dcdd144598 2011-02-23        kinaba: 			if( '0'<=ch && ch<='9' ) v = 16*v + ch-'0';
dcdd144598 2011-02-23        kinaba: 			if( 'a'<=ch && ch<='z' ) v = 16*v + ch-'a'+10;
dcdd144598 2011-02-23        kinaba: 			if( 'A'<=ch && ch<='Z' ) v = 16*v + ch-'A'+10;
dcdd144598 2011-02-23        kinaba: 		}
dcdd144598 2011-02-23        kinaba: 		buf += (wchar_t) v;
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 	return buf;
dcdd144598 2011-02-23        kinaba: #else
dcdd144598 2011-02-23        kinaba: 	return GetStr( key, defval );
dcdd144598 2011-02-23        kinaba: #endif
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: bool IniFile::PutStr ( const TCHAR* key, const TCHAR* val )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	if( val[0]==TEXT('"') && val[::lstrlen(val)-1]==TEXT('"') )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		// 両端に " があると勝手に削られるので対処
dcdd144598 2011-02-23        kinaba: 		String nval;
dcdd144598 2011-02-23        kinaba: 		nval += TEXT('"');
dcdd144598 2011-02-23        kinaba: 		nval += val;
dcdd144598 2011-02-23        kinaba: 		nval += TEXT('"');
dcdd144598 2011-02-23        kinaba: 		return (FALSE != ::WritePrivateProfileString(
dcdd144598 2011-02-23        kinaba: 			section_.c_str(), key, nval.c_str(), iniName_.c_str() ) );
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 	else
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		return (FALSE != ::WritePrivateProfileString(
dcdd144598 2011-02-23        kinaba: 			section_.c_str(), key, val, iniName_.c_str() ) );
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: bool IniFile::PutInt ( const TCHAR* key, int val )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	TCHAR buf[20];
dcdd144598 2011-02-23        kinaba: 	::wsprintf( buf, TEXT("%d"), val );
dcdd144598 2011-02-23        kinaba: 	return PutStr( key, buf );
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: bool IniFile::PutBool( const TCHAR* key, bool val )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	return PutStr( key, val ? TEXT("1") : TEXT("0") );
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: bool IniFile::PutPath( const TCHAR* key, const Path& val )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: #ifdef _UNICODE
dcdd144598 2011-02-23        kinaba: 	BOOL err = FALSE;
dcdd144598 2011-02-23        kinaba: 	::WideCharToMultiByte( CP_ACP, 0, val.c_str(), -1, NULL, 0, NULL, &err );
dcdd144598 2011-02-23        kinaba: 	if( !err )
dcdd144598 2011-02-23        kinaba: 		return PutStr( key , val.c_str() );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// UTF-encoder
dcdd144598 2011-02-23        kinaba: 	const TCHAR* hex = TEXT("0123456789abcdef");
dcdd144598 2011-02-23        kinaba: 	String buf = TEXT("#");
dcdd144598 2011-02-23        kinaba: 	for(int i=0; i!=val.len(); ++i)
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		unsigned short u = (unsigned short) val[i];
dcdd144598 2011-02-23        kinaba: 		buf += hex[(u>>12) & 0xf];
dcdd144598 2011-02-23        kinaba: 		buf += hex[(u>> 8) & 0xf];
dcdd144598 2011-02-23        kinaba: 		buf += hex[(u>> 4) & 0xf];
dcdd144598 2011-02-23        kinaba: 		buf += hex[(u>> 0) & 0xf];
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 	return PutStr( key, buf.c_str() );
dcdd144598 2011-02-23        kinaba: #else
dcdd144598 2011-02-23        kinaba: 	return PutStr( key, val.c_str() );
dcdd144598 2011-02-23        kinaba: #endif
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: