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 }