Mercurial > hg > orthanc-stone
comparison Deprecated/Applications/Wasm/StartupParametersBuilder.cpp @ 1399:ff8d2e46ac63
moved Applications into Deprecated
author | Alain Mazy <alain@mazy.be> |
---|---|
date | Wed, 29 Apr 2020 20:44:31 +0200 |
parents | Applications/Wasm/StartupParametersBuilder.cpp@86930bc676c6 |
children | 828a9b4ee1b7 |
comparison
equal
deleted
inserted
replaced
1398:c5403d52078c | 1399:ff8d2e46ac63 |
---|---|
1 #include "StartupParametersBuilder.h" | |
2 #include <iostream> | |
3 #include <cstdio> | |
4 #include "emscripten/html5.h" | |
5 | |
6 namespace OrthancStone | |
7 { | |
8 void StartupParametersBuilder::Clear() | |
9 { | |
10 startupParameters_.clear(); | |
11 } | |
12 | |
13 void StartupParametersBuilder::SetStartupParameter( | |
14 const char* name, | |
15 const char* value) | |
16 { | |
17 startupParameters_.push_back(std::make_tuple(name, value)); | |
18 } | |
19 | |
20 void StartupParametersBuilder::GetStartupParameters( | |
21 boost::program_options::variables_map& parameters, | |
22 const boost::program_options::options_description& options) | |
23 { | |
24 std::vector<std::string> argvStrings(startupParameters_.size() + 1); | |
25 // argv mirrors pointers to the internal argvStrings buffers. | |
26 // ****************************************************** | |
27 // THIS IS HIGHLY DANGEROUS SO BEWARE!!!!!!!!!!!!!! | |
28 // ****************************************************** | |
29 std::vector<const char*> argv(startupParameters_.size() + 1); | |
30 | |
31 int argCounter = 0; | |
32 argvStrings[argCounter] = "dummy.exe"; | |
33 argv[argCounter] = argvStrings[argCounter].c_str(); | |
34 | |
35 argCounter++; | |
36 | |
37 std::string cmdLine = ""; | |
38 for ( StartupParameters::const_iterator it = startupParameters_.begin(); | |
39 it != startupParameters_.end(); | |
40 it++) | |
41 { | |
42 std::stringstream argSs; | |
43 | |
44 argSs << "--" << std::get<0>(*it); | |
45 if(std::get<1>(*it).length() > 0) | |
46 argSs << "=" << std::get<1>(*it); | |
47 | |
48 argvStrings[argCounter] = argSs.str(); | |
49 cmdLine = cmdLine + " " + argvStrings[argCounter]; | |
50 std::cout << cmdLine << std::endl; | |
51 argv[argCounter] = argvStrings[argCounter].c_str(); | |
52 argCounter++; | |
53 } | |
54 | |
55 | |
56 std::cout << "simulated cmdLine = \"" << cmdLine.c_str() << "\"\n"; | |
57 | |
58 try | |
59 { | |
60 boost::program_options::store( | |
61 boost::program_options::command_line_parser(argCounter, argv.data()). | |
62 options(options).allow_unregistered().run(), parameters); | |
63 boost::program_options::notify(parameters); | |
64 } | |
65 catch (boost::program_options::error& e) | |
66 { | |
67 std::cerr << "Error while parsing the command-line arguments: " << | |
68 e.what() << std::endl; | |
69 } | |
70 } | |
71 } |