Artifact 815f69faf09d6d48855316ccf5d6c0b2cd95442a
1 //--- K.I.LIB ---
2 // kl_cmd.h : commandline parser
3
4 #include "stdafx.h"
5 #include "kilib.h"
6
7
8 //------------------------ 文字列のメモリ処理など -----------------------//
9
10
11 kiCmdParser::kiCmdParser( char* cmd, bool ignoreFirst )
12 {
13 m_Buffer = NULL;
14 if( cmd )
15 doit( cmd, ignoreFirst );
16 }
17
18 kiCmdParser::kiCmdParser( const char* cmd, bool ignoreFirst )
19 {
20 m_Buffer=NULL;
21 if( cmd )
22 {
23 m_Buffer = new char[ ki_strlen(cmd)+1 ];
24 ki_strcpy( m_Buffer, cmd );
25 doit( m_Buffer, ignoreFirst );
26 }
27 }
28
29 kiCmdParser::~kiCmdParser()
30 {
31 delete [] m_Buffer;
32 }
33
34
35 //---------------------------- 分割の処理 -----------------------------//
36
37
38 void kiCmdParser::doit( char* start, bool ignoreFirst )
39 {
40 char* p=start;
41 char endc;
42 bool first = true;
43
44 while( *p!='\0' )
45 {
46 // 余分な空白はスキップ
47 while( *p==' ' ) //|| *p=='\t' || *p=='\r' || *p=='\n' )
48 p++;
49
50 // " だったら、その旨記録してさらに一個進める
51 if( *p=='"' )
52 endc='"', p++;
53 else
54 endc=' ';
55
56 // end-of-text なら終了
57 if( *p=='\0' )
58 break;
59
60 if( first && ignoreFirst )
61 first = false;
62 else
63 {
64 // 引数を保存
65 if( *p=='-' )
66 m_Switch.add( p );
67 else
68 m_Param.add( p );
69 }
70
71 // 引数の終わりへ…
72 while( *p!=endc && *p!='\0' )
73 p++;
74
75 // 終わりは'\0'にすることによって、引数を区切る
76 if( *p!='\0' )
77 *(p++) = '\0';
78 }
79 }