Subversion Repositories spk

Rev

Rev 324 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 324 Rev 328
Line 2... Line 2...
2
 
2
 
3
#include "WString.h"
3
#include "WString.h"
4
#include "WStringList.h"
4
#include "WStringList.h"
5
#include "../File_IO.h"
5
#include "../File_IO.h"
6
#include "../DirIO.h"
6
#include "../DirIO.h"
-
 
7
 
-
 
8
#include <set>
7
 
9
 
8
#ifdef _WIN32
10
#ifdef _WIN32
9
#include <windows.h>
11
#include <windows.h>
10
#include <direct.h>
12
#include <direct.h>
11
#include <shlobj.h>
13
#include <shlobj.h>
Line 25... Line 27...
25
		std::shared_ptr<CFileIO> _file;
27
		std::shared_ptr<CFileIO> _file;
26
		Utils::WStringList		_options;
28
		Utils::WStringList		_options;
27
		CDirIO 					_myDoc;
29
		CDirIO 					_myDoc;
28
		CDirIO 					_tempDir;
30
		CDirIO 					_tempDir;
29
		std::vector<Utils::WString> _args;
31
		std::vector<Utils::WString> _args;
-
 
32
		std::set<unsigned char> _flags;
30
		CPackages				_p;
33
		CPackages				_p;
31
 
34
 
32
	public:
35
	public:
33
		CommandLine(int argc, char* argv[])
36
		CommandLine(int argc, char* argv[], bool doFlags = false)
34
		{
37
		{
35
			_file = std::make_shared<CFileIO>(argv[0]);
38
			_file = std::make_shared<CFileIO>(argv[0]);
36
 
39
 
37
			for (int i = 1; i < argc; i++)
40
			for (int i = 1; i < argc; i++)
38
			{
41
			{
Line 49... Line 52...
49
					}
52
					}
50
					else
53
					else
51
						_options.pushBack(arg);
54
						_options.pushBack(arg);
52
				}
55
				}
53
				else
56
				else
-
 
57
				{
-
 
58
					if (doFlags)
-
 
59
					{
-
 
60
						if (arg.startsWith(L"-") && !arg.startsWith(L"--"))
-
 
61
						{
-
 
62
							Utils::WString flags = arg.substr(1);
-
 
63
							for(int is = 0; is < flags.length(); is++)
-
 
64
							{
-
 
65
								unsigned char flag = std::toupper(flags[is]);
-
 
66
								if (flag >= 'a' && flag <= 'z')
-
 
67
									flag -= 32; // convert to uppercase
-
 
68
								if (flag >= 'A' && flag <= 'Z')
-
 
69
								{
-
 
70
									if (_flags.size() < 256)
-
 
71
										_flags.insert(flag);
-
 
72
									else
-
 
73
										wprintf(L"Warning: Too many flags, ignoring %c\n", flag);
-
 
74
								}
-
 
75
							}
-
 
76
							continue;
-
 
77
						}
-
 
78
					}
54
					_args.push_back(arg);
79
					_args.push_back(arg);
-
 
80
				}
55
			}
81
			}
56
 
82
 
57
			if (_file->dir().empty() || !_file->dir().contains("/"))
83
			if (_file->dir().empty() || !_file->dir().contains("/"))
58
			{
84
			{
59
				Utils::WString d;
85
				Utils::WString d;
Line 92... Line 118...
92
		{
118
		{
93
			return _file;
119
			return _file;
94
		}
120
		}
95
 
121
 
96
		const Utils::WString& cmdName() const
122
		const Utils::WString& cmdName() const
97
		{
123
		{
98
			return _file->filename();
124
			return _file->filename();
99
		}
125
		}
100
 
126
 
101
		const Utils::WString& cmdDir() const
127
		const Utils::WString& cmdDir() const
102
		{
128
		{
103
			return _file->dir();
129
			return _file->dir();
104
		}
130
		}
105
 
131
 
106
		const Utils::WString& tempDir() const
132
		const Utils::WString& tempDir() const
107
		{
133
		{
108
			return _tempDir.dir();
134
			return _tempDir.dir();
109
		}
135
		}
110
 
136
 
111
		const Utils::WString& myDoc() const
137
		const Utils::WString& myDoc() const
112
		{
138
		{
113
			return _myDoc.dir();
139
			return _myDoc.dir();
114
		}
140
		}
115
 
141
 
116
		const Utils::WStringList options() const
142
		const Utils::WStringList options() const
117
		{
143
		{
118
			return _options;
144
			return _options;
119
		}
145
		}
120
 
146
 
Line 136... Line 162...
136
		}
162
		}
137
 
163
 
138
		bool hasSwitch(const Utils::WString& s) const
164
		bool hasSwitch(const Utils::WString& s) const
139
		{
165
		{
140
			return _options.contains(s);
166
			return _options.contains(s);
-
 
167
		}
-
 
168
		bool hasFlag(unsigned char s) const
-
 
169
		{
-
 
170
			return _flags.find(s) != _flags.end();
141
		}
171
		}
142
 
172
 
143
		Utils::WString switchData(const Utils::WString& s) const
173
		Utils::WString switchData(const Utils::WString& s) const
144
		{
174
		{
145
			if (_options.contains(s))
175
			if (_options.contains(s))
146
				return _options[s]->data;
176
				return _options[s]->data;
147
			return Utils::WString::Null();
177
			return Utils::WString::Null();
148
		}
178
		}
149
 
179
 
150
		const CPackages& packages() const
180
		const CPackages& packages() const
-
 
181
		{
-
 
182
			return _p;
-
 
183
		}
-
 
184
 
-
 
185
		CPackages& packages()
151
		{
186
		{
152
			return _p;
187
			return _p;
153
		}
188
		}
154
 
189
 
155
		const CDirIO& dirIO() const
190
		const CDirIO& dirIO() const