Subversion Repositories spk

Rev

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

Rev 324 Rev 328
Line 3... Line 3...
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
 
7
 
-
 
8
#include <set>
-
 
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>
12
#else
14
#else
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 137... Line 163...
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);
141
		}
167
		}
-
 
168
		bool hasFlag(unsigned char s) const
-
 
169
		{
-
 
170
			return _flags.find(s) != _flags.end();
-
 
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;
Line 150... Line 180...
150
		const CPackages& packages() const
180
		const CPackages& packages() const
151
		{
181
		{
152
			return _p;
182
			return _p;
153
		}
183
		}
154
 
184
 
-
 
185
		CPackages& packages()
-
 
186
		{
-
 
187
			return _p;
-
 
188
		}
-
 
189
 
155
		const CDirIO& dirIO() const
190
		const CDirIO& dirIO() const
156
		{
191
		{
157
			return _file->dirIO();
192
			return _file->dirIO();
158
		}
193
		}
159
 
194