File Annotation

Not logged in
5128eecc9f 2011-02-23        kinaba: //--- K.I.LIB ---
5128eecc9f 2011-02-23        kinaba: // kl_str.cpp : string classes for K.I.LIB
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: #include "stdafx.h"
5128eecc9f 2011-02-23        kinaba: #include "kilib.h"
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: //------------------------ 2byte文字処理用 ----------------------//
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: char kiStr::st_lb[256];
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: void kiStr::init()
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	st_lb[0] = 0;
5128eecc9f 2011-02-23        kinaba: 	for( int c=1; c!=256; c++ )
5128eecc9f 2011-02-23        kinaba: 		st_lb[c] = (::IsDBCSLeadByte(c) ? 2 : 1);
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: //-------------------------- コピー系色々 ------------------------//
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: kiStr::kiStr( int start_size )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	(m_pBuf = new char[ m_ALen = start_size ])[0] = '\0';
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: kiStr::kiStr( const char* s, int min_size )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	int slen = ki_strlen(s) + 1;
5128eecc9f 2011-02-23        kinaba: 	m_ALen = ( slen < min_size ) ? min_size : slen;
5128eecc9f 2011-02-23        kinaba: 	ki_memcpy( m_pBuf=new char[m_ALen], s, slen );
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: kiStr::kiStr( const kiStr& s )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	ki_memcpy( m_pBuf=new char[m_ALen=s.m_ALen], s.m_pBuf, m_ALen=s.m_ALen );
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: kiStr& kiStr::operator = ( const kiStr& s )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	if( this != &s )
5128eecc9f 2011-02-23        kinaba: 		*this = (const char*)s;
5128eecc9f 2011-02-23        kinaba: 	return *this;
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: kiStr& kiStr::operator = ( const char* s )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	int slen = ki_strlen( s ) + 1;
5128eecc9f 2011-02-23        kinaba: 	int  len = this->len();
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	if( m_ALen < slen || s <= m_pBuf+len || m_pBuf <= s+slen )
5128eecc9f 2011-02-23        kinaba: 	{
5128eecc9f 2011-02-23        kinaba: 		char* tmp = new char[ m_ALen = ( m_ALen>slen ? m_ALen : slen) ];
5128eecc9f 2011-02-23        kinaba: 		ki_memcpy( tmp, s, slen );
5128eecc9f 2011-02-23        kinaba: 		delete [] m_pBuf;
5128eecc9f 2011-02-23        kinaba: 		m_pBuf = tmp;
5128eecc9f 2011-02-23        kinaba: 	}
5128eecc9f 2011-02-23        kinaba: 	else
5128eecc9f 2011-02-23        kinaba: 		ki_memcpy( m_pBuf, s, slen );
5128eecc9f 2011-02-23        kinaba: 	return *this;
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: kiStr& kiStr::operator += ( const char* s )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	int slen = ki_strlen( s ) + 1;
5128eecc9f 2011-02-23        kinaba: 	int  len = this->len();
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	if( m_ALen < len+slen+1
5128eecc9f 2011-02-23        kinaba: 	 || ( s <= m_pBuf && m_pBuf <= s+len )
5128eecc9f 2011-02-23        kinaba: 	 || ( m_pBuf <= s && s <= m_pBuf+slen ) )
5128eecc9f 2011-02-23        kinaba: 	{
5128eecc9f 2011-02-23        kinaba: 		char* tmp = new char[ m_ALen = ( m_ALen>slen+len+1 ? m_ALen : slen+len+1) ];
5128eecc9f 2011-02-23        kinaba: 		ki_memcpy( tmp, m_pBuf, len );
5128eecc9f 2011-02-23        kinaba: 		delete [] m_pBuf;
5128eecc9f 2011-02-23        kinaba: 		m_pBuf = tmp;
5128eecc9f 2011-02-23        kinaba: 	}
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	ki_memcpy( m_pBuf+len, s, slen+1 );
5128eecc9f 2011-02-23        kinaba: 	return *this;
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: kiStr& kiStr::operator += ( char c )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	int  len = this->len();
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	if( m_ALen < len+2 )
5128eecc9f 2011-02-23        kinaba: 	{
5128eecc9f 2011-02-23        kinaba: 		char* tmp = new char[ m_ALen=len+20 ];
5128eecc9f 2011-02-23        kinaba: 		ki_memcpy( tmp, m_pBuf, len );
5128eecc9f 2011-02-23        kinaba: 		delete [] m_pBuf;
5128eecc9f 2011-02-23        kinaba: 		m_pBuf = tmp;
5128eecc9f 2011-02-23        kinaba: 	}
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	m_pBuf[len]=c, m_pBuf[len+1]='\0';
5128eecc9f 2011-02-23        kinaba: 	return *this;
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: kiStr& kiStr::setInt( int n, bool cm )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	if( n==0 )
5128eecc9f 2011-02-23        kinaba: 		m_pBuf[0] = '0', m_pBuf[1] = '\0';
5128eecc9f 2011-02-23        kinaba: 	else
5128eecc9f 2011-02-23        kinaba: 	{
5128eecc9f 2011-02-23        kinaba: 		bool minus = (n<0);
5128eecc9f 2011-02-23        kinaba: 		if( minus )
5128eecc9f 2011-02-23        kinaba: 			n= -n;
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 		char tmp[30];
5128eecc9f 2011-02-23        kinaba: 		tmp[29]='\0';
5128eecc9f 2011-02-23        kinaba: 		int i;
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 		for( i=28; i>=0; i-- )
5128eecc9f 2011-02-23        kinaba: 		{
5128eecc9f 2011-02-23        kinaba: 			if( cm && (29-i)%4==0 )
5128eecc9f 2011-02-23        kinaba: 				tmp[i--] = ',';
5128eecc9f 2011-02-23        kinaba: 			tmp[i] = '0' + n%10;
5128eecc9f 2011-02-23        kinaba: 			n /= 10;
5128eecc9f 2011-02-23        kinaba: 			if( n==0 )
5128eecc9f 2011-02-23        kinaba: 				break;
5128eecc9f 2011-02-23        kinaba: 		}
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 		if( minus )
5128eecc9f 2011-02-23        kinaba: 			tmp[--i] = '-';
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 		(*this) = tmp+i;
5128eecc9f 2011-02-23        kinaba: 	}
5128eecc9f 2011-02-23        kinaba: 	return (*this);
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: //-------------------------- 文字列処理全般 ------------------------//
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: kiStr::~kiStr()
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	delete [] m_pBuf;
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: kiStr::operator const char*() const
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	return m_pBuf;
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: bool kiStr::operator == ( const char* s ) const
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	return 0==ki_strcmp( m_pBuf, s );
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: bool kiStr::isSame( const char* s ) const
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	return 0==ki_strcmpi( m_pBuf, s );
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: int kiStr::len() const
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	return ki_strlen( m_pBuf );
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: //-------------------------- ユーティリティー ------------------------//
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: kiStr& kiStr::loadRsrc( UINT id )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	::LoadString( GetModuleHandle(NULL), id, m_pBuf, m_ALen );
5128eecc9f 2011-02-23        kinaba: 	return *this;
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: void kiPath::beSpecialPath( int nPATH )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	switch( nPATH )
5128eecc9f 2011-02-23        kinaba: 	{
5128eecc9f 2011-02-23        kinaba: 	case Win:	::GetWindowsDirectory( m_pBuf, m_ALen );	break;
5128eecc9f 2011-02-23        kinaba: 	case Sys:	::GetSystemDirectory( m_pBuf, m_ALen );		break;
5128eecc9f 2011-02-23        kinaba: 	case Tmp:	::GetTempPath( m_ALen, m_pBuf );			break;
5128eecc9f 2011-02-23        kinaba: 	case Cur:	::GetCurrentDirectory( m_ALen, m_pBuf );	break;
5128eecc9f 2011-02-23        kinaba: 	case Exe_name:
5128eecc9f 2011-02-23        kinaba: 				::GetModuleFileName( NULL, m_pBuf, m_ALen );break;
5128eecc9f 2011-02-23        kinaba: 	case Exe:
5128eecc9f 2011-02-23        kinaba: 		{
5128eecc9f 2011-02-23        kinaba: 			::GetModuleFileName( NULL, m_pBuf, m_ALen );
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 			char* m=NULL;
5128eecc9f 2011-02-23        kinaba: 			for( char *p=m_pBuf; *p!='\0'; p=next(p) )
5128eecc9f 2011-02-23        kinaba: 				if( *p=='\\' )
5128eecc9f 2011-02-23        kinaba: 					m = p;
5128eecc9f 2011-02-23        kinaba: 			if( m )
5128eecc9f 2011-02-23        kinaba: 				*m='\0';
5128eecc9f 2011-02-23        kinaba: 			break;
5128eecc9f 2011-02-23        kinaba: 		}
5128eecc9f 2011-02-23        kinaba: 	default:
5128eecc9f 2011-02-23        kinaba: 		{
5128eecc9f 2011-02-23        kinaba: 			*m_pBuf = '\0';
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 			LPITEMIDLIST il;
5128eecc9f 2011-02-23        kinaba: 			if( NOERROR!=::SHGetSpecialFolderLocation( NULL, nPATH, &il ) )
5128eecc9f 2011-02-23        kinaba: 				return;
5128eecc9f 2011-02-23        kinaba: 			::SHGetPathFromIDList( il, m_pBuf );
5128eecc9f 2011-02-23        kinaba: 			app()->shellFree( il );
5128eecc9f 2011-02-23        kinaba: 		}
5128eecc9f 2011-02-23        kinaba: 	}
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: void kiPath::beBackSlash( bool add )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	char* last = m_pBuf;
5128eecc9f 2011-02-23        kinaba: 	for( char* p=m_pBuf; *p!='\0'; p=next(p) )
5128eecc9f 2011-02-23        kinaba: 		last=p;
5128eecc9f 2011-02-23        kinaba: 	if( *last=='\\' || *last=='/' )
5128eecc9f 2011-02-23        kinaba: 	{
5128eecc9f 2011-02-23        kinaba: 		if( !add )
5128eecc9f 2011-02-23        kinaba: 			*last = '\0';
5128eecc9f 2011-02-23        kinaba: 	}
5128eecc9f 2011-02-23        kinaba: 	else if( add && last!=m_pBuf )
5128eecc9f 2011-02-23        kinaba: 		*this += '\\';
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: bool kiPath::beDirOnly()
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	char* lastslash = m_pBuf-1;
5128eecc9f 2011-02-23        kinaba: 	for( char* p=m_pBuf; *p; p=next(p) )
5128eecc9f 2011-02-23        kinaba: 		if( *p=='\\' || *p=='/' )
5128eecc9f 2011-02-23        kinaba: 			lastslash = p;
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	*(lastslash+1) = '\0';
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	return (lastslash+1 != m_pBuf);
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: void kiPath::beShortPath()
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	::GetShortPathName( m_pBuf, m_pBuf, m_ALen );
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: void kiPath::mkdir()
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	for( char *p=m_pBuf; *p; p=kiStr::next(p) )
5128eecc9f 2011-02-23        kinaba: 	{
5128eecc9f 2011-02-23        kinaba: 		if( (*p!='\\' && *p!='/') || (p-m_pBuf<=4) )
5128eecc9f 2011-02-23        kinaba: 			continue;
5128eecc9f 2011-02-23        kinaba: 		*p = '\0';
5128eecc9f 2011-02-23        kinaba: 		if( !kiSUtil::exist(m_pBuf) )
5128eecc9f 2011-02-23        kinaba: 			if( ::CreateDirectory( m_pBuf, NULL ) )
5128eecc9f 2011-02-23        kinaba: 				::SHChangeNotify( SHCNE_MKDIR,SHCNF_PATH,(const void*)m_pBuf,NULL );
5128eecc9f 2011-02-23        kinaba: 		*p = '\\';
5128eecc9f 2011-02-23        kinaba: 	}
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: void kiPath::remove()
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	if( !kiSUtil::exist(*this) )
5128eecc9f 2011-02-23        kinaba: 		return;
5128eecc9f 2011-02-23        kinaba: 	if( !kiSUtil::isdir(*this) )
5128eecc9f 2011-02-23        kinaba: 	{
5128eecc9f 2011-02-23        kinaba: 		::DeleteFile(*this);
5128eecc9f 2011-02-23        kinaba: 		return;
5128eecc9f 2011-02-23        kinaba: 	}
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	// buf == filename with no last '\\'
5128eecc9f 2011-02-23        kinaba: 	kiPath buf(*this);
5128eecc9f 2011-02-23        kinaba: 	buf.beBackSlash(false);
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	kiPath tmp(buf);
5128eecc9f 2011-02-23        kinaba: 	WIN32_FIND_DATA fd;
5128eecc9f 2011-02-23        kinaba: 	kiFindFile find;
5128eecc9f 2011-02-23        kinaba: 	find.begin( tmp += "\\*" );
5128eecc9f 2011-02-23        kinaba: 	while( find.next( &fd ) )
5128eecc9f 2011-02-23        kinaba: 	{
5128eecc9f 2011-02-23        kinaba: 		tmp = buf;
5128eecc9f 2011-02-23        kinaba: 		tmp += '\\';
5128eecc9f 2011-02-23        kinaba: 		tmp += fd.cFileName;
5128eecc9f 2011-02-23        kinaba: 		tmp.remove();
5128eecc9f 2011-02-23        kinaba: 	}
5128eecc9f 2011-02-23        kinaba: 	find.close();
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: 	::RemoveDirectory( buf );
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: void kiPath::getBody( kiStr& str ) const
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	char *p=const_cast<char*>(name()),*x,c;
5128eecc9f 2011-02-23        kinaba: 	for( x=p; *x; x=next(x) )
5128eecc9f 2011-02-23        kinaba: 		if( *x=='.' )
5128eecc9f 2011-02-23        kinaba: 			break;
5128eecc9f 2011-02-23        kinaba: 	c=*x, *x='\0';
5128eecc9f 2011-02-23        kinaba: 	str=p;
5128eecc9f 2011-02-23        kinaba: 	*x=c;
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: const char* kiPath::name( const char* str )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	const char* ans = str - 1;
5128eecc9f 2011-02-23        kinaba: 	for( const char* p=str; *p; p=next(p) )
5128eecc9f 2011-02-23        kinaba: 		if( *p=='\\' || *p=='/' )
5128eecc9f 2011-02-23        kinaba: 			ans = p;
5128eecc9f 2011-02-23        kinaba: 	return (ans+1);
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: const char* kiPath::ext( const char* str )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	const char *ans = NULL, *p;
5128eecc9f 2011-02-23        kinaba: 	for( p=name(str); *p; p=next(p) )
5128eecc9f 2011-02-23        kinaba: 		if( *p=='.' )
5128eecc9f 2011-02-23        kinaba: 			ans = p;
5128eecc9f 2011-02-23        kinaba: 	return ans ? (ans+1) : p;
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: const char* kiPath::ext_all( const char* str )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	const char* p;
5128eecc9f 2011-02-23        kinaba: 	for( p=name(str); *p; p=next(p) )
5128eecc9f 2011-02-23        kinaba: 		if( *p=='.' )
5128eecc9f 2011-02-23        kinaba: 			return (p+1);
5128eecc9f 2011-02-23        kinaba: 	return p;
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: void kiPath::body( const char* str, char* buf )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	char *n=const_cast<char*>(kiPath::name(str)),*x;
5128eecc9f 2011-02-23        kinaba: 	for( x=n; *x; x=next(x) )
5128eecc9f 2011-02-23        kinaba: 		if( *x=='.' )
5128eecc9f 2011-02-23        kinaba: 			break;
5128eecc9f 2011-02-23        kinaba: 	memcpy( buf, str, x-n );
5128eecc9f 2011-02-23        kinaba: 	buf[x-n]='\0';
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: UINT kiPath::getDriveType() const
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	char* p;
5128eecc9f 2011-02-23        kinaba: 	for( p=m_pBuf; *p=='\\'; p=next(p) );
5128eecc9f 2011-02-23        kinaba: 	for( p=m_pBuf; *p && *p!='\\'; p=next(p) );
5128eecc9f 2011-02-23        kinaba: 	char c=*(++p);*p='\0';
5128eecc9f 2011-02-23        kinaba: 	UINT ans=::GetDriveType( m_pBuf );
5128eecc9f 2011-02-23        kinaba: 	*p=c; return ans;
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: 
5128eecc9f 2011-02-23        kinaba: bool kiPath::endwithyen( const char* str )
5128eecc9f 2011-02-23        kinaba: {
5128eecc9f 2011-02-23        kinaba: 	for( const char *p=str,*last=str; *p; p=next(p) )
5128eecc9f 2011-02-23        kinaba: 		last=p;
5128eecc9f 2011-02-23        kinaba: 	return ( *last=='\\' || *last=='/' );
5128eecc9f 2011-02-23        kinaba: }
5128eecc9f 2011-02-23        kinaba: