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: