Artifact db7b4a9cec9be918c149ed5885b08ebf86cfb9e0
1 //--- K.I.LIB ---
2 // kl_str.h : string classes for K.I.LIB
3
4 #ifndef AFX_KISTR_H__1932CA2C_ACA6_4606_B57A_ACD0B7D1D35B__INCLUDED_
5 #define AFX_KISTR_H__1932CA2C_ACA6_4606_B57A_ACD0B7D1D35B__INCLUDED_
6
7 /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
8 // kiStr : 単純文字列
9
10 class kiStr
11 {
12 friend void kilib_startUp();
13
14 private: //-- グローバルな初期化処理など ---------------------
15
16 static void init();
17
18 public: //-- 外向きインターフェイス --------------------------
19
20 // 2byte文字の処理を高速化(したような気分)
21 static char* next( char* p )
22 { return p+st_lb[(*p)&0xff]; }
23 static const char* next( const char* p )
24 { return p+st_lb[(*p)&0xff]; }
25 static bool isLeadByte( char c )
26 { return st_lb[c&0xff]==2; }
27
28 // 初期化
29 kiStr( int start_size = 100 );
30 kiStr( const char* s, int min_size = 100 );
31 explicit kiStr( const kiStr& s );
32
33 // 演算子
34 kiStr& operator = ( const kiStr& );
35 kiStr& operator = ( const char* s );
36 kiStr& operator += ( const char* s );
37 kiStr& operator += ( char c );
38 bool operator == ( const char* s ) const;
39 bool isSame( const char* s ) const;
40 operator const char*() const;
41 int len() const;
42 void lower()
43 { ::CharLower(m_pBuf); }
44 void upper()
45 { ::CharUpper(m_pBuf); }
46 kiStr& setInt( int n, bool cm=false );
47 void replaceToSlash() {
48 for(char* p=m_pBuf; *p; p=next(p))
49 if(*p=='\\')
50 *p='/';
51 }
52
53 // リソースからロード
54 kiStr& loadRsrc( UINT id );
55
56 kiStr& removeTrailWS();
57
58 protected: //-- 派生クラス向け -----------------------------
59
60 char* m_pBuf;
61 int m_ALen;
62
63 private: //-- 内部処理 -------------------------------------
64
65 static char st_lb[256];
66
67 public:
68
69 virtual ~kiStr();
70 };
71
72 inline const kiStr operator+(const kiStr& x, const kiStr& y)
73 { return kiStr(x) += y; }
74 inline const kiStr operator+(const char* x, const kiStr& y)
75 { return kiStr(x) += y; }
76 inline const kiStr operator+(const kiStr& x, const char* y)
77 { return kiStr(x) += y; }
78
79 /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
80 // kiPath : パス特有の処理用関数付き文字列
81
82 class kiPath : public kiStr
83 {
84 public: //-- 外向きインターフェイス --------------------------
85
86 // 初期化
87 kiPath() : kiStr( MAX_PATH ){}
88 explicit kiPath( const char* s ) : kiStr( s, MAX_PATH ){}
89 explicit kiPath( const kiStr& s ) : kiStr( s, MAX_PATH ){}
90 explicit kiPath( const kiPath& s ) : kiStr( s, MAX_PATH ){}
91 kiPath( int nPATH, bool bs = true ) : kiStr( MAX_PATH )
92 {
93 beSpecialPath( nPATH );
94 if( nPATH != Exe_name )
95 beBackSlash( bs );
96 }
97
98 // operator
99 void operator = ( const char* s ){ kiStr::operator =(s); }
100
101 // 特殊パス取得
102 void beSpecialPath( int nPATH );
103 enum { Win=0x1787, Sys, Tmp, Prg, Exe, Cur, Exe_name,
104 Snd=CSIDL_SENDTO, Dsk=CSIDL_DESKTOP, Doc=CSIDL_PERSONAL };
105
106 // 短いパス
107 void beShortPath();
108
109 // 最後のバックスラッシュ制御
110 void beBackSlash( bool add );
111
112 // ディレクトリ名のみ
113 bool beDirOnly();
114 // ファイル名except拡張子全部
115 void getBody( kiStr& str ) const;
116 // ファイル名except拡張子一つ
117 void getBody_all( kiStr& str ) const;
118
119 // 複数階層mkdir
120 void mkdir();
121 // 複数階層rmdir
122 void remove();
123
124 // ドライブタイプ
125 UINT getDriveType() const;
126 // 同じディレクトリにあるかどうか
127 bool isInSameDir(const char* r) const;
128
129 // [static] ディレクトリ情報を含まない、ファイル名のみ抽出
130 static const char* name( const char* str );
131 // [static] 最後の拡張子。無ければNULL
132 static const char* ext( const char* str );
133 // [static] 拡張子全部。無ければNULL
134 static const char* ext_all( const char* str );
135 // [static] \ / で終わるか否か
136 static bool endwithyen( const char* str );
137
138 // non-static-ver
139 const char* name() const
140 { return name(m_pBuf); }
141 const char* ext() const
142 { return ext(m_pBuf); }
143 const char* ext_all() const
144 { return ext_all(m_pBuf); }
145 };
146
147 #endif