File Annotation

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