5128eecc9f 2011-02-23 kinaba: //--- K.I.LIB --- 5128eecc9f 2011-02-23 kinaba: // kl_str.h : string classes for K.I.LIB 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: #ifndef AFX_KISTR_H__1932CA2C_ACA6_4606_B57A_ACD0B7D1D35B__INCLUDED_ 5128eecc9f 2011-02-23 kinaba: #define AFX_KISTR_H__1932CA2C_ACA6_4606_B57A_ACD0B7D1D35B__INCLUDED_ 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/ 5128eecc9f 2011-02-23 kinaba: // kiStr : 単純文字列 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: class kiStr 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: friend void kilib_startUp(); 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: private: //-- グローバルな初期化処理など --------------------- 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: static void init(); 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: public: //-- 外向きインターフェイス -------------------------- 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // 2byte文字の処理を高速化(したような気分) 5128eecc9f 2011-02-23 kinaba: static char* next( char* p ) 5128eecc9f 2011-02-23 kinaba: { return p+st_lb[(*p)&0xff]; } 5128eecc9f 2011-02-23 kinaba: static const char* next( const char* p ) 5128eecc9f 2011-02-23 kinaba: { return p+st_lb[(*p)&0xff]; } 5128eecc9f 2011-02-23 kinaba: static bool isLeadByte( char c ) 5128eecc9f 2011-02-23 kinaba: { return st_lb[c&0xff]==2; } 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // 初期化 5128eecc9f 2011-02-23 kinaba: kiStr( int start_size = 100 ); 5128eecc9f 2011-02-23 kinaba: kiStr( const char* s, int min_size = 100 ); 5128eecc9f 2011-02-23 kinaba: explicit kiStr( const kiStr& s ); 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // 演算子 5128eecc9f 2011-02-23 kinaba: kiStr& operator = ( const kiStr& ); 5128eecc9f 2011-02-23 kinaba: kiStr& operator = ( const char* s ); 5128eecc9f 2011-02-23 kinaba: kiStr& operator += ( const char* s ); 5128eecc9f 2011-02-23 kinaba: kiStr& operator += ( char c ); 5128eecc9f 2011-02-23 kinaba: bool operator == ( const char* s ) const; 5128eecc9f 2011-02-23 kinaba: bool isSame( const char* s ) const; 5128eecc9f 2011-02-23 kinaba: operator const char*() const; 5128eecc9f 2011-02-23 kinaba: int len() const; 5128eecc9f 2011-02-23 kinaba: char operator[]( int i ) const 5128eecc9f 2011-02-23 kinaba: { return m_pBuf[i]; } 5128eecc9f 2011-02-23 kinaba: void lower() 5128eecc9f 2011-02-23 kinaba: { ::CharLower(m_pBuf); } 5128eecc9f 2011-02-23 kinaba: void upper() 5128eecc9f 2011-02-23 kinaba: { ::CharUpper(m_pBuf); } 5128eecc9f 2011-02-23 kinaba: kiStr& setInt( int n, bool cm=false ); 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // リソースからロード 5128eecc9f 2011-02-23 kinaba: kiStr& loadRsrc( UINT id ); 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: protected: //-- 派生クラス向け ----------------------------- 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: char* m_pBuf; 5128eecc9f 2011-02-23 kinaba: int m_ALen; 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: private: //-- 内部処理 ------------------------------------- 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: static char st_lb[256]; 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: public: 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: virtual ~kiStr(); 5128eecc9f 2011-02-23 kinaba: }; 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/ 5128eecc9f 2011-02-23 kinaba: // kiPath : パス特有の処理用関数付き文字列 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: class kiPath : public kiStr 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: public: //-- 外向きインターフェイス -------------------------- 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // 初期化 5128eecc9f 2011-02-23 kinaba: kiPath() : kiStr( MAX_PATH ){} 5128eecc9f 2011-02-23 kinaba: explicit kiPath( const char* s ) : kiStr( s, MAX_PATH ){} 5128eecc9f 2011-02-23 kinaba: explicit kiPath( const kiStr& s ) : kiStr( s, MAX_PATH ){} 5128eecc9f 2011-02-23 kinaba: explicit kiPath( const kiPath& s ) : kiStr( s, MAX_PATH ){} 5128eecc9f 2011-02-23 kinaba: kiPath( int nPATH, bool bs = true ) : kiStr( MAX_PATH ) 5128eecc9f 2011-02-23 kinaba: { 5128eecc9f 2011-02-23 kinaba: beSpecialPath( nPATH ); 5128eecc9f 2011-02-23 kinaba: if( nPATH != Exe_name ) 5128eecc9f 2011-02-23 kinaba: beBackSlash( bs ); 5128eecc9f 2011-02-23 kinaba: } 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // operator 5128eecc9f 2011-02-23 kinaba: void operator = ( const char* s ){ kiStr::operator =(s); } 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // 特殊パス取得 5128eecc9f 2011-02-23 kinaba: void beSpecialPath( int nPATH ); 5128eecc9f 2011-02-23 kinaba: enum { Win=0x1787, Sys, Tmp, Prg, Exe, Cur, Exe_name, 5128eecc9f 2011-02-23 kinaba: Snd=CSIDL_SENDTO, Dsk=CSIDL_DESKTOP, Doc=CSIDL_PERSONAL }; 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // 短いパス 5128eecc9f 2011-02-23 kinaba: void beShortPath(); 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // 最後のバックスラッシュ制御 5128eecc9f 2011-02-23 kinaba: void beBackSlash( bool add ); 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // ディレクトリ名のみ 5128eecc9f 2011-02-23 kinaba: bool beDirOnly(); 5128eecc9f 2011-02-23 kinaba: // ファイル名except拡張子のみ 5128eecc9f 2011-02-23 kinaba: void getBody( kiStr& str ) const; 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // 複数階層mkdir 5128eecc9f 2011-02-23 kinaba: void mkdir(); 5128eecc9f 2011-02-23 kinaba: // 複数階層rmdir 5128eecc9f 2011-02-23 kinaba: void remove(); 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // ドライブタイプ 5128eecc9f 2011-02-23 kinaba: UINT getDriveType() const; 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // [static] ディレクトリ情報を含まない、ファイル名のみ抽出 5128eecc9f 2011-02-23 kinaba: static const char* name( const char* str ); 5128eecc9f 2011-02-23 kinaba: // [static] 最後の拡張子。無ければNULL 5128eecc9f 2011-02-23 kinaba: static const char* ext( const char* str ); 5128eecc9f 2011-02-23 kinaba: // [static] 拡張子全部。無ければNULL 5128eecc9f 2011-02-23 kinaba: static const char* ext_all( const char* str ); 5128eecc9f 2011-02-23 kinaba: // [static] body部分抽出。 5128eecc9f 2011-02-23 kinaba: static void body( const char* str, char* buf ); 5128eecc9f 2011-02-23 kinaba: // [static] \ / で終わるか否か 5128eecc9f 2011-02-23 kinaba: static bool endwithyen( const char* str ); 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: // non-static-ver 5128eecc9f 2011-02-23 kinaba: const char* name() const 5128eecc9f 2011-02-23 kinaba: { return name(m_pBuf); } 5128eecc9f 2011-02-23 kinaba: const char* ext() const 5128eecc9f 2011-02-23 kinaba: { return ext(m_pBuf); } 5128eecc9f 2011-02-23 kinaba: const char* ext_all() const 5128eecc9f 2011-02-23 kinaba: { return ext_all(m_pBuf); } 5128eecc9f 2011-02-23 kinaba: }; 5128eecc9f 2011-02-23 kinaba: 5128eecc9f 2011-02-23 kinaba: #endif