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